{"version":3,"sources":["webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///../../../src/components/transitions/createTransition.ts","webpack:///../../../src/components/transitions/expand-transition.ts","webpack:///../../../src/components/transitions/index.ts","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/core-js/internals/to-index.js","webpack:///./node_modules/rxjs/_esm5/internal/util/hostReportError.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VSheet/index.ts","webpack:///./node_modules/xlsx/xlsx.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///./node_modules/rxjs/_esm5/internal/Subscriber.js","webpack:///./node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/pluck.js","webpack:///./node_modules/xlsx/jszip.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleArray.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromArray.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/of.js","webpack:///./node_modules/core-js/internals/to-offset.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/survey-vue/survey-vue.js","webpack:///../../../src/components/VItemGroup/VItemGroup.ts","webpack:///../../../src/components/VList/VListItemGroup.ts","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///../../../src/mixins/routable/index.ts","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/file-saver/dist/FileSaver.min.js","webpack:///./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack:///./node_modules/xlsx/dist/cpexcel.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///../../../src/mixins/measurable/index.ts","webpack:///./node_modules/core-js/internals/set-species.js","webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///../../../src/components/VProgressLinear/VProgressLinear.ts","webpack:///../../../src/components/VProgressLinear/index.ts","webpack:///../../../src/mixins/loadable/index.ts","webpack:///./node_modules/vue/dist/vue.runtime.esm.js","webpack:///./node_modules/rxjs/_esm5/internal/util/ObjectUnsubscribedError.js","webpack:///./node_modules/rxjs/_esm5/internal/SubjectSubscription.js","webpack:///./node_modules/rxjs/_esm5/internal/Subject.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack:///./node_modules/date-fns/esm/parse/index.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/vuex/dist/vuex.esm.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/rxSubscriber.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isObject.js","webpack:///../../../src/mixins/registrable/index.ts","webpack:///../../../src/components/VList/VListItemIcon.ts","webpack:///./node_modules/core-js/internals/get-iterator-method.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/date-fns/esm/parseJSON/index.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/core-js/modules/es.array.unscopables.flat.js","webpack:///../../../src/directives/scroll/index.ts","webpack:///../../../src/mixins/applicationable/index.ts","webpack:///../../../src/mixins/scrollable/index.ts","webpack:///../../../src/components/VAppBar/VAppBar.ts","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/core-js/internals/species-constructor.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack:///../../../src/components/VForm/VForm.ts","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///../../../src/mixins/groupable/index.ts","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///../../../src/directives/ripple/index.ts","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///../../src/util/mixins.ts","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack:///../../../src/components/VList/VListGroup.ts","webpack:///../../../src/components/VList/VListItemAction.ts","webpack:///../../../src/components/VAvatar/VAvatar.ts","webpack:///../../../src/components/VAvatar/index.ts","webpack:///../../../src/components/VList/VListItemAvatar.ts","webpack:///../../../src/components/VList/index.ts","webpack:///./node_modules/vue-class-component/dist/vue-class-component.esm.js","webpack:///./node_modules/vue-property-decorator/lib/vue-property-decorator.js","webpack:///./node_modules/core-js/internals/array-buffer.js","webpack:///../../../src/components/VGrid/VCol.ts","webpack:///./node_modules/vuetify-loader/lib/runtime/installComponents.js","webpack:///./node_modules/core-js/internals/string-multibyte.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///../../../src/components/VToolbar/VToolbar.ts","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///../../../src/components/VApp/VApp.ts","webpack:///./node_modules/core-js/internals/typed-array-constructor.js","webpack:///../../../src/mixins/themeable/index.ts","webpack:///./node_modules/core-js/internals/ieee754.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///../../src/util/colorUtils.ts","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///../../../src/mixins/binds-attrs/index.ts","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///../../src/util/helpers.ts","webpack:///./node_modules/core-js/internals/array-fill.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack:///../../../src/components/VProgressCircular/VProgressCircular.ts","webpack:///../../../src/components/VProgressCircular/index.ts","webpack:///../../../src/components/VBtn/VBtn.ts","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/date-fns/esm/addMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/subMilliseconds/index.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///../../../src/components/VLabel/VLabel.ts","webpack:///../../../src/components/VLabel/index.ts","webpack:///../../../src/components/VMessages/VMessages.ts","webpack:///../../../src/components/VMessages/index.ts","webpack:///../../../src/mixins/validatable/index.ts","webpack:///../../../src/components/VInput/VInput.ts","webpack:///../../../src/components/VInput/index.ts","webpack:///../../../src/components/VCounter/VCounter.ts","webpack:///../../../src/components/VCounter/index.ts","webpack:///../../../src/mixins/intersectable/index.ts","webpack:///../../../src/components/VTextField/VTextField.ts","webpack:///../../../src/components/VList/VList.ts","webpack:///./node_modules/rxjs/_esm5/internal/config.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/index.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/advance-string-index.js","webpack:///./node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArray.js","webpack:///./node_modules/vue-router/dist/vue-router.esm.js","webpack:///./node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack:///../../../src/util/color/transformSRGB.ts","webpack:///../../../src/mixins/elevatable/index.ts","webpack:///../../../src/components/VSheet/VSheet.ts","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///../../../src/directives/intersect/index.ts","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/core-js/internals/regexp-exec.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack:///../../../src/components/VCard/index.ts","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///../../../src/components/VIcon/index.ts","webpack:///../../../src/mixins/bootable/index.ts","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/takeUntil.js","webpack:///./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///./node_modules/core-js/internals/typed-array-from.js","webpack:///../../../src/mixins/roundable/index.ts","webpack:///../../../src/mixins/proxyable/index.ts","webpack:///../../../src/components/VGrid/grid.ts","webpack:///../../../src/components/VGrid/VContainer.ts","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/rxjs/_esm5/internal/util/UnsubscriptionError.js","webpack:///./node_modules/rxjs/_esm5/internal/Subscription.js","webpack:///../../../src/components/VContent/VContent.ts","webpack:///./node_modules/core-js/modules/es.promise.finally.js","webpack:///./node_modules/core-js/internals/array-buffer-native.js","webpack:///../../../src/mixins/colorable/index.ts","webpack:///./node_modules/core-js/modules/es.regexp.exec.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///../../../src/mixins/sizeable/index.ts","webpack:///../../../src/components/VCard/VCard.ts","webpack:///./node_modules/date-fns/esm/isValid/index.js","webpack:///./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack:///./node_modules/date-fns/esm/format/index.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/observable.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/promise-resolve.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromEvent.js","webpack:///./node_modules/rxjs/_esm5/internal/util/noop.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/never.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/refCount.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/ConnectableObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/multicast.js","webpack:///./node_modules/vue-rx/dist/vue-rx.esm.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/share.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/iterator.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArrayLike.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeTo.js","webpack:///./node_modules/rxjs/_esm5/internal/innerSubscribe.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///../../../src/mixins/ssr-bootable/index.ts","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack:///./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isFunction.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/finalize.js","webpack:///../../src/util/console.ts","webpack:///../../src/util/mergeData.ts","webpack:///../../../src/components/VList/VListItem.ts","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/internals/redefine-all.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/rxjs/_esm5/internal/Observer.js","webpack:///./node_modules/rxjs/_esm5/internal/util/canReportError.js","webpack:///./node_modules/rxjs/_esm5/internal/util/toSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/util/identity.js","webpack:///./node_modules/rxjs/_esm5/internal/util/pipe.js","webpack:///./node_modules/rxjs/_esm5/internal/Observable.js","webpack:///./node_modules/core-js/internals/array-buffer-view-core.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/map.js","webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack:///./node_modules/date-fns/esm/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/formatDistanceToNow/index.js","webpack:///./node_modules/core-js/internals/new-promise-capability.js","webpack:///../../../src/mixins/toggleable/index.ts","webpack:///../src/install.ts","webpack:///../../src/locale/en.ts","webpack:///../../../src/presets/default/index.ts","webpack:///../../../src/services/service/index.ts","webpack:///../../../src/services/presets/index.ts","webpack:///../../../src/services/application/index.ts","webpack:///../../../src/services/breakpoint/index.ts","webpack:///../../../src/services/goto/easing-patterns.ts","webpack:///../../../src/services/goto/util.ts","webpack:///../../../src/services/goto/index.ts","webpack:///../../../../src/services/icons/presets/mdi-svg.ts","webpack:///../../../../src/services/icons/presets/md.ts","webpack:///../../../../src/services/icons/presets/mdi.ts","webpack:///../../../../src/services/icons/presets/fa.ts","webpack:///../../../../src/services/icons/presets/fa4.ts","webpack:///../../../../src/services/icons/presets/fa-svg.ts","webpack:///../../../../src/services/icons/presets/index.ts","webpack:///../../../src/services/icons/index.ts","webpack:///../../../src/services/lang/index.ts","webpack:///../../../src/util/color/transformCIELAB.ts","webpack:///../../../src/services/theme/utils.ts","webpack:///../../../src/services/theme/index.ts","webpack:///../src/framework.ts","webpack:///./node_modules/rxjs/_esm5/internal/operators/catchError.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///../../../src/components/VMain/VMain.ts","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/core-js/internals/to-positive-integer.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToArray.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack:///../../../src/mixins/positionable/index.ts","webpack:///./node_modules/core-js/internals/native-promise-constructor.js"],"names":["wellKnownSymbol","TO_STRING_TAG","test","module","exports","String","aFunction","fn","that","length","undefined","call","a","b","c","apply","arguments","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toIndexedObject","toPrimitive","has","IE8_DOM_DEFINE","nativeGetOwnPropertyDescriptor","Object","getOwnPropertyDescriptor","f","O","P","error","mergeTransitions","dest","Array","origin","functional","props","group","type","default","hideOnLeave","leaveAbsolute","mode","tag","context","data","on","el","h","mergeData","name","functions","expandedParentClass","x","sizeProperty","offsetProperty","transition","overflow","initialStyle","offset","requestAnimationFrame","afterEnter","enterCancelled","leaveCancelled","afterLeave","resetStyles","size","createSimpleTransition","VFadeTransition","VSlideXTransition","VExpandTransition","createJavascriptTransition","utils","buildURL","InterceptorManager","dispatchRequest","mergeConfig","Axios","instanceConfig","this","defaults","interceptors","request","response","prototype","config","url","method","toLowerCase","chain","promise","Promise","resolve","forEach","interceptor","unshift","fulfilled","rejected","push","then","shift","getUri","params","paramsSerializer","replace","toInteger","toLength","it","number","RangeError","hostReportError","err","setTimeout","fails","createElement","defineProperty","get","callback","arr","breakpoints","ALIGNMENT","makeProps","val","prefix","def","alignValidator","str","alignProps","validator","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","justify","alignContent","classMap","breakpointClass","className","breakpoint","prop","cache","dense","noGutters","children","cacheKey","classList","value","staticClass","class","make_xlsx_lib","XLSX","version","current_codepage","current_ansi","cptable","global","window","VALID_ANSI","i","CS2CP","0","1","2","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","255","69","set_ansi","cp","indexOf","reset_ansi","set_cp","reset_cp","char_codes","o","len","charCodeAt","utf16leread","fromCharCode","join","utf16beread","debom","c1","c2","slice","_getchar","_getansi","decode","DENSE","DIF_XL","Base64","map","encode","input","c3","e1","e2","e3","e4","isNaN","charAt","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","from","e","buf","enc","bind","alloc","n","allocUnsafe","new_raw_buf","new_unsafe_buf","s2a","s","split","s2ab","ArrayBuffer","view","Uint8Array","a2s","isArray","a2u","Error","ab2a","bconcat","bufs","concat","chr0","chr1","SSF","make_ssf","_strrev","fill","l","pad0","v","d","t","pad_","rpad_","pad0r1","Math","round","pad0r2","p2_32","pow","pad0r","isgeneral","days","months","init_table","table_fmt","default_map","defi","default_str","frac","D","mixed","sgn","B","P_2","P_1","Q_2","Q_1","Q","A","floor","q","parse_date_code","opts","b2","date","time","dow","dout","out","T","u","y","m","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","fix_hijri","basedate","dnthresh","getTime","base1904","datenum_local","epoch","getTimezoneOffset","general_fmt_int","toString","_general_int","general_fmt_num","trailing_zeroes_and_decimal","strip_decimal","mantissa_zeroes_and_decimal","exp_with_single_digit","normalize_exp","small_exp","w","toFixed","toPrecision","toExponential","large_exp","general_fmt_num_base","V","log","LOG10E","substr","toUpperCase","general_fmt","format","write_date","fmt","ss0","ss","tt","outl","outstr","commaify","j","_general_num","_general","write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","match","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","r","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dd","dec","_frac","carry","flr","write_num_flt","ffmt","ri","ff","oa","min","max","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","lastIndexOf","split_fmt","in_str","_split","abstime","fmt_is_date","eval_fmt","flen","dt","lst","hr","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","is_date","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","choose_fmt","lat","m1","m2","dateNF","table","load_entry","load","_table","get_table","load_table","tbl","XLMLFormatMap","SSFImplicit","dateNFregex","dateNF_regex","RegExp","dateNF_fix","Y","datestr","timestr","CRC32","DO_NOT_EXPORT_CFB","factory","signed_crc_table","Int32Array","crc32_bstr","bstr","seed","C","L","crc32_buf","crc32_buf_8","crc32_str","_fs","CFB","fs","namecmp","R","Z","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_dos_date","read_shift","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_extra_field","blob","prep_blob","flags","sz","tgt","mtime","atime","ctime","mt","get_fs","parse","file","options","parse_zip","mver","ssz","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","fat_addrs","mv","check_get_mver","header","check_shifts","dir_cnt","chk","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","ENDOFCHAIN","files","Paths","FileIndex","FullPaths","read_directory","build_full_paths","raw","HEADER_SIGNATURE","nsectors","ceil","FI","FP","pl","dad","get_mfat_entry","entry","payload","mini","start","MSSZ","__readInt32LE","new_buf","cnt","sector","get_sector_list","chkd","buf_chain","modulus","addr","nodes","__toBuffer","sl","k","seen","minifat_store","namelen","__utf16le","color","clsid","state","ct","read_date","storage","content","__readUInt32LE","read_file","readFileSync","read","init_cfb","cfb","root","CLSID","seed_cfb","nm","find","rebuild_cfb","gc","_file","pop","now","HEADER_CLSID","sort","elt","_write","_opts","fileType","write_zip","mini_size","fat_size","mini_cnt","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","path","UCFullPaths","UCPaths","UCPath","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","write_file","writeFileSync","write","use_zlib","zlib","InflateRaw","InflRaw","_processChunk","_finishFlushFlag","bytesRead","console","message","_inflateRawSync","usz","_inflate","_deflateRawSync","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","bl","read_bits_3","read_bits_4","read_bits_5","read_bits_7","read_bits_n","realloc","copy","set","zero_fill_array","_deflateRaw","boff","off","build_tree","clens","cmap","MAX","maxlen","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","next_code","hcodes","h1","h2","inflate","outbuf","woff","OL","max_len_1","max_len_2","bits","code","len_eb","dst_eb","dst","warn_or_throw","wrn","msg","fcnt","start_cd","csz","efsz","fcsz","EF","parse_local_file","meth","crc32","_csz","_usz","ef","_crc32","cfb_add","unsafe","cdirs","compression","desc","fp","fi","crcs","sz_cd","namebuf","cfb_new","fpath","cfb_gc","cfb_del","splice","cfb_mov","old_name","new_name","writeFile","ReadShift","CheckField","_inflateRaw","blobify","write_dl","fname","utf8write","IE_SaveFile","Blob","navigator","msSaveBlob","saveAs","URL","document","createObjectURL","chrome","downloads","download","revokeObjectURL","href","body","appendChild","click","removeChild","$","File","Folder","open","encoding","close","read_binary","infile","keys","ks","o2","hasOwnProperty","evert_key","obj","key","K","evert","evert_num","evert_arr","datenum","refdate","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date","good_pd","parseDate","fixdate","cc2str","dup","JSON","stringify","fuzzynum","Number","wt","fuzzydate","NaN","getYear","jszip","safe_split_regex","split_regex","re","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdatabin","getdata","safegetzipfile","zip","g","getzipfile","getzipdata","safe","getzipstr","zipentries","zip_add_file","zip_new","zip_read","base64","resolve_path","result","target","step","JSZipSync","XML_HEADER","attregexg","tagregex","nsregex","nsregex2","parsexmltag","skip_root","skip_LC","z","eq","quot","trim","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","text","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","escapexlml","xlml_fixstr","entregex","entrepl","xlml_unfixstr","parsexmlbool","utf8read","orig","utf8readb","ww","corpus","utf8readc","matchtag","mtcache","htmldecode","entities","vtregex","vt_cache","vtvregex","vtmregex","parseVector","matches","baseType","res","WTF","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","write_vt","xlsx","XMLNS","XLMLNS","read_double_le","Infinity","write_double_le","bs","av","isFinite","LN2","__lpp4","___lpp4","___toBuffer","__readUInt16LE","___utf16le","__hexlify","___hexlify","__utf8","__readUInt8","___utf8","__lpstr","___lpstr","__cpstr","___cpstr","__lpwstr","___lpwstr","__double","___double","__8lpp4","___8lpp4","is_buf","isBuffer","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cppayload","end","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","write_record","ba","XLSBRE","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","fix_col","fix_row","encode_range_xls","encode_row","encode_col","OFFCRYPTO","make_offcrypto","_crypto","crypto","rc4","md5","hex","createHash","update","digest","decode_row","rowstr","unfix_row","row","cstr","decode_col","colstr","unfix_col","col","split_cell","decode_cell","decode_range","encode_range","cs","ce","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","ws","_R","_C","_origin","_range","__R","__C","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","write_StrRun","run","parse_RichStr","rgsStrRun","dwSizeStrRun","write_RichStr","parse_BrtCommentText","write_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","write_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","parse_BrtColor","xColorType","index","nTS","bR","bG","bB","auto","icv","XLSIcv","rgb","rgb2Hex","theme","tint","write_BrtColor","parse_FontFlags","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","write_FontFlags","font","grbit","italic","strike","outline","shadow","condense","extend","parse_ClipboardFormatOrString","ClipFmt","3","8","14","parse_ClipboardFormatOrAnsiString","parse_ClipboardFormatOrUnicodeString","VT_I2","VT_I4","VT_BOOL","VT_VARIANT","VT_UI4","VT_LPSTR","VT_FILETIME","VT_BLOB","VT_CF","VT_VECTOR","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","SpecialProperties","DocSummaryRE","SummaryRE","CountryEnum","XLSFillPattern","rgbify","_XLSIcv","BErr","RBErr","ct2type","CT_LIST","workbooks","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","styles","type2ct","new_ct","rels","links","coreprops","extprops","custprops","themes","calcchains","vba","drawings","TODO","xmlns","parse_ct","ctext","Extension","ContentType","PartName","CT","calcchain","sst","style","CTYPE_XML_ROOT","xsd","xsi","CTYPE_DEFAULTS","write_ct","f1","bookType","f2","f3","RELS","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","VBA","get_rels_path","parse_rels","currentFilePath","hash","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","RELS_EXTERN","add_rels","rId","relobj","targetmode","CT_ODS","parse_manifest","Rn","FEtag","xlml_normalize","xlmlregex","exec","write_manifest","manifest","write_rdf_type","write_rdf_has","write_rdf","rdf","write_meta_ods","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","dc","dcterms","dcmitype","cp_doit","write_core_props","Props","CreatedDate","ModifiedDate","EXT_PROPS","PseudoPropsPairs","load_props_pairs","HP","TOP","hp","parts","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","parse_ext_props","xml","HeadingPairs","TitlesOfParts","EXT_PROPS_XML_ROOT","vt","write_ext_props","W","Application","CUST_PROPS","custregex","parse_cust_props","toks","warn","CUST_PROPS_XML_ROOT","write_cust_props","pid","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","LastPrinted","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","evert_XLMLDPM","xlml_set_prop","xlml_write_docprops","xlml_write_custprops","Custprops","BLACKLIST","parse_FILETIME","dwLowDateTime","dwHighDateTime","write_FILETIME","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtUnalignedString","parse_VtVecUnalignedLpstrValue","ret","parse_VtVecUnalignedLpstr","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","headerParts","parse_VtVecHeadingPairValue","cElements","parse_VtVecHeadingPair","parse_dictionary","CodePage","dict","parse_BLOB","bytes","parse_ClipboardData","Size","write_TypedPropertyValue","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","XLSPSSkip","guess_property_type","write_PropertySet","entries","RE","hdr","piao","pr","pio","pinfo","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","write_PropertySetStream","entries2","clsid2","ps0","ps1","parsenoop2","writezeroes","parslurp","writebool","parseuint16","writeuint16","parseuint16a","parse_Bes","write_Bes","parse_ShortXLUnicodeString","cch","fHighByte","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","write_XLUnicodeRichExtendedString","xlstr","nfmts","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_ControlInfo","accel","parse_URLMoniker","extra","parse_FileMoniker","ansiPath","unicodePath","parse_HyperlinkMoniker","parse_HyperlinkString","parse_Hyperlink","sVer","displayName","targetFrameName","moniker","oleMoniker","guid","fileTime","Loc","Tooltip","write_Hyperlink","hl","F","parse_LongRGBA","parse_LongRGB","parse_XLSCell","rw","ixfe","write_XLSCell","parse_frtHeader","rt","parse_OptXLUnicodeString","parse_XTI","iSupBook","itabFirst","itabLast","parse_RkRec","parse_AddinUdf","udfName","parse_Ref8U","rwFirst","rwLast","colFirst","colLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtNts","fSharedNote","parse_FtCf","cf","parse_FtSkip","FtTab","parse_FtArray","fts","ft","parse_BOF","BIFFVer","write_BOF","wb","parse_InterfaceHdr","parse_WriteAccess","UserName","write_WriteAccess","b8","parse_WsBool","fDialog","parse_BoundSheet8","hidden","hs","write_BoundSheet8","parse_SST","ucnt","Count","Unique","write_SST","parse_ExtSST","extsst","dsst","parse_Row","miyRw","level","hpt","parse_ForceFullCalculation","fullcalc","parse_RecalcId","parse_DefaultRowHeight","fl","Unsynced","DyZero","ExAsc","ExDsc","parse_Window1","xWn","yWn","dxWn","dyWn","iTabCur","iTabFirst","ctabSel","wTabRatio","Pos","Dim","Flags","CurTab","FirstTab","Selected","TabRatio","write_Window1","parse_Window2","RTL","write_Window2","parse_Pane","parse_Font","dyHeight","write_Font","b5","parse_LabelSst","isst","write_LabelSst","os","parse_Label","write_Label","parse_Format","fmtstr","write_Format","parse_BIFF2Format","parse_Dimensions","write_Dimensions","parse_RK","rkrec","rknum","parse_MulRk","rkrecs","lastcol","parse_MulBlank","ixfes","parse_CellStyleXF","patternType","cellStyles","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","icvFore","icvBack","fsxButton","parse_XF","fStyle","write_XF","ixfeP","parse_Guts","write_Guts","guts","parse_BoolErr","write_BoolErr","parse_Number","xnum","write_Number","parse_XLHeaderFooter","parse_SupBook","ctab","sbcch","virtPath","rgst","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_NameCmt","cchName","cchComment","comment","parse_ShrFmla","ref","cUse","parse_SharedParsedFormula","parse_Array","parse_ArrayParsedFormula","parse_MTRSettings","fMTREnabled","fUserSetThreadCount","cUserThreadCount","parse_NoteSh","idObj","stAuthor","parse_Note","parse_MergeCells","merges","cmcs","write_MergeCells","parse_Obj","parse_BIFF5Obj","cmo","parse_BIFF5OT","parse_TxO","texts","lastobj","cchText","parse_HLink","hlink","write_HLink","parse_HLinkTooltip","wzTooltip","write_HLinkTooltip","TT","parse_Country","write_Country","parse_ClrtClient","ccv","parse_Palette","parse_XFCRC","cxfs","crc","parse_ColInfo","coldx","parse_Setup","footer","parse_ShtProps","area","write_RRTabId","parse_Blank","parse_Scl","parse_String","parse_ImData","env","lcb","parse_BIFF2STR","parse_BIFF2NUM","num","write_BIFF2NUM","write_BIFF2Cell","parse_BIFF2INT","write_BIFF2INT","parse_BIFF2STRING","parse_BIFF2FONTXTRA","parse_RString","DBF","dbf_codepage_map","dbf_reverse_map","DBF_SUPPORTED_VERSIONS","dbf_to_aoa","memo","vfp","l7","nrow","fpos","rlen","current_cp","fields","field","hend","sheetRows","dbf_to_sheet","dbf_to_workbook","_RLEN","sheet_to_dbf","codepage","aoa","sheet_to_json","headers","hcnt","coltypes","guess","_guess","hf","_f","hb","rout","_s","to_workbook","to_sheet","from_sheet","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","5","6","7","sylk_char_regex","sylk_char_fn","_","decode_sylk_char","newcc","sylk_to_aoa","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","record","C_seen_K","C_seen_X","formula","rc_to_a1","F_seen","wch","process_col","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_workbook","write_ws_cell_sylk","a1_to_rc","write_ws_cols_sylk","cols","rec","wpx","width2px","px2char","write_ws_rows_sylk","rows","px2pt","sheet_to_sylk","preamble","RS","coord","DIF","dif_to_aoa","dif_to_aoa_str","metadata","dif_to_sheet","dif_to_workbook","sheet_to_dif","push_field","topic","push_value","ETH","eth_to_aoa","eth_to_sheet","eth_to_workbook","sep","meta","sheet_to_eth_data","sheet_to_eth","PRN","set_text_arr","prn_to_aoa_str","lines","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","sepcc","_re","finish_cell","fuzzyfmla","cellText","cellNF","outer","prn_to_sheet_str","prn_to_sheet","firstbyte","prn_to_workbook","sheet_to_prn","read_wb_ID","OLD_WTF","WK_","lotushopper","Enum","WK1Enum","lotus_to_workbook","lotus_to_workbook_buf","sidx","snames","refguess","WK3Enum","qpro","vers","parse_RANGE","parse_cell","parse_LABEL","parse_INTEGER","parse_NUMBER","parse_FORMULA","parse_cell_3","parse_LABEL_16","parse_NUMBER_18","parse_NUMBER_17","v1","v2","parse_FORMULA_19","parse_NUMBER_25","parse_NUMBER_27","parse_FORMULA_28","parse_rpr","rpr","pass","uval","family","valign","parse_rs","tregex","rpregex","parse_r","rregex","rend","rs","filter","rs_to_html","nlregex","parse_rpr2","intro","outro","r_to_html","terms","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","parse_sst_xml","count","uniqueCount","SST","straywsregex","write_sst_xml","bookSST","main","sitag","parse_BrtBeginSst","parse_sst_bin","R_n","write_BrtBeginSst","write_BrtSSTItem","write_sst_bin","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceVersionInfo","U","parse_DataSpaceMapEntry","comps","parse_DataSpaceMap","parse_DataSpaceDefinition","parse_TransformInfoHeader","parse_Primary","ename","cmode","parse_EncryptionHeader","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncryptionInfo","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","verifier","KeyData","encryptedHmacKey","encryptedHmacValue","encs","uri","parse_RC4CryptoHeader","EncryptionVersionInfo","EncryptionHeader","EncryptionVerifier","parse_RC4Header","EncryptedVerifier","EncryptedVerifierHash","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordByte","Intermediate1","Intermediate2","Intermediate3","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","Ror","Byte","XorRor","byte1","byte2","CreateXorKey_Method1","XorKey","CurrentElement","Char","password","Temp","PasswordLastChar","PadIndex","Index","ObfuscationArray","crypto_DecryptData_Method1","Data","XorArrayIndex","XorArray","Value","crypto_MakeXorDecryptor","parse_XORObfuscation","verificationBytes","insitu","parse_FilePassHeader","Info","parse_FilePass","RTF","rtf_to_sheet","rtf_to_sheet_str","rtf_to_workbook","sheet_to_rtf","hex2RGB","rgb2HSL","G","H6","L2","hsl2RGB","hsl","X","h6","rgb_tint","DEF_MDW","MAX_MDW","MIN_MDW","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","delta","_MDW","coll","customWidth","DEF_PPI","PPI","pt","XLMLPatternTypeMap","parse_borders","Borders","border","diagonalUp","diagonalDown","parse_fills","Fills","bgColor","indexed","fgColor","parse_fonts","Fonts","bold","underline","vertAlign","scheme","themeElements","clrScheme","parse_numFmts","NumberFmt","formatCode","write_numFmts","NF","cellXF_uint","cellXF_bool","parse_cellXfs","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","write_cellXfs","cellXfs","parse_sty_xml","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","STYLES_XML_ROOT","write_sty_xml","parse_BrtFmt","stFmtCode","write_BrtFmt","parse_BrtFont","bls","bCharSet","charset","write_BrtFont","sss","STY","XLSBFillPTNames","rev_XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","parse_BrtXF","ixfeParent","ifmt","write_BrtXF","flow","write_Blxf","parse_BrtBorder","write_BrtBorder","write_BrtStyle","xfId","builtinId","write_BrtBeginTableStyles","defTableStyle","defPivotStyle","parse_sty_bin","write_FMTS_bin","write_FONTS_bin","write_FILLS_bin","write_BORDERS_bin","write_CELLSTYLEXFS_bin","fontId","fillId","borderId","write_CELLXFS_bin","write_STYLES_bin","write_DXFS_bin","write_TABLESTYLES_bin","write_COLORPALETTE_bin","write_sty_bin","THEME","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","Themes","themeXLSX","parse_Theme","dwThemeVersion","themeXML","parse_ColorTheme","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_XFExtGradient","parse_ExtProp","extType","parse_XFExt","cexts","ext","update_xfext","xfext","xfe","parse_cc_xml","parse_BrtCalcChainItem$","parse_cc_bin","parse_xlink_xml","parse_xlink_bin","parse_drawing","IMG","DRAW","_shapeid","write_comments_vml","csize","bbox","joinstyle","gradientshapeok","coordsize","fillopts","angle","fillparm","fillxml","shadata","fillcolor","strokecolor","sheet_insert_comments","encoded","author","parse_comments_xml","authors","commentList","authtag","cmnttag","cm","authorId","textMatch","CMNT","CMNT_XML_ROOT","write_comments_xml","iauthor","parse_BrtBeginComment","rfx","write_BrtBeginComment","parse_BrtCommentAuthor","write_BrtCommentAuthor","parse_comments_bin","write_comments_bin","CT_VBA","make_vba_xls","newcfb","newpath","fill_vba_xls","VBAFMTS","parse_ds_bin","parse_ds_xml","parse_ms_bin","parse_ms_xml","DS","MS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_str","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceAreaRel","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_RgceLocRel","parse_RgceLocRel_BIFF2","cl","rl","parse_PtgArea","parse_PtgArea3d","ixti","parse_PtgAreaErr","parse_PtgAreaErr3d","parse_PtgAreaN","parse_PtgArray","parse_PtgAttrBaxcel","bitSemi","bitBaxcel","parse_PtgAttrChoose","parse_PtgAttrGoto","bitGoto","parse_PtgAttrIf","bitIf","parse_PtgAttrIfError","parse_PtgAttrSemi","parse_PtgAttrSpaceType","parse_PtgAttrSpace","parse_PtgAttrSpaceSemi","parse_PtgRef","parse_PtgRefN","parse_PtgRef3d","parse_PtgFunc","iftab","FtabArgc","Ftab","parse_PtgFuncVar","cparams","tab","parsetab","Cetab","parse_PtgAttrSum","parse_PtgExp","parse_PtgErr","parse_PtgInt","parse_PtgBool","parse_PtgNum","parse_PtgStr","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","parse_PtgName","nameindex","parse_PtgNameX","parse_PtgNameX_BIFF5","parse_PtgMemArea","parse_PtgMemFunc","parse_PtgRefErr","parse_PtgRefErr3d","parse_PtgMemErr","parse_PtgMemNoMem","parse_PtgTbl","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfCol","parse_PtgElfColS","parse_PtgElfColSV","parse_PtgElfColV","parse_PtgElfLel","parse_PtgElfRadical","parse_PtgElfRadicalLel","parse_PtgElfRadicalS","parse_PtgElfRw","parse_PtgElfRwV","PtgListRT","parse_PtgList","coltype","parse_PtgSxName","parse_PtgSheet","parse_PtgEndSheet","parse_PtgMemAreaN","parse_PtgMemNoMemN","parse_PtgAttrNoop","PtgTypes","PtgDupes","Ptg18","Ptg19","parse_RgbExtra","parse_Rgce","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","quoteCharacters","formula_quote_sheet_name","sname","get_ixti_raw","supbooks","XTI","SID","get_ixti","stringify_formula","stack","nameidx","last_sp","sp","fflen","argc","func","args","lbl","names","XLSXFutureFunctions","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","PtgNonDisp","_left","rgcb","parse_XLSCellParsedFormula","parse_FormulaValue","write_FormulaValue","parse_Formula","cbf","shared","write_Formula","o1","o3","bf","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","csf_to_ods_formula","ods_to_csf_3D","csf_to_ods_3D","_ssfopts","WS","browser_has_Map","Map","get_sst_id","revarr","col_obj_w","default_margins","margins","defs","left","right","top","bottom","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fmtid","fillid","raw_rgb","check_ws","parse_ws_xml_dim","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","svsregex","parse_ws_xml","data1","data2","mtch","sheetPr","parse_ws_xml_sheetpr","ridx","svs","parse_ws_xml_sheetviews","columns","parse_ws_xml_cols","parse_ws_xml_data","afilter","parse_ws_xml_autofilter","_merge","parse_ws_xml_hlinks","parse_ws_xml_margins","tmpref","write_ws_xml_merges","codeName","CodeName","write_ws_xml_sheetpr","needed","vbaraw","cname","Workbook","sheetprot_deffalse","sheetprot_deftrue","write_ws_xml_protection","location","Rel","tooltip","rng","margin","write_ws_xml_margins","seencol","coli","colm","colM","write_ws_xml_cols","write_ws_xml_autofilter","Names","Sheet","Ref","sviewregex","Views","rightToLeft","write_ws_xml_sheetviews","sview","workbookViewId","write_ws_xml_cell","oldt","oldv","Strings","revStrings","cellregex","rowregex","isregex","refregex","match_v","match_f","sdata","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","ht","outlineLevel","rslice","cellFormula","xlfn","___f","si","_tag","_r","write_ws_xml_data","height","_cell","customHeight","WS_XML_ROOT","write_ws_xml","rdata","_drawing","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","relc","ignoreEC","numberStoredAsText","sqref","parse_BrtRowHdr","write_BrtRowHdr","ncolspan","lcs","caddr","first","last","write_row_header","parse_BrtWsDim","write_BrtWsDim","parse_BrtWsFmtInfo","parse_BrtWsProp","write_BrtWsProp","parse_BrtCellBlank","write_BrtCellBlank","ncell","parse_BrtCellBool","fBool","write_BrtCellBool","parse_BrtCellError","bError","parse_BrtCellIsst","write_BrtCellIsst","parse_BrtCellReal","write_BrtCellReal","parse_BrtCellRk","write_BrtCellRk","parse_BrtCellSt","write_BrtCellSt","parse_BrtFmlaBool","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","write_BrtMergeCell","write_BrtBeginMergeCells","parse_BrtHLink","relId","display","write_BrtHLink","locidx","parse_BrtPane","parse_BrtArrFmla","fAlwaysCalc","parse_BrtShrFmla","write_BrtColInfo","BrtMarginKeys","parse_BrtMargins","write_BrtMargins","parse_BrtBeginWsView","write_BrtBeginWsView","write_BrtCellIgnoreEC","write_BrtSheetProtection","parse_BrtDVal","parse_BrtDVal14","parse_ws_bin","ai","af","aii","_d","write_ws_bin_cell","write_CELLTABLE","cap","write_MERGECELLS","write_COLINFOS","write_IGNOREECS","write_HLINKS","write_LEGACYDRAWING","write_AUTOFILTER","write_WSVIEWS2","write_WSFMTINFO","write_SHEETPROTECT","write_ws_bin","parse_Cache","nf","parse_chart","csheet","nc","CHART","CHARTEX","CS","parse_cs_xml","parse_BrtCsProp","parse_cs_bin","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","safe1904","badchars","check_ws_name","_good","check_wb_names","N","codes","cn","check_wb","wbnsregex","parse_wb_xml","dname","dnstart","Hidden","Comment","localSheetId","WB_XML_ROOT","write_wb_xml","write_names","workbookPr","sheetId","parse_BrtBundleSh","iTabID","strRelID","write_BrtBundleSh","parse_BrtWbProp","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","filterPrivacy","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","write_BrtWbProp","parse_BrtFRTArchID$","ArchID","parse_BrtName","Ptg","parse_wb_bin","write_BUNDLESHS","viz","write_BrtFileVersion","write_BrtBookView","write_BOOKVIEWS","vistab","write_wb_bin","parse_wb","parse_ws","parse_cs","parse_ms","parse_ds","parse_sty","parse_theme","parse_sst","parse_cmnt","parse_cc","parse_xlink","write_wb","write_ws","write_sty","write_sst","write_cmnt","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_format","xlml_set_custprop","oval","safe_format_xlml","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","csty","sid","StyleID","interiors","Parent","UTC","Formula","ArrayRange","xlml_clean_comment","parse_xlml_xml","opening","ishtml","HTML_","tmp","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","wsprops","lastIndex","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","parse_xlml","fix_read_opts","write_props_xlml","write_wb_xlml","write_sty_xlml","write_name_xlml","write_names_xlml","write_ws_xlml_names","write_ws_xlml_wsopts","objects","scenarios","selectLockedCells","selectUnlockedCells","write_ws_xlml_comment","write_ws_xlml_cell","attr","mi","_v","write_ws_xlml_row","write_ws_xlml_table","skip","write_ws_xlml","write_xlml","parse_compobj","AnsiUserType","AnsiClipboardFormat","Reserved1","UnicodeClipboardFormat","Reserved2","slurp","XLSRecordEnum","ll","safe_format_xf","make_cell","parse_workbook","lastcell","cmnt","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","cell_valid","XFs","palette","get_rgb","process_cell_style","line","xfd","addcell","file_depth","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_Rn","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","RecordType","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","ExternCount","tmpri","fakebs8","_fr","_fc","_fe","_arraystart","_j","_ixfe","b4idx","b2idx","TxO","ImData","noteobj","Encryption","Metadata","Country","PSCLSID","SI","DSI","UDI","parse_xls_props","DocSummary","Summary","write_xls_props","Keys","DSEntries","SEntries","CEntries","CEntries2","parse_xlscfb","CompObj","WorkbookP","bookVBA","bookFiles","write_xlscfb","wbpath","write_biff_buf","XLSRE","write_biff_rec","write_biff_continue","write_BIFF2BERR","write_BIFF2LABEL","write_ws_biff2_cell","write_ws_biff2","write_biff2_buf","write_FONTS_biff8","write_FMTS_biff8","write_FEAT","write_CELLXFS_biff8","write_ws_biff8_hlinks","HL","write_ws_biff8_cell","write_ws_biff8","_WB","_sheet","MAX_ROWS","write_biff8_global","_sheets","_wb","blen","write_biff8_buf","fix_write_opts","html_to_sheet","mtch2","hd","midx","colspan","rowspan","_t","html_to_book","make_html_row","editable","make_html_preamble","_BEGIN","_END","sheet_to_html","_row","BEGIN","END","_preamble","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","hasAttribute","getAttribute","innerHTML","parse_dom_table","table_to_book","element","get_computed_style","get_get_computed_style_function","getPropertyValue","ownerDocument","defaultView","getComputedStyle","parse_content_xml","parse_text_p","fixed","number_formats","day","month","year","hours","minutes","seconds","era","quarter","sheetag","rowtag","textptag","NFtag","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","mR","mC","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","parse_ods","ods","write_styles_ods","write_content_ods","write_text_p","null_cell_xml","covered_cell_xml","_Fref","text_p","_tgt","write_automatic_styles_ods","fods","write_ods","write_sheet_index","write_obj_str","write_htm_str","write_csv_str","sheet_to_csv","write_slk_str","write_dif_str","write_prn_str","write_rtf_str","write_txt_str","sheet_to_txt","write_dbf_buf","write_eth_str","fix_opts_func","get_sheet_type","safe_parse_wbrels","wbrels","safe_parse_sheet","relsPath","sheetRels","stype","dfile","drelsp","draw","chartp","crelsp","strip_front_slash","binname","dir","link","propdata","deps","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","nmode","wsloop","snjseen","snj","Deps","Styles","bin","parse_xlsxcfb","dsm","seds","einfo","decrypt_agile","decrypt_std76","foo","vbafmt","_sn","_i","wsrels","_type","need_vml","rId1","read_cfb","read_zip","read_plaintext","read_plaintext_raw","read_utf16","bstrify","read_prn","readSync","ab","vu","write_cfb_ctr","write_zip_type","oopts","generate","encrypt_agile","write_cfb_type","write_string_type","bom","write_stxt_type","write_binary_type","writeSync","resolve_book_type","_BT","writeFileAsync","_cb","Function","make_json_row","defval","isempty","enumerable","__rowNum__","rawNumbers","outi","counter","CC","blankrows","qreg","make_csv_row","FS","txt","forceQuotes","endregex","skipHidden","strip","sheet_to_formulae","cmds","sheet_add_json","js","skipHeader","JS","sheet_get_cell","json_to_sheet","get_formulae","make_csv","make_json","make_formulae","table_to_sheet","sheet_to_row_object_array","add_consts","get_default","ws_get_cell_stub","RC","wb_sheet_idx","sh","book_new","book_append_sheet","book_set_sheet_visibility","vis","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","rngstr","Readable","write_csv_stream","stream","BOM","_read","write_html_stream","write_json_stream","objectMode","to_json","to_html","to_csv","readFile","startOfUTCWeekYear","dirtyDate","dirtyOptions","requiredArgs","locale","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","getUTCWeekYear","firstWeek","setUTCFullYear","setUTCHours","startOfUTCWeek","MILLISECONDS_IN_WEEK","getUTCWeek","toDate","diff","isFontAwesome5","some","iconType","isSvgPath","icon","SIZE_MAP","VIcon","disabled","required","computed","Boolean","listeners$","methods","iconName","$slots","sizes","xSmall","small","medium","large","xLarge","explicitSize","attrs","hasClickListener","attrs$","themeClasses","newChildren","delimiterIndex","isMaterialIcon","fontSize","wrapperData","svgData","viewBox","role","component","renderSvgIcon","renderFontIcon","renderSvgIconComponent","$_wrapperFor","Subscriber","_super","destinationOrNext","complete","_this","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","add","SafeSubscriber","create","subscriber","_next","_error","_complete","unsubscribe","closed","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","observerOrNext","_context","useDeprecatedSynchronousErrorHandling","__tryOrSetError","__tryOrUnsub","wrappedComplete","parent","_unsubscribe","classof","regexpExec","TypeError","pluck","properties","source","plucker","mapper","currentProp","DO_NOT_EXPORT_JSZIP","globalThis","self","require","_dereq_","_keyStr","utf8","chr2","chr3","enc1","enc2","enc3","enc4","output","CompressedObject","compressedSize","uncompressedSize","compressionMethod","compressedContent","getCompressedContent","STORE","magic","compress","uncompress","compressInputType","uncompressInputType","DEFLATE","4","getTypeOf","iTop","DataReader","checkOffset","checkIndex","newIndex","setIndex","byteAt","readInt","readString","transformTo","readData","lastIndexOfSignature","sig","readDate","dostime","binary","createFolders","string2binary","string2Uint8Array","uint8Array2String","array","string2Blob","buffer","arrayBuffer2Blob","outputType","checkSupport","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","findCompression","isRegExp","object","USE_TYPEDARRAY","Uint32Array","pako","deflateRaw","inflateRaw","9","clone","newObj","support","compressions","10","ZipEntries","zipEntries","fileName","decompressed","optimizedBinaryString","fileComment","zipComment","11","12","Uint8ArrayReader","NodeBufferReader","13","signature","nodeBuffer","StringWriter","Uint8ArrayWriter","getRawData","getBinaryData","nodebuffer","dataToString","asUTF8","utf8decode","utf8encode","ZipObject","_initialMetadata","asText","asUint8Array","asArrayBuffer","decToHex","prepareFileAttrs","fileAdd","dataType","parentFolder","folderAdd","substring","lastSlash","generateCompressedObjectFrom","generateZipParts","compressedObject","dosTime","dosDate","utfEncodedFileName","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","search","relativePath","fileClone","regexp","folder","arg","newFolder","remove","kids","writer","zipData","localDirLength","centralDirLength","compressionName","zipPart","dirEnd","CENTRAL_DIRECTORY_END","typeName","append","finalize","string","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","DATA_DESCRIPTOR","15","StringReader","16","17","arraybuffer","uint8array","Builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","getBlob","18","sig0","sig1","sig2","sig3","subarray","19","20","_utf8len","string2buf","m_pos","str_len","buf_len","utf8border","buf2string","c_len","utf16buf","applyFromCharCode","chunk","nextBoundary","21","identity","stringToArrayLike","arrayLikeToString","canUseApply","resultStr","arrayLikeToArrayLike","arrayFrom","arrayTo","transform","byteLength","inputType","supported","22","ZipEntry","jszipProto","loadOptions","checkSignature","expectedSignature","reader","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","versionMadeBy","versionNeeded","zip64ExtensibleData","extraFieldId","extraFieldLength","extraFieldValue","extraDataSize","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","23","isEncrypted","bitFlag","useUTF8","prepareCompressedContent","previousIndex","compressedFileData","prepareContent","uncompressedFileData","localExtraFieldsLength","fileNameLength","checkCRC32","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","extraReader","upath","findExtraFieldUnicodePath","ucomment","findExtraFieldUnicodeComment","upathField","ucommentField","24","assign","deflate","constants","25","zlib_deflate","strings","zstream","Z_NO_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","Deflate","chunkSize","windowBits","memLevel","strategy","to","opt","gzip","ended","chunks","strm","avail_out","status","deflateInit2","deflateSetHeader","deflator","_mode","next_in","avail_in","Buf8","next_out","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","26","zlib_inflate","gzheader","Inflate","inflateInit2","inflateGetHeader","inflator","next_out_utf8","tail","utf8str","binstring2buf","arraySet","inflateEnd","ungzip","27","TYPED_OK","sources","fnTyped","src","src_offs","dest_offs","fnUntyped","setTyped","Buf16","Buf32","28","STR_APPLY_OK","STR_APPLY_UIA_OK","__","29","adler32","adler","s1","s2","30","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","31","makeTable","crcTable","32","trees","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","zero","flush_pending","pending","pending_buf","pending_out","total_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","w_size","_win","wmask","w_mask","prev","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","head","insert","ins_h","hash_shift","hash_mask","deflate_stored","flush","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","configuration_table","Config","good_length","max_lazy","nice_length","max_chain","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","deflateInit","old_flush","beg","hcrc","level_flags","bstate","_tr_align","_tr_stored_block","deflateInfo","33","GZheader","xflags","extra_len","done","34","BAD","TYPE","_in","_out","dmax","wsize","whave","wnext","hold","lcode","dcode","lmask","dmask","here","op","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","35","inflate_fast","inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","ZSWAP32","InflateState","havedict","check","total","wbits","ncode","nlen","ndist","have","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","inflateInit","lenfix","distfix","virgin","fixedtables","sym","updatewindow","put","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","order","inf_leave","inflateInfo","36","MAXBITS","lbase","lext","dbase","dext","lens_index","table_index","incr","low","mask","curr","drop","used","huff","base_index","offs","extra_index","37","38","STORED_BLOCK","STATIC_TREES","DYN_TREES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","static_l_desc","static_d_desc","static_bl_desc","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","tree","bi_reverse","bi_flush","gen_bitlen","xbits","stree","gen_codes","tr_static_init","init_block","bi_windup","copy_block","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lc","lx","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","send_all_trees","lcodes","dcodes","blcodes","detect_data_type","black_mask","static_init_done","stored_len","opt_lenb","static_lenb","39","ZStream","isScheduler","schedule","scheduleArray","scheduler","Observable","sub","Subscription","fromArray","subscribeToArray","of","toPositiveInteger","BYTES","Constructor","__WEBPACK_EXTERNAL_MODULE_vue__","modules","installedModules","__webpack_require__","moduleId","getter","Symbol","toStringTag","__esModule","ns","property","__webpack_module__","__webpack_exports__","Point","Bezier","startPoint","control1","control2","endPoint","throttle","wait","timeout","previous","later","leading","remaining","clearTimeout","trailing","SignaturePad","canvas","velocityFilterWeight","minWidth","maxWidth","minDistance","_strokeMoveUpdate","_strokeUpdate","dotSize","penColor","backgroundColor","onBegin","_canvas","_ctx","getContext","clear","_handleMouseDown","event","which","_mouseButtonDown","_strokeBegin","_handleMouseMove","_handleMouseUp","_strokeEnd","_handleTouchStart","targetTouches","touch","changedTouches","_handleTouchMove","preventDefault","_handleTouchEnd","wasCanvasTouched","velocityFrom","distanceTo","sqrt","equals","other","steps","py","cx","_point","cy","xdiff","ydiff","ctx","fillStyle","clearRect","fillRect","_reset","_isEmpty","fromDataURL","dataUrl","image","Image","ratio","devicePixelRatio","onload","drawImage","toDataURL","_toSVG","_len","_key","_handleMouseEvents","_handleTouchEvents","removeEventListener","isEmpty","clientX","clientY","point","_createPoint","lastPointGroup","lastPoint","isLastPointTooClose","_addPoint","curve","widths","_drawCurve","canDrawCurve","points","_drawDot","addEventListener","msTouchAction","touchAction","_lastVelocity","_lastWidth","rect","getBoundingClientRect","_calculateCurveControlPoints","_calculateCurveWidths","s3","dx1","dy1","dx2","dy2","l1","l2","dxm","dym","tx","ty","velocity","newWidth","_strokeWidth","_drawPoint","moveTo","arc","PI","startWidth","endWidth","widthDelta","drawSteps","beginPath","ttt","uu","uuu","closePath","_fromData","pointGroups","drawCurve","drawDot","rawPoint","_addPoint2","_rawPoint","_this2","minX","minY","maxX","maxY","svg","createElementNS","setAttributeNS","setAttribute","circle","dummy","childNodes","cloneNode","btoa","fromData","_this3","toData","_typeof","iterator","constructor","_defineProperty","configurable","writable","_extends","_objectSpread","ownKeys","getOwnPropertySymbols","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","MultiDragPlugin","Sortable","SwapPlugin","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","selector","msMatchesSelector","webkitMatchesSelector","getParentOrHost","host","nodeType","parentNode","closest","includeCTX","_throttleTimeout","R_SPACE","toggleClass","css","currentStyle","matrix","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","tagName","list","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","elRect","innerHeight","innerWidth","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","currentChild","ghost","dragged","draggable","lastChild","lastElementChild","previousElementSibling","nodeName","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","indexOfObject","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","isRectEqual","rect1","rect2","ms","cancelThrottle","scrollBy","Polymer","jQuery","Zepto","dom","setRect","unsetRect","expando","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","child","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","animateAll","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","easing","animated","offsetWidth","plugins","initializeByDefault","PluginManager","mount","plugin","option","pluginName","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","CustomEvent","createEvent","initEvent","bubbles","cancelable","item","pullMode","lastPutMode","allEventProperties","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","revertClone","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","store","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_globalDragOver","dropEffect","_onMove","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_ghostIsLast","spacer","_getSwapDirection","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_generateId","sum","_saveInputCheckedState","inputs","checked","_nextTick","_cancelNextTick","contains","_getDirection","pointerType","originalTarget","shadowRoot","composedPath","button","isContentEditable","criteria","_prepareDragStart","dragStartFn","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","inserted","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","changed","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","dragIndex","nextElementSibling","after","moveVector","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","save","handleEvent","toArray","useAnimation","items","destroy","querySelectorAll","removeAttribute","is","nextTick","cancelNextTick","detectDirection","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","AutoScrollPlugin","AutoScroll","scroll","scrollSensitivity","scrollSpeed","bubbleScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","_ref2","dragOverBubble","clearPointerElemChangedInterval","clearAutoScrolls","nulling","autoScroll","ogElemScroller","newElem","lastSwapEl","isFallback","scrollCustomFn","sens","speed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","toSortable","onSpill","Revert","Remove","Swap","swapClass","dragStart","dragOverValid","swap","prevSwapEl","_ref3","swapNodes","swapItem","n1","n2","i1","i2","p1","p2","isEqualNode","startIndex","_ref4","parentSortable","lastMultiDragSelect","multiDragSortable","dragEl$1","clonesFromRect","clonesHidden","multiDragElements","multiDragClones","initialFolding","folding","MultiDrag","_deselectMultiDrag","_checkKeyDown","_checkKeyUp","selectedClass","multiDragKey","multiDragElement","multiDragKeyDown","isMultiDrag","delayStartGlobal","delayEnded","setupClone","sortableIndex","insertMultiDragClones","showClone","hideClone","_ref5","dragStartGlobal","_ref6","multiDrag","_ref7","removeMultiDragElements","dragOver","_ref8","_ref9","insertMultiDragElements","_ref10","dragRectAbsolute","clonesHiddenBefore","dragOverAnimationCapture","_ref11","dragMatrix","dragOverAnimationComplete","_ref12","originalEvt","shiftKey","currentIndex","multiDragIndex","nullingGlobal","destroyGlobal","select","deselect","oldIndicies","newIndicies","clones","clonesInserted","elementsInserted","BooleanCheckbox","vue__WEBPACK_IMPORTED_MODULE_0__","vue__WEBPACK_IMPORTED_MODULE_0___default","vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__","_boolean__WEBPACK_IMPORTED_MODULE_2__","survey_core__WEBPACK_IMPORTED_MODULE_3__","__extends","extendStatics","setPrototypeOf","__proto__","__decorate","decorators","Reflect","decorate","Instance","registerRenderer","BooleanSwitch","ButtonGroup","vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__","_question__WEBPACK_IMPORTED_MODULE_1__","getModel","question","ButtonGroupItem","vue__WEBPACK_IMPORTED_MODULE_1__","vue__WEBPACK_IMPORTED_MODULE_1___default","survey_core__WEBPACK_IMPORTED_MODULE_2__","_base__WEBPACK_IMPORTED_MODULE_3__","model","Checkbox","_question__WEBPACK_IMPORTED_MODULE_2__","getItemClass","CheckboxItem","_base__WEBPACK_IMPORTED_MODULE_2__","isAllSelected","getLabelClass","change","keyup","isInputTextUpdate","ActionBarItemDropdownViewModel","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__","ActionBarItemViewModel","ActionBarSeparatorViewModel","innerCss","ActionBarViewModel","_action_vue__WEBPACK_IMPORTED_MODULE_3__","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__","_action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__","_action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__","ActionViewModel","getComponentName","DefaultTitle","vue_class_component__WEBPACK_IMPORTED_MODULE_1__","vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__","isCollapsed","isExpanded","changeExpanded","toggleState","getIconCss","iconExpanded","mounted","stateChangedCallback","List","SurveyQuestionMatrixDetailButton","SurveyQuestionMatrixDynamicDragDropIcon","SurveyQuestionMatrixDynamicRemoveButton","PopupContainer","showModal","clickInside","onUpdated","prevIsVisible","isVisible","updateOnShowing","componentName","onApply","onCancel","popupModel","popupViewModel","initializePopupContainer","popup","propsData","onHide","$destroy","destroyPopupContainer","Popup","_popup_container_vue__WEBPACK_IMPORTED_MODULE_3__","_base__WEBPACK_IMPORTED_MODULE_4__","onMounted","$el","parentElement","popupContainer","destroyed","SvgIcon","onSizePropertyChanged","onWidthPropertyChanged","onHeightPropertyChanged","onIconNamePropertyChanged","svgIconElement","$refs","TitleActions","getTitleToolbar","Composite","contentPanel","Custom","contentQuestion","customWidget","getTemplate","CustomWidget","isDefaultRender","hasVueComponent","htmlTemplate","components","afterRender","updated","beforeDestroy","willUnmount","Dropdown","hasOther","isOtherSelected","SurveyElementVue","getType","isDefaultRendering","getRootClass","cssRoot","isReadOnly","cssClasses","getContentClass","cssContent","isPanel","survey","questionErrorLocation","ElementHeader","getTitleClass","cssTitle","getHeaderClass","cssHeader","clickTitleFunction","Empty","Errors","classes","additionalClasses","locationTop","locationBottom","Expression","onDragOver","returnValue","onDrop","onChange","doChange","srcElement","doClean","needConfirmRemoveFile","isConfirmed","confirmRemoveAllMessage","doRemoveFile","getConfirmRemoveMessage","removeFile","doDownloadFile","getPlaceholderClass","placeholderInput","allowCount","allowMultiple","loadFiles","FlowPanel","isCollapsedValue","rootNodeValue","beforeMount","onCustomHtmlProducing","onGetHtmlForQuestion","renderQuestion","setRootNode","produceHtml","doc","DOMParser","parseFromString","afterRenderPanel","registerFunctionOnPropertyValueChanged","renderWidth","title","expand","collapse","getTitleStyle","panel","titleExpandable","FlowPanelElement","FlowPanelElement_1","getStyle","fontWeight","fontStyle","textDecoration","elementIdValue","idValue","hasTextChildNodesOnly","getQuestionByName","getChildDomNodes","domNodes","SurveyHeader","doAfterRenderHeader","Html","QuestionImage","ImagePicker","Matrix","cellClick","column","isInputReadOnly","MatrixCell","showErrorOnTop","showErrorOnBottom","getHeaders","getCellStyle","isDisabled","isEnabled","isChecked","renderedValue","allowHover","itemClass","itemDisabled","itemChecked","itemHover","hasQuestion","onVisibilityChanged","cellQuestion","htmlElement","matrixAfterCellRender","MatrixDropdown","MatrixDynamic","addRowClick","addRowUI","MatrixTable","renderedTable","MultipleText","Navigation","showPrevBtn","showNextBtn","showCompleteBtn","onPropertyChanged","oldValue","onCreated","updateShowButtons","onCurrentPageChanged","sender","isFirstPage","isShowPrevButton","isLastPage","nextButtonMouseDown","mouseDownPage","currentPage","navigationMouseDown","buttonMouseDown","prevPage","nextPage","completeLastPage","showPreview","OtherChoice","isSurveyInputTextUpdate","Page","isCurrentPageChanged","onPagePropertyChanged","page","afterRenderPage","$nextTick","scrollToTopOnPageChange","_showTitle","_showDescription","Panel","cancelPreview","requiredText","PanelDynamic","isRenderModeList","panels","currentPanel","addPanelClick","addPanel","getButtonAddCss","btnClasses","buttonAdd","renderMode","PanelDynamicProgress","isProgressTopShowing","progressTop","progressBottom","panelCount","addPanelUI","prevPanelClick","goToPrevPanel","nextPanelClick","goToNextPanel","changeRange","getButtonPrevCss","buttonPrev","isPrevButtonShowing","getButtonNextCss","buttonNext","isNextButtonShowing","rangeMax","PanelDynamicRemove","unRegisterFunctionOnPropertyValueChanged","removePanelClick","removePanelUI","Progress","progressValue","ProgressButtons","hasScroller","updateScroller","progressButtonsModel","listContainerElement","isListElementClickable","getListElementCss","clickListElement","getScrollButtonCss","isLeftScroll","scrollCss","progressButtonsImageButtonLeft","progressButtonsImageButtonRight","progressButtonsImageButtonHidden","clickScrollButton","Radiogroup","visibleChoices","RadiogroupItem","getControlLabelClass","RankingItem","Ranking","Rating","Row","isNeedRender","rowContainerDiv","startLazyRendering","isLazyRendering","SurveyStringEditor","onInput","locString","innerText","onClick","editableRenderer","SurveyStringViewer","defaultRenderer","SurveyString","Survey","currentPageId","forceUpdate","$forceUpdate","surveyOnMounted","onPageVisibleChanged","doAfterRenderSurvey","renderCallback","startTimerFromUI","stopTimer","showTitle","showCompletedPage","getCompletedPageClasses","completedPage","getProcessedCompletedHtml","hasCompletedPage","processedCompletedHtmlValue","processedCompletedHtml","getCompletedStateClasses","saveData","completedState","doTrySaveAgain","doComplete","currentType","newType","applyTheme","QuestionText","inputWidth","TimerPanel","timerInfoText","TitleContent","Window","_surveyModel__WEBPACK_IMPORTED_MODULE_2__","surveyWindow","isexpanded","closeOnCompleteTimeout","isShowing","closeWindowOnCompleteCallback","doHide","getCss","buttonCollapsed","buttonExpanded","doExpand","createDecorator","mixins","reflectionIsSupported","defineMetadata","getOwnMetadataKeys","copyReflectionMetadata","forwardMetadata","getOwnPropertyNames","propertyKey","metaKeys","metaKey","getOwnMetadata","fakeArray","hasProto","Ctor","__decorators__","Ctors","isPrimitive","collectDataFromConstructor","vm","Component","originalInit","_init","$options","plainData","$internalHooks","componentFactory","_componentTag","proto","descriptor","superProto","getPrototypeOf","Super","Extended","forwardStaticMembers","reservedPropertyNames","shouldIgnore","callee","caller","Original","extendedDescriptor","superDescriptor","registerHooks","render","staticRenderFns","_vm","_h","$createElement","_c","_self","directives","rawName","checkedValue","expression","control","inputId","isRequired","locTitle","renderedHtml","errors","domProps","indeterminate","isIndeterminate","$event","$$a","$$el","$$c","$$v","$$i","$set","materialDecorator","itemDecorator","uncheckedPath","checkedPath","indeterminatePath","titleLocation","label","locDisplayLabel","_e","_withStripped","onLabelClick","locLabelFalse","switch","onSwitchClick","slider","locLabelTrue","_l","caption","hasErrors","describeBy","readOnly","_q","decorator","iconSize","showCaption","hasColumns","colIndex","getColumnClass","selectAllItem","itemControl","locText","hideLabel","controlLabel","otherItem","isReadOnlyRenderDiv","readonly","maxlength","getMaxLength","placeholder","renderedPlaceHolder","isActive","enabled","action","tabindex","disableTabStop","hasItems","actions","needSeparator","showIcon","contentId","_k","keyCode","mousedown","getItemIndent","selectItem","getDetailPanelButtonCss","getIsDetailPanelShowing","detailPanelId","showHideDetailPanelClick","getDetailPanelIconCss","iconDrag","buttonRemove","removeRowUI","locRemoveRowText","iconRemove","styleClass","keydown","onKeyDown","clickOutside","showPointer","pointerTarget","contentComponentName","_b","contentComponentData","isModal","cancelButtonText","applyButtonText","isPage","toolbar","hasHtml","customHtml","hasDefaultRender","getControlClass","otherText","displayValue","selectWrapper","autocomplete","autoComplete","$$selectedVal","selected","_value","multiple","showOptionsCaption","optionsCaption","hasTitleOnLeftTop","hasErrorsOnTop","hasComment","formGroup","commentText","commentClass","hasErrorsOnBottom","hasDescriptionUnderInput","descriptionUnderInput","locDescription","hasTitleOnBottom","hasTitle","ariaTitleId","titleTabIndex","titleAriaExpanded","getTitleComponentName","hasDescriptionUnderTitle","description","hasVisibleErrors","fileInput","inputTitle","accept","acceptedTypes","staticStyle","fileDecorator","dragover","wrapper","chooseFile","controlDisabled","for","chooseButtonCaption","noFileChosen","noFileChosenCaption","removeButton","cleanButtonCaption","previewValue","preview","fileSign","imageWidth","canPreviewImage","imageHeight","alt","removeFileCaption","removeFileSvg","fileSignBottom","removeButtonBottom","rootStyle","iconCss","innerPaddingLeft","rootNode","elNode","elementId","flexBasis","flexGrow","flexShrink","renderedHasHeader","isLogoBefore","logoClassNames","logoImage","objectFit","logoFit","locLogo","logoWidth","logoHeight","renderedHasTitle","headerText","titleMaxWidth","isLogoAfter","locHtml","contentMode","imageFit","imageLink","multiSelect","showLabel","itemText","tableWrapper","showHeader","hasRows","visibleColumns","columnIndex","headerCell","visibleRows","rowIndex","rowClasses","hasCellText","getCellDisplayLocText","itemValue","fullName","colSpans","isActionsCell","getData","handleClick","hasPanel","isChoice","isCheckbox","horizontalScroll","showAddRowOnTop","locAddRowText","iconAdd","showTable","emptyRowsSection","emptyRowsText","locEmptyRowsText","emptyRowsButton","showAddRowOnBottom","headerRow","cellIndex","showFooter","footerRow","getRows","rowindex","editor","itemTitle","isRequireTextBeforeTitle","isRequireTextOnStart","isRequireTextAfterTitle","cssNavigationPrev","pagePrevText","cssNavigationNext","pageNextText","isPreviewButtonVisible","cssNavigationPreview","previewText","isCompleteButtonVisible","cssNavigationComplete","completeText","getOthersMaxLength","otherPlaceHolder","hasTitleActions","showDescription","hasEditButton","cssNavigationEdit","editText","renderedPanels","getPanelWrapperCss","separator","isProgressBottomShowing","canAddPanel","panelAddText","cssClass","progressContainer","panelPrevText","isRangeShowing","progress","progressBar","panelNextText","progressText","canRemovePanel","getPanelRemoveButtonCss","panelRemoveText","progressTextInBar","progressTextUnderBar","progressButtonsContainerCenter","progressButtonsContainer","progressButtonsListContainer","progressButtonsList","visiblePages","progressButtonsPageTitle","locNavigationTitle","progressButtonsPageDescription","locNavigationDescription","canShowClearButton","clearButton","clearButtonCaption","clearValue","handleKeydown","itemGhostNode","itemContent","itemIconContainer","itemIcon","itemIconHoverMod","itemIconFocusMod","itemIndex","rootClass","rankingChoices","getNumberByIndex","visibleRateValues","setValueFromClick","minText","locMinRateDescription","maxText","locMaxRateDescription","elements","ariaRole","needShowPlaceholder","placeHolderText","_m","controls","position","contenteditable","blur","renderAs","onsubmit","hasLogo","isNavigationButtonsShowingOnTop","cssNavigationStart","startSurveyText","startedPage","isNavigationButtonsShowingOnBottom","isShowProgressBarOnTop","progressBarType","isTimerPanelShowingOnTop","navId","pageId","isTimerPanelShowingOnBottom","isShowProgressBarOnBottom","completedStateText","saveAgainButton","getLocString","processedCompletedBeforeHtml","processedLoadingHtml","bodyEmpty","emptySurveyText","inputStyle","renderedMin","renderedMax","renderedStep","inputSize","dataListId","dataList","no","cursor","windowSurvey","expandedCss","isExpandedSurvey","float","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","_scopeId","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","_injectStyles","originalRender","existing","beforeCreate","Emit","__spreadArrays","il","jl","hyphenateRE","hyphenate","_target","original","emit","emitName","$emit","isPromise","Inject","vue_class_component__WEBPACK_IMPORTED_MODULE_0__","componentOptions","inject","InjectReactive","_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__","fromKey_1","defaultVal_1","Model","_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__","ModelSync","propName","Prop","PropSync","Provide","provide","managed","ProvideReactive","managedReactive","refKey","VModel","valueKey","Watch","_a","deep","immediate","handler","watch","applyMetadata","reflectMetadataIsSupported","getMetadata","needToProduceProvide","produceProvide","rv","reactiveInjectKey","_loop_1","this_1","inheritInjected","_decorators_Emit__WEBPACK_IMPORTED_MODULE_2__","_decorators_Inject__WEBPACK_IMPORTED_MODULE_3__","_decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__","_decorators_Model__WEBPACK_IMPORTED_MODULE_5__","_decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__","_decorators_Prop__WEBPACK_IMPORTED_MODULE_7__","_decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__","_decorators_Provide__WEBPACK_IMPORTED_MODULE_9__","_decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__","_decorators_Ref__WEBPACK_IMPORTED_MODULE_11__","_decorators_VModel__WEBPACK_IMPORTED_MODULE_12__","_decorators_Watch__WEBPACK_IMPORTED_MODULE_13__","Action","_base__WEBPACK_IMPORTED_MODULE_0__","_jsonobject__WEBPACK_IMPORTED_MODULE_1__","defaultValue","AdaptiveActionContainer","_list__WEBPACK_IMPORTED_MODULE_0__","_popup__WEBPACK_IMPORTED_MODULE_1__","_action__WEBPACK_IMPORTED_MODULE_2__","_container__WEBPACK_IMPORTED_MODULE_3__","invisibleItemsListModel","invisibleItemSelected","dotsItemPopupModel","toggleVisibility","dotsItem","setItems","sortByVisibleIndex","sortItems","visibleIndex","firstItem","secondItem","showFirstN","visibleItemsCount","leftItemsToShow","invisibleItems","addDotsButton","removeDotsButton","ActionContainer","_jsonobject__WEBPACK_IMPORTED_MODULE_0__","_base__WEBPACK_IMPORTED_MODULE_1__","Bindings","Base","ArrayChanges","Event","EventBase","_localizablestring__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_1__","_jsonobject__WEBPACK_IMPORTED_MODULE_2__","_settings__WEBPACK_IMPORTED_MODULE_3__","__spreadArray","values","getNames","fillProperties","getProperties","setBinding","propertyName","valueName","clearBinding","getValueNameByPropertyName","getPropertiesByValueName","getJson","setJson","objProperties","getPropertiesByObj","isBindable","propertyHash","eventList","isLoadingFromJsonValue","loadingOwner","addEvent","onItemValuePropertyChanged","isCreating","bindingsValue","createProperties","onBaseCreating","commentPrefix","isValueEmpty","trimString","trimValue","IsPropertyEmpty","dispose","isDisposedValue","getSurvey","isLive","checkBindings","updateBindings","bindings","updateBindingValue","getIsLoadingFromJson","isLoadingFromJson","startLoadingFromJson","endLoadingFromJson","toJSON","toJsonObject","fromJSON","json","toObject","clonedObj","createClass","getPropertyByName","findProperty","isPropertyVisible","createProgressInfo","questionCount","answeredQuestionCount","requiredQuestionCount","requiredAnsweredQuestionCount","getProgressInfo","localeChanged","locStrsChanged","arraysInfo","isItemValues","itemValueLocStrChanged","localizableStrings","getLocalizableString","strChanged","getPropertyValueCore","isCustom","onGetValue","propertiesHash","getPropertyValueCoreHandler","geValueFromHash","setPropertyValueCore","setPropertyValueCoreHandler","isEditingSurveyElement","iteratePropertiesHash","setPropertyValue","isTwoValueEquals","arrayInfo","setArray","onPush","propertyValueChanged","clearPropertyValue","onPropertyValueChangedCallback","newValue","arrayChanges","itemValuePropertyChanged","fire","ownerPropertyName","onPropertyValueChanged","doPropertyValueChangedCallback","onPropChangeFunctions","isInternal","notifier","registerFunctionOnPropertiesValueChanged","unRegisterFunctionOnPropertiesValueChanged","createCustomLocalizableObj","locStr","getLocale","createLocalizableString","owner","useMarkDown","onStrChanged","getLocalizableStringText","defaultStr","setLocalizableStringText","addUsedLocales","locales","AddLocStringToUsedLocales","searchText","founded","getSearchableLocalizedStrings","setFindText","keys_1","getSearchableLocKeys","getSearchableItemValueKeys","locs","getLocales","createItemValues","createNewArray","locOwner","notifyArrayChanged","ar","onArrayChanged","createNewArrayCore","createArrayCoreHandler","ensureArray","onRemove","newArray","deleteCount","getItemValueType","deletedItems","createItemValue","caseInSensitive","getValueInLowCase","copyObject","copyCssClasses","itemsToAdd","callbacks","hasFunc","fireCallbackChanged","onCallbacksChanged","CalculatedValue","_helpers__WEBPACK_IMPORTED_MODULE_0__","_conditions__WEBPACK_IMPORTED_MODULE_2__","_jsonobject__WEBPACK_IMPORTED_MODULE_3__","expressionIsRunning","isCalculated","setOwner","rerunExpression","live","locCalculation","unlocCalculation","resetCalculation","doCalculation","calculatedValues","runExpressionCore","runExpression","getVariable","setValue","setVariable","canRunExpression","getFilteredValues","getFilteredProperties","ensureExpression","runDependentExpressions","expressionRunner","variables","getVariables","calcItem","onRunComplete","addClass","isUnique","ChoicesRestful","ChoicesRestfull","_itemvalue__WEBPACK_IMPORTED_MODULE_1__","_error__WEBPACK_IMPORTED_MODULE_3__","_settings__WEBPACK_IMPORTED_MODULE_4__","XmlParser","parser","assignValue","xml2Json","xmlNode","childNode","childObject","parseXmlString","xmlString","xmlRoot","lastObjHash","isRunningValue","processedUrl","processedPath","isUsingCacheFromUrl","webserviceEncodeParameters","clearCache","itemsResult","sendingSameRequests","addSameRequest","isUsingCache","objHash","unregisterSameRequests","getResultCallback","getCachedItemsResult","textProcessor","processedText","doEmptyResultCallback","useChangedItemsResults","sendRequest","useCachingForChoicesRestful","getIsRunning","serverResult","updateResultCallback","urlText","cacheText","noCacheText","pUrl","processTextEx","pPath","hasAllValuesOnLastRun","onProcessedUrlCallback","parseResponse","parsedResponse","xhr","XMLHttpRequest","setRequestHeader","loadingObjHash","beforeLoadRequest","onLoad","onError","statusText","responseText","onBeforeSendRequest","beforeSendRequest","send","titleName","imageLinkName","getCustomPropertiesNames","getCustomProperties","getCustomPropertyName","itemValueType","allowEmptyResponse","attachOriginalItems","beforeSendRequestCallback","updatedResult","getResultAfterPath","getItemValueCallback","getValue","setTitle","setCustomProperties","originalItem","getImageLink","callResultCallback","getValueCore","getPropertyBinding","pathes","getPathes","EncodeParameters","visibleIf","ProcessValue","getFirstName","getFirstPropertyName","ch","hasValue","nonNestedObj","getNonNestedObject","getValueInfo","valueInfo","getValueFromPath","ind_name","isNumber","curValue","getObjectValue","createPath","curName","objInArray","getObjInArray","getIntValue","createProp","nameInLow","keyName","ind","ExpressionRunnerBase","ConditionRunner","ExpressionRunner","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__","_conditionsParser__WEBPACK_IMPORTED_MODULE_1__","processValue","isAsyncValue","hasFunctionValue","expressionValue","operand","parseExpression","canRun","hasFunction","hasAsyncFunction","setVariables","runCore","isAsync","runValues","asyncFuncList","addToAsyncList","onAsyncReady","doAsyncFunctionReady","evaluateAsync","isReady","evaluate","doOnComplete","ConditionsParserError","ConditionsParser","_expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__","at","patchExpression","createCondition","parserCache","conditionError","defaultBootstrapCss","_cssstandard__WEBPACK_IMPORTED_MODULE_0__","logo","navigationButton","navigation","edit","progressButtonsListElementPassed","progressButtonsListElementCurrent","progressButtonsListElementNonClickable","pageTitle","pageDescription","mainRoot","flowRoot","headerLeft","contentLeft","titleLeftRoot","titleRequired","hasError","titleOnError","boolean","itemIndeterminate","sliderText","disabledLabel","checkbox","itemSelectAll","itemNone","itemInline","labelChecked","ranking","rootMobileMod","rootDragMod","itemGhostMod","itemDragMod","dropdown","cellTextSelected","cellLabel","matrixdropdown","detailRow","detailRowText","detailCell","detailButton","detailButtonExpanded","detailIcon","detailIconExpanded","detailPanelCell","actionsCell","matrixdynamic","paneldynamic","buttonRemoveRight","panelWrapper","panelWrapperInRow","multipletext","radiogroup","buttongroup","itemCaption","itemSelected","imagepicker","rating","signaturepad","saving","success","defaultBootstrapMaterialCss","modernCss","asCell","headerTop","headerBottom","titleOnAnswer","rowError","cellTextDisabled","choiceCell","surveyCss","defaultStandardCss","DragDropHelper","surveyValue","onBeforeDrop","onAfterDrop","draggedSurveyElement","dropTargetSurveyElement","draggedElementShortcut","scrollIntervalId","ghostSurveyElement","isBottom","isEdge","pageOrPanel","itemValueParentQuestion","moveDraggedElement","moveShortcutElement","isItemValueBeingDragged","handleItemValueDragOver","handleSurveyElementDragOver","handleEscapeButton","banDropHere","banDropSurveyElement","removeGhostElementFromSurvey","doDropItemValue","doDropSurveyElement","isTop","choices","draggedElement","prevEvent","isDescendantOf","startDragToolboxItem","draggedElementJson","createElementFromJson","startDragSurveyElement","startDrag","startDragItemValue","createGhostSurveyElement","createDraggedElementShortcut","getItemValueGhostPosition","startWithNewLine","ghostSurveyElementName","doScroll","shortcutHeight","offsetHeight","shortcutWidth","shortcutXCenter","shortcutYCenter","documentClientHeight","documentClientWidth","pageX","pageY","startScrollBoundary","scrollableParentElement","querySelector","dragInfo","getDragInfo","restrictDragQuestionBetweenPages","insertGhostElementIntoSurvey","dropTargetHTMLElement","findDropTargetHTMLElementFromPoint","getDropTargetSurveyElementFromHTMLElement","panelDragInfo","getPanelDragInfo","calculateIsBottom","HTMLElement","surveyElement","calculateIsEdge","findDeepestDropTargetChild","getDropTargetSurveyElementName","dropTargetSurveyElementName","dataset","svcDropTargetElementName","svcDropTargetItemValue","element_1","dropTargetName","isDragOverInnerPanel","nearestDropTargetElement","dropTargetDataAttributeName","newGhostPage","getPageByName","pages","getElementByName","template","choice","calculateMiddleOfHTMLElement","middle","edgeHeight","findDropTargetHTMLElement","draggedOverNode","dragDropStart","nestedPanelDepth","dragDropMoveTo","insertRealElementIntoSurvey","fakeTargetElement","createFakeTargetElement","newElement","dragDropFinish","createNewElement","elementName","targetElement","dxSurveyService","_settings__WEBPACK_IMPORTED_MODULE_0__","surveyServiceUrl","loadSurvey","surveyId","serviceUrl","getSurveyJsonAndIsCompleted","clientId","surveyJson","isCompleted","sendResult","postId","onSendResult","isPartialCompleted","surveyResult","dataStringify","onerror","sendFile","onSendFile","formData","FormData","getResult","resultId","onGetResult","QuestionResult","onIsCompleted","Version","_settings__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_2__","_validator__WEBPACK_IMPORTED_MODULE_3__","_itemvalue__WEBPACK_IMPORTED_MODULE_4__","_base__WEBPACK_IMPORTED_MODULE_5__","_survey_error__WEBPACK_IMPORTED_MODULE_6__","_survey_element__WEBPACK_IMPORTED_MODULE_7__","_calculatedValue__WEBPACK_IMPORTED_MODULE_8__","_error__WEBPACK_IMPORTED_MODULE_9__","_localizablestring__WEBPACK_IMPORTED_MODULE_10__","_expressionItems__WEBPACK_IMPORTED_MODULE_11__","_choicesRestful__WEBPACK_IMPORTED_MODULE_12__","_functionsfactory__WEBPACK_IMPORTED_MODULE_13__","_conditions__WEBPACK_IMPORTED_MODULE_14__","_expressions_expressions__WEBPACK_IMPORTED_MODULE_15__","_conditionsParser__WEBPACK_IMPORTED_MODULE_16__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__","_jsonobject__WEBPACK_IMPORTED_MODULE_18__","_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__","_question_matrixdropdown__WEBPACK_IMPORTED_MODULE_20__","_question_matrixdynamic__WEBPACK_IMPORTED_MODULE_21__","_question_matrix__WEBPACK_IMPORTED_MODULE_22__","_question_multipletext__WEBPACK_IMPORTED_MODULE_23__","_panel__WEBPACK_IMPORTED_MODULE_24__","_flowpanel__WEBPACK_IMPORTED_MODULE_25__","_page__WEBPACK_IMPORTED_MODULE_26__","_question__WEBPACK_IMPORTED_MODULE_28__","_questionnonvalue__WEBPACK_IMPORTED_MODULE_29__","_question_empty__WEBPACK_IMPORTED_MODULE_30__","_question_baseselect__WEBPACK_IMPORTED_MODULE_31__","_question_checkbox__WEBPACK_IMPORTED_MODULE_32__","_question_ranking__WEBPACK_IMPORTED_MODULE_33__","_question_comment__WEBPACK_IMPORTED_MODULE_34__","_question_dropdown__WEBPACK_IMPORTED_MODULE_35__","_questionfactory__WEBPACK_IMPORTED_MODULE_36__","_question_file__WEBPACK_IMPORTED_MODULE_37__","_question_html__WEBPACK_IMPORTED_MODULE_38__","_question_radiogroup__WEBPACK_IMPORTED_MODULE_39__","_question_rating__WEBPACK_IMPORTED_MODULE_40__","_question_expression__WEBPACK_IMPORTED_MODULE_41__","_question_text__WEBPACK_IMPORTED_MODULE_42__","_question_boolean__WEBPACK_IMPORTED_MODULE_43__","_question_imagepicker__WEBPACK_IMPORTED_MODULE_44__","_question_image__WEBPACK_IMPORTED_MODULE_45__","_question_signaturepad__WEBPACK_IMPORTED_MODULE_46__","_question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__","_surveytimer__WEBPACK_IMPORTED_MODULE_48__","_surveyProgressButtons__WEBPACK_IMPORTED_MODULE_49__","_survey__WEBPACK_IMPORTED_MODULE_50__","_trigger__WEBPACK_IMPORTED_MODULE_51__","_surveyWindow__WEBPACK_IMPORTED_MODULE_52__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_53__","_dxSurveyService__WEBPACK_IMPORTED_MODULE_54__","_localization_english__WEBPACK_IMPORTED_MODULE_55__","_surveyStrings__WEBPACK_IMPORTED_MODULE_56__","_questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__","_question_custom__WEBPACK_IMPORTED_MODULE_58__","_stylesmanager__WEBPACK_IMPORTED_MODULE_59__","_list__WEBPACK_IMPORTED_MODULE_60__","_popup__WEBPACK_IMPORTED_MODULE_61__","_question_buttongroup__WEBPACK_IMPORTED_MODULE_62__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_63__","_utils_utils__WEBPACK_IMPORTED_MODULE_64__","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_65__","_dragdrophelper__WEBPACK_IMPORTED_MODULE_66__","_chunks_model__WEBPACK_IMPORTED_MODULE_0__","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__","_defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__","_defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__","_defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__","_rendererFactory__WEBPACK_IMPORTED_MODULE_6__","_utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__","_utils_utils__WEBPACK_IMPORTED_MODULE_8__","_actions_action__WEBPACK_IMPORTED_MODULE_9__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_10__","_actions_container__WEBPACK_IMPORTED_MODULE_11__","_vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__","_vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__","_vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__","_vue_string_vue__WEBPACK_IMPORTED_MODULE_3__","_vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__","_vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__","_vue_element_vue__WEBPACK_IMPORTED_MODULE_6__","_vue_window_vue__WEBPACK_IMPORTED_MODULE_7__","_vue_page_vue__WEBPACK_IMPORTED_MODULE_8__","_vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__","_vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__","_vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__","_vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__","_vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__","_vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__","_vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__","_vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__","_vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__","_vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__","_vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__","_vue_text_vue__WEBPACK_IMPORTED_MODULE_20__","_vue_boolean__WEBPACK_IMPORTED_MODULE_21__","_vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__","_vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__","_vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__","_vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__","_vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__","_vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__","_vue_file_vue__WEBPACK_IMPORTED_MODULE_28__","_vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__","_vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__","_vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__","_vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__","_vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__","_vue_html_vue__WEBPACK_IMPORTED_MODULE_34__","_vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__","_vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__","_vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__","_vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__","_vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__","_vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__","_vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__","_vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__","_vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__","_vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__","_vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__","_vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__","_vue_row_vue__WEBPACK_IMPORTED_MODULE_47__","_vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__","_vue_image_vue__WEBPACK_IMPORTED_MODULE_49__","_vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__","_vue_header_vue__WEBPACK_IMPORTED_MODULE_51__","_vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__","_vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__","_vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_54__","_vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_55__","_vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_56__","_vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_57__","_vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_58__","_vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_59__","_vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_60__","_vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_61__","_vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_62__","_vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_63__","_core__WEBPACK_IMPORTED_MODULE_0__","_vue_ui__WEBPACK_IMPORTED_MODULE_1__","AnswerRequiredError","OneAnswerRequiredError","RequreNumericError","ExceedSizeError","WebRequestError","WebRequestEmptyError","OtherEmptyError","UploadingFileError","RequiredInAllRowsError","MinRowCountError","KeyDuplicationError","CustomError","_surveyStrings__WEBPACK_IMPORTED_MODULE_0__","_survey_error__WEBPACK_IMPORTED_MODULE_1__","errorOwner","getErrorType","getDefaultText","getString","maxSize","getText","getTextSize","minRowCount","ExpressionItem","HtmlConditionItem","UrlConditionItem","runCondition","getMarkdownHtml","getRenderer","getProcessedText","serializationProperty","SyntaxError","_expressions__WEBPACK_IMPORTED_MODULE_0__","expected","found","captureStackTrace","buildMessage","literalEscape","classEscape","describeExpectation","expectation","escapedParts","part","inverted","describeExpected","expected1","descriptions","describeFound","found1","peg$parse","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parseExpression","peg$startRuleFunction","peg$c0","buildBinaryOperand","peg$c1","peg$c2","peg$literalExpectation","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$c66","peg$c67","peg$c68","peg$c69","peg$c70","peg$c71","peg$c72","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","expr","peg$c85","peg$c86","peg$c87","peg$c88","peg$c89","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","peg$c95","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","peg$c110","peg$c111","peg$c112","peg$c113","peg$c114","peg$c115","peg$c116","peg$c117","peg$c118","peg$c119","peg$c120","peg$c121","peg$c122","peg$c123","peg$c124","sequence","peg$c125","peg$c126","peg$c127","flatten","flattenArray","peg$c128","peg$c129","peg$c130","peg$c131","peg$c132","peg$c133","peg$c134","peg$c135","peg$c136","peg$c137","peg$c138","peg$classExpectation","peg$c139","peg$c140","peg$c141","peg$c142","peg$c143","peg$c144","peg$c145","peg$c146","peg$c147","chars","peg$c148","peg$c149","peg$c150","peg$c151","peg$c152","peg$c153","peg$c154","peg$c155","peg$c156","peg$c157","peg$c158","peg$c159","peg$c160","peg$c161","peg$c162","peg$c163","peg$c164","peg$c165","peg$otherExpectation","peg$c166","peg$c167","peg$currPos","peg$savedPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$resultsCache","startRule","text1","ignoreCase","peg$endExpectation","peg$computePosDetails","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$buildStructuredError","location1","s0","s4","s5","s6","s7","s8","cached","nextPos","peg$parse_","peg$parseLogicOr","peg$parseOrSign","peg$parseLogicAnd","peg$parseAndSign","peg$parseCompOps","peg$parseComparableOperators","peg$parsePlusMinusOps","peg$parsePlusMinusSigns","peg$parseMulDivOps","peg$parseMulDivSigns","peg$parseBinaryFuncOp","peg$parsePowerSigns","peg$parseFactor","peg$parseBinFunctions","peg$parseFunctionOp","peg$parseUnaryFunctionOp","peg$parseAtom","peg$parseArrayOp","peg$parseLettersAndDigits","peg$parseSequence","peg$parseUnFunctions","peg$parseConstValue","peg$parseValueInput","peg$parseLogicValue","peg$parseArithmeticValue","peg$parseAnyInput","peg$parseDigits","peg$parseNumber","peg$parseNonZeroDigits","peg$parseValueCharacters","peg$parseAnyCharacters","peg$parseLetters","isArithmeticOp","reduce","Operand","BinaryOperand","UnaryOperand","ArrayOperand","Const","Variable","FunctionOperand","OperandMaker","_functionsfactory__WEBPACK_IMPORTED_MODULE_1__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__","operatorName","isArithmeticValue","consumer","binaryFunctions","throwInvalidOperatorError","isConjunction","evaluateParam","safeToString","operatorToString","unaryFunctions","getCorrectValue","isBooleanValue","isQuote","isNumeric","variableName","useValueAsItIs","DisableConversionChar","originalValue","parameters","isReadyValue","asyncProcessValue","createCopy","returnResult","asynResult","evaluateCore","isAsyncFunction","toOperandString","isSpaceString","opStr","signs","notempty","negate","arithmeticOp","and","or","plus","minus","div","mod","power","greater","less","greaterorequal","equal","lessorequal","notequal","containsCore","notcontains","anyof","allof","isContains","rightArray","rIndex","FlowPanelModel","_panel__WEBPACK_IMPORTED_MODULE_1__","onContentChanged","getChildrenLayoutType","onSurveyLoad","contentChangedCallback","regEx","getQuestionFromText","getHtmlForQuestion","contentElementNamePrefix","getQuestionHtmlId","onAddElement","addElementToContent","onRemoveElement","searchStr","getElementContentText","dragDropMoveElement","targetIndex","insertTextAtCursor","prevName","isDesignMode","sel","getRangeAt","rangeCount","deleteContents","insertNode","createTextNode","FunctionFactory","registerFunction","functionHash","isAsyncHash","register","unregister","getAll","classRunner","getParamsAsArray","min_max","isMin","avg","getInArrayParams","calcInArray","sumInArray","minInArray","maxInArray","countInArray","avgInArray","iif","age","birthDate","today","isContainerReady","getPanelByName","questions","isDisplayMode","currentDate","diffDays","date1","date2","diffTime","Helpers","isArrayContainsEqual","isArraysEqual","ignoreOrder","xSorted","ySorted","isConvertibleToNumber","toLocaleLowerCase","isDiposed","randomizeArray","random","temp","getUnbindValue","maxLength","surveyLength","startIndexStr","postfix","strIndex","hasDigit","isCharDigit","checkLetter","isCharNotLetterAndDigit","newPostfix","ItemValue","_conditions__WEBPACK_IMPORTED_MODULE_3__","_settings__WEBPACK_IMPORTED_MODULE_5__","isVisibleValue","locTextValue","onGetTextCallback","onCreating","itemValueSeparator","createArray","setupArray","getItemByValue","valIsEmpty","getTextOrHtmlByValue","textOrHtml","runConditionsForItems","filteredItems","runner","useItemExpression","runConditionsForItemsCore","runEnabledConditionsForItems","onItemCallBack","choiceValue","hasChanded","itemRunner","getConditionRunner","setIsVisible","setIsEnabled","setLocText","pureText","calculatedText","newText","jsoObj","valueToJson","hasText","onChanged","funcName","getVisibleConditionRunner","getEnableConditionRunner","visibleConditionRunner","enableIf","enableConditionRunner","metaData","getItemValuesDefaultValue","showMode","propertyArray","JsonObjectProperty","CustomPropertiesCollection","JsonMetadataClass","JsonMetadata","JsonError","JsonUnknownPropertyError","JsonMissingTypeErrorBase","JsonMissingTypeError","JsonIncorrectTypeError","JsonRequiredPropertyError","JsonObject","Serializer","ensureLocString","localizable","defaultSource","onSet","classInfo","typeValue","choicesValue","baseValue","isRequiredValue","isUniqueValue","readOnlyValue","visibleValue","isLocalizableValue","choicesfunc","dependedProperties","isSerializable","isLightSerializable","isDynamicChoices","alternativeName","classNamePart","baseClassName","defaultValueValue","category","categoryIndex","nextToProperty","layout","onSetValue","classInfoValue","isDefaultValue","isLocalizable","jsonConv","getObjType","objType","getClassName","getChoices","choicesCallback","setChoices","valueFunc","getBaseValue","setBaseValue","isLayout","dataListValue","mergeWith","valuesNames","mergableValues","mergeValue","addDependedProperty","getDependedProperties","schemaType","addProperty","removeProperty","parentClassName","parentClasses","createPropertiesCore","createPropertiesInObj","parentClass","createPropertyInObj","locDesc","isArrayProp","parentName","createProperty","propInfo","propertyType","typeIndex","typeSymbol","getIsPropertyNameRequired","getPropertyName","maxValue","minValue","onPropertyEditorUpdate","choicesFunc","dependsOn","addDependsOnProperties","addDependsOnProperty","requiredSymbol","alternativeNames","childrenClasses","classProperties","classHashProperties","getObjPropertyValue","isObjWrapper","orignalObj","getOriginalObj","getObjPropertyValueCore","setObjPropertyValue","metaDataClass","removeClass","metaClass","findClass","overrideClassCreatore","overrideClassCreator","fillPropertiesForClass","getHashProperties","hashProperties","dynamicProps","getDynamicType","dProp","getDynamicPropertiesByObj","dynamicType","dType","hasOriginalProperty","getOriginalProperty","findProperties","propertyNames","getAllPropertiesByName","getAllClasses","createCustomType","customTypeName","customTemplateName","getChildrenClasses","canBeCreated","fillChildrenClasses","getRequiredProperties","addProperties","propertiesInfos","addCustomPropertyCore","propertyInfo","addPropertyToClass","emptyClassPropertiesHash","removePropertyFromClass","childClasses","newName","ancestorClassName","class_","addAlterNativeClassName","generateSchema","$schema","definitions","generateSchemaProperties","schemaProperties","schemaDef","generateSchemaProperty","hasChoices","enum","$ref","generateChemaClass","usedClasses","hasParent","$id","allOff","addPropertyCore","getFullDescription","types","lightSerializing","metaDataValue","storeDefaults","toJsonObjectCore","jsonObj","toObjectCore","getRequiredError","addNewError","needAddErrors","addDynamicProperties","typePropertyName","positionPropertyName","valueToObj","propertiesToJson","getDynamicProperties","getDynamicPropertyName","dynamicPropName","dynamicProperties","isValueArray","arrValue","removePos","hasToUseSetValue","valueToArray","createNewObj","removePosFromObj","checkNewObjectOnErrors","jsonValue","requiredProperties","valueRes","addValuesIntoArray","ListModel","onItemSelect","allowSelection","selectedItem","isItemDisabled","isItemSelected","INDENT","LocalizableString","LocalizableStrings","_surveyStrings__WEBPACK_IMPORTED_MODULE_1__","_settings__WEBPACK_IMPORTED_MODULE_2__","useMarkdown","htmlValues","defaultLocaleName","searchableText","renderedText","calculatedTextValue","calText","setLocaleText","defaultLocale","hasHtmlValue","getHtmlValue","getValuesKeys","getLocaleText","curLoc","hasOnStrChanged","deleteValuesEqualsToDefault","deleteValue","hasNonDefaultText","sharedData","serializeLocalizableStringAsObject","searchIndex","onSearchChanged","SerializeAsObject","useDefault","defLoc","arabicSurveyStrings","otherItemText","noneItemText","selectAllItemText","panelDynamicProgressText","questionsProgressText","emptySurvey","completingSurvey","completingSurveyBefore","loadingSurvey","requiredError","requiredErrorInPanel","requiredInAllRowsError","numericError","textMinLength","textMaxLength","textMinMaxLength","minRowCountError","minSelectError","maxSelectError","numericMinMax","numericMin","numericMax","invalidEmail","invalidExpression","urlRequestError","urlGetChoicesError","exceedMaxSize","otherRequiredError","uploadingFile","loadingFile","confirmDelete","keyDuplicationError","addColumn","addRow","removeRow","removePanel","choices_Item","matrix_column","matrix_row","savingData","savingDataError","savingDataSuccess","timerMin","timerSec","timerSpentAll","timerSpentPage","timerSpentSurvey","timerLimitAll","timerLimitPage","timerLimitSurvey","cleanCaption","clearCaption","chooseFileCaption","booleanCheckedLabel","booleanUncheckedLabel","confirmRemoveFile","confirmRemoveAllFiles","questionTitlePatternText","localeNames","basqueSurveyStrings","minError","maxError","multipletext_itemname","signaturePlaceHolder","modalCancelButtonText","modalApplyButtonText","bulgarianStrings","catalanSurveyStrings","choices_firstItem","choices_secondItem","choices_thirdItem","croatianStrings","czechSurveyStrings","danishSurveyStrings","dutchSurveyStrings","englishStrings","estonianSurveyStrings","finnishSurveyStrings","frenchSurveyStrings","georgianSurveyStrings","otherRequiredEror","germanSurveyStrings","greekSurveyStrings","hebrewSurveyStrings","hindiStrings","noneItemTex","hungarianSurveyStrings","icelandicSurveyStrings","indonesianStrings","italianSurveyStrings","japaneseSurveyStrings","kazakhStrings","koreanStrings","latvianSurveyStrings","lithuaniaSurveyStrings","macedonianSurveyStrings","norwegianSurveyStrings","persianSurveyStrings","polishSurveyStrings","portugueseBrSurveyStrings","portugueseSurveyStrings","romanianSurveyStrings","russianSurveyStrings","serbianStrings","simplifiedChineseSurveyStrings","spanishSurveyStrings","swahiliStrings","swedishSurveyStrings","tajikSurveyStrings","thaiStrings","traditionalChineseSurveyStrings","turkishSurveyStrings","ukrainianSurveyStrings","vietnameseSurveyStrings","welshSurveyStrings","QuestionMatrixBaseModel","_itemvalue__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_4__","generatedVisibleRows","generatedTotalRow","filteredRows","filteredColumns","createColumnValues","newRows","processRowsOnSet","filterItems","getVisibleRows","runItemsCondition","areInvisibleElementsShowing","onRowsChanged","getDataFilteredValues","getDataFilteredProperties","onColumnsChanged","fireCallback","visibleRowsChangedCallback","shouldRunColumnExpression","hasRowsAsItems","oldVisibleRows","hasChanges","runConditionsForRows","hasColumnsChanged","runConditionsForColumns","isClearValueOnHidden","clearIncorrectValues","restoreNewVisibleRowsValues","clearGeneratedRows","showInvisibile","rowsVisibleIf","hasChanged","useColumnsExpression","columnsVisibleIf","newVal","isChanged","clearInvisibleValuesInRows","newData","PageModel","_panel__WEBPACK_IMPORTED_MODULE_2__","hasShownValue","isRandomizing","timeSpent","delete","removeSelfFromList","onFirstRendering","wasShown","canRenderFirstRows","isPageStarted","calcCssClasses","updatePageCssClasses","getIsPageVisible","exceptionQuestion","isStarted","onNumChanged","setWasShown","areQuestionsRandomized","randomizeElements","oldElements","newElements","questionsOrder","scrollToTop","scrollElementToTop","getPanels","visibleOnly","includingDesignTime","addPanelsIntoList","onVisibleChanged","pageVisibilityChanged","dragDropInfo","correctDragDropInfo","dragDropCanDropTagert","dragDropCanDropSource","dragDropAllowFromSurvey","dragDropFindRow","updateRowsRemoveElementFromRow","dragDropAddTarget","isLayoutTypeSupported","insertAfter","dragAndDropAllow","isCancel","dragDropGetElementIndex","isSamePanel","removeElement","addElement","prevRow","prevElement","dragDropCanDropCore","dragDropCanDropNotNext","dragDropIsSameElement","pnl","containsElement","srcIndex","destIndex","el1","el2","ensureRowsVisibility","DragDropInfo","QuestionRowModel","PanelModelBase","PanelModel","_survey_element__WEBPACK_IMPORTED_MODULE_3__","_question__WEBPACK_IMPORTED_MODULE_4__","_conditions__WEBPACK_IMPORTED_MODULE_5__","_questionfactory__WEBPACK_IMPORTED_MODULE_6__","_error__WEBPACK_IMPORTED_MODULE_7__","_settings__WEBPACK_IMPORTED_MODULE_8__","_utils_utils__WEBPACK_IMPORTED_MODULE_9__","_scrollableParent","_updateVisibility","getRowId","rowCounter","findScrollableContainer","isRowContainerDivVisible","stopLazyRendering","ensureVisibility","setIsLazyRendering","isLazyRenderingValue","updateVisible","calcVisible","setWidth","visCount","visibleElements","preSetWidthElements","setElementMaxMinWidth","getElementWidth","getRenderedWidthFromWidth","rightIndent","getRenderedCalcWidth","calcWidthEl","visElements","needToUpdateVisibleElements","isQuestionsReady","questionsValue","elementsValue","getPanelId","updateElementCss","updateVisibleIndexes","panelCounter","setSurveyImpl","markQuestionListDirty","showPageTitles","allowShowEmptyTitleInDesignMode","allowShowEmptyDescriptionInDesignMode","questionTitlePattern","titlePattern","getSurveyMarkdownHtml","getRendererForString","processText","cssClassesValue","updatePanelCssClasses","getPanel","getLayoutType","layoutType","qs","getValidName","getQuestionByValueName","getValueName","getComment","getDisplayValue","keysAsText","getComments","clearErrors","getElementsInDesign","includeHidden","focusOnFirstError","focuseOnFirstError","firstErrorQuestion","hasErrorsCore","focus","hasErrorsInPanels","hasRequiredError","customError","validatePanel","beforeSettingPanelErrors","getErrorCustomText","visQuestions","addQuestionsToList","requiredErrorText","updateContainsErrors","getContainsErrors","containsErrors","updateElementVisibility","getFirstQuestionToFocus","withError","hasInput","currentErrorCount","focusFirstQuestion","focusFirstErrorQuestion","addElementsToList","addElementsToListCore","updateCustomWidgets","getQuestionTitleLocation","onGetQuestionTitleLocation","questionTitleLocation","getStartIndex","getQuestionStartIndex","questionStartIndex","getProgressInfoByElements","childVisibilityChanged","newIsVisibleValue","oldIsVisibleValue","createRowAndSetLazy","createRow","isLazyRenderInRow","onElementVisibilityChanged","buildRows","surveyImpl","updateRowsOnElementAdded","panelAdded","questionAdded","addElementCallback","onElementStartWithNewLineChanged","updateRowsOnElementRemoved","panelRemoved","questionRemoved","removeElementCallback","updateRowsVisibility","canBuildRows","isNewRow","lazyRowsRenderingStartRow","dragDropAddTargetToRow","findRowByElement","elIndex","elementWidthChanged","getRenderedTitle","isClearValueOnHiddenContainer","updateValueWithDefaults","setVisibleIndex","resetVisibleIndexes","lastVisibleIndex","beforeSetVisibleIndex","panelStartIndex","getPanelStartIndex","panelIndex","isContinueNumbering","isParentReadOnly","isSurveyReadOnly","onReadOnlyChanged","reNew","canAddElement","insertElementAfter","insertElementBefore","before","addQuestion","addNewQuestion","questionType","createQuestion","addNewPanel","createNewPanel","removeQuestion","runVisibleCondition","runEnableCondition","runRequiredCondition","conditionRunner","requiredIf","onAnyValueChanged","els","findElement","dragDropAddTargetToEmptyPanel","destRow","dragDropAddTargetToNewRow","dragDropAddTargetToExistingRow","dragDropAddTargetToEmptyPanelCore","prevRowIndex","srcRow","targetRow","onIndentChanged","onSetData","getPage","setPage","moveToBase","notifySurveyOnVisibilityChanged","setNo","showNumber","showQuestionNumbers","panelVisibilityChanged","getIndentSize","innerIndent","clearOnDeletingContainer","cancelPreviewByPage","registerElement","PopupModel","PopupBaseViewModel","_surveyStrings__WEBPACK_IMPORTED_MODULE_2__","_utils_popup__WEBPACK_IMPORTED_MODULE_3__","verticalPosition","horizontalPosition","onShow","FOCUS_INPUT_SELECTOR","popupDirection","trapFocus","focusableElements","firstFocusableElement","lastFocusableElement","activeElement","updatePosition","focusFirstInput","background","scrollContent","updateVerticalPosition","calculatePopupDirection","calculatePosition","newVerticalDimensions","updateVerticalDimensions","calculatePointerTarget","createPopupContainer","mountPopupContainer","Question","_survey_element__WEBPACK_IMPORTED_MODULE_2__","_surveyStrings__WEBPACK_IMPORTED_MODULE_3__","_error__WEBPACK_IMPORTED_MODULE_4__","_validator__WEBPACK_IMPORTED_MODULE_5__","_localizablestring__WEBPACK_IMPORTED_MODULE_6__","_conditions__WEBPACK_IMPORTED_MODULE_7__","_questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__","_settings__WEBPACK_IMPORTED_MODULE_9__","_rendererFactory__WEBPACK_IMPORTED_MODULE_10__","customWidgetData","onReadyChanged","parentQuestionValue","isRunningValidatorsValue","isValueChangedInSurvey","allowNotifyValueChanged","getQuestionId","locTitleValue","getUpdatedQuestionTitle","locProcessedTitle","locCommentText","updateQuestionCss","initCommentFromSurvey","questionCounter","readOnlyCommentRenderMode","onGetSurvey","oldValueName","onValueNameChanged","questionRenamed","initDataFromSurvey","onNameChanged","choicesLoaded","notifySurveyVisibilityChanged","runConditions","areEmptyElementsHidden","questionCreated","onParentChanged","setParentQuestion","onParentQuestionChanged","getTitleLocation","isVisibilityChanged","questionVisibilityChanged","isFlowLayout","getTitleLocationCore","isAllowTitleLeft","getDescriptionLocation","descriptionLocation","questionDescriptionLocation","getAllErrors","getErrorByType","errorType","isCustomWidgetRequested","customWidgetValue","updateCustomWidget","getCustomWidget","afterRenderQuestionElement","hasSingleInput","afterRenderQuestionInput","afterRenderQuestion","afterRenderQuestionCallback","beforeDestroyQuestionElement","updateElementCssCore","updateCssClasses","updateQuestionCssClasses","ensureElementCss","setCssRoot","getCssRoot","hasTitleOnLeft","setCssHeader","getCssHeader","hasTitleOnTop","setCssContent","getCssContent","setCssTitle","getCssTitle","isAnswered","setCssError","getCssError","errorLocation","objCss","getCssType","getFirstErrorInputElementId","getFirstInputElementId","FocusElement","focusCallback","maxOthersLength","getProcessedTextValue","textValue","isExists","TextPreprocessorValuesMap","supportComment","supportOther","hasOtherChanged","isDesignModeV2","supportCreatorV2","runVisibleIfCondition","runEnableIfCondition","runRequiredIfCondition","conditionEnabelRunner","conditionRequiredRunner","calcNo","hideNumber","getUpdatedQuestionNo","surveyLoadCallback","onSurveyValueChanged","updateValueFromSurvey","requireUpdateCommentValue","updateCommentFromSurvey","commentChangedCallback","setNewValue","valueToDataCallback","unbindValue","createValueCopy","isValueSurveyElement","canClearValueAsInvisible","isParentVisible","hasVisibleQuestionByValueName","clearValueIfInvisible","calcDisplayValue","displayValueCallback","getDisplayValueEmpty","getDisplayValueCore","keyAsText","isValueExpression","defaultValueExpression","convertDefaultValue","getPlainData","includeEmpty","includeQuestionTypes","questionPlainData","isNode","calculations","calculation","isComment","correctAnswer","getQuizQuestionCount","getCorrectAnswerCount","isAnswerCorrect","correctAnswerCount","quizQuestionCount","isDefaultValueEmpty","setDefaultValue","getQuestionFromArray","getDefaultValue","setValueAndRunExpression","setFunc","getQuestionComment","setQuestionComment","questionComment","setNewComment","updateIsAnswered","getIsAnswered","getValidators","validators","getSupportedValidators","classValidators","supportedValidators","addSupportedValidators","addConditionObjectsByContext","processedTitle","getConditionJson","operator","oldHasErrors","checkForErrors","isOnValueChanged","beforeSettingQuestionErrors","addError","newError","removeError","qErrors","collectErrors","onCheckForErrors","canRunValidators","runValidators","fireSurveyValidation","validateValueCallback","validateQuestion","getIsRunningValidators","validatorRunner","onAsyncCompleted","doOnAsyncCompleted","raiseOnCompletedAsyncValidators","onCompletedAsyncValidators","isRunningValidators","oldAnswered","setNewValueInData","onValueChanged","isTextValue","isUpdateValueTextOnTyping","getDataLocNotification","valueToData","setValueCore","questionValue","setQuestionValue","canSetValueToSurvey","valueForSurvey","valueFromData","setComment","valueFromDataCallback","valueChangedCallback","setQuestionVisibleIndexForHiddenTitle","setQuestionVisibleIndexForHiddenNumber","supportGoNextPageAutomatic","supportGoNextPageError","clearUnusedValues","useDisplayValuesInTitle","getRendererByQuestion","getValidatorTitle","getAllValues","numberingAllowedByParent","QuestionCustomWidget","CustomWidgetCollection","widgetJson","isFirstRender","onLocaleChangedEvent","isFit","isLibraryLoaded","showInToolbox","getActivatedBy","widgetIsLoaded","init","activatedByChanged","activatedBy","pdfQuestionType","pdfRender","widgetsValues","widgetsActivatedBy","onCustomWidgetAdded","addCustomWidget","widgets","widgetName","setActivatedBy","widget","getCustomWidgetByName","QuestionSelectBase","QuestionCheckboxBase","_survey__WEBPACK_IMPORTED_MODULE_1__","_itemvalue__WEBPACK_IMPORTED_MODULE_3__","_surveyStrings__WEBPACK_IMPORTED_MODULE_4__","_error__WEBPACK_IMPORTED_MODULE_5__","_choicesRestful__WEBPACK_IMPORTED_MODULE_6__","_helpers__WEBPACK_IMPORTED_MODULE_8__","otherItemValue","dependedQuestions","noneItemValue","isSettingDefaultValue","isSettingComment","isRunningChoices","isFirstLoadChoicesFromUrl","isUpdatingChoicesDependedQuestions","onVisibleChoicesChanged","updateVisibilityBasedOnChoices","setNewRestfulProperty","locOtherText","choicesByUrl","onLoadChoicesFromUrl","updateChoicesFromServer","choicesFromQuestion","removeFromDependedQuestion","getQuestionWithChoices","choicesOrder","updateVisibleChoices","choicesFromUrl","getHasOther","runItemsEnableCondition","hasUnknownValue","prevCommentValue","getIsMultipleValue","setConditionalChoicesRunner","filteredChoicesValue","activeChoices","setConditionalEnableChoicesRunner","conditionChoicesEnableIfRunner","onEnableItemCallBack","clearDisabledValues","onAfterRunItemsEnableCondition","choicesVisibleIf","conditionChoicesVisibleIfRunner","choicesEnableIf","getFilteredChoices","rendredValueToDataCore","createRestful","commentValue","getStoreOthersAsComment","isRenderedValueSetting","rendredValueToData","updateComment","rendredValueFromData","isOtherSel","oldComment","isRunning","isWaitingForParameters","cachedValueForUrlRequests","choiceitem","renderedValueFromDataCore","includeOther","isFilteredChoices","checkEmptyValue","hasNone","noneItem","isValueDisabled","addIntoDependedQuestion","calcValue","calcVisibleChoices","canUseFilteredChoices","sortVisibleChoices","addToVisibleChoices","isAddDefaultItems","isAddAll","newItemValue","supportNone","isItemInList","parentQuestion","dataValue","choiceDataItem","getChoicesDisplayValue","isOther","getChoicesFromQuestion","isSelected","choicesFromQuestionMode","isBuiltInChoice","itemsSelected","isSupportProperty","otherErrorText","runChoicesByUrl","setSurveyCore","storeOthersAsComment","newComment","getCommentFromValue","setOtherValueIntoValue","processor","getTextProcessor","isChoicesLoaded","disableOnGettingChoicesFromWeb","enableOnLoadingChoices","newChoices","checkCachedValuesOnExisting","cachedValues","createCachedValueForUrlRequests","updateCachedValueForUrlRequests","checkOnExisting","updatedValue","updateChoicesDependedQuestions","visibleChoicesChangedCallback","hideIfChoicesEmpty","filteredChoices","sortArray","mult","keepIncorrectValues","questionCountByValueName","clearIncorrectValuesCallback","clearIncorrectValuesCore","clearValueOnDisableItems","clearDisabledValuesCore","canClearValueAnUnknow","columnClass","colCount","getItemIndex","isNone","labelClass","controlLabelClass","controlLabelChecked","showItemsInOrder","prevIndex","leftElementsCount","oldIsReady","getItemValueWrapperComponentName","TemplateRendererComponentName","getItemValueWrapperComponentData","colCountChangedCallback","QuestionBooleanModel","_questionfactory__WEBPACK_IMPORTED_MODULE_0__","getValueTrue","setCheckedValue","getValueFalse","locLabel","valueTrue","valueFalse","registerQuestion","ButtonGroupItemValue","QuestionButtonGroupModel","ButtonGroupItemModel","_question_baseselect__WEBPACK_IMPORTED_MODULE_2__","QuestionCheckboxModel","_questionfactory__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_3__","_surveyStrings__WEBPACK_IMPORTED_MODULE_5__","selectAllItemValue","invisibleOldValues","isChangingValueOnClearIncorrect","allItemCount","hasSelectAll","selectedCount","selectAll","toggleSelectAll","shouldCheckMaxSelectedChoices","maxSelectedChoices","isSelectAll","prevNoneIndex","noneIndexInArray","newNoneIndex","getFirstUnknownIndex","noneValue","supportSelectAll","valStr","clearIncorrectAndDisabledValues","clearDisabled","restoredValues","restoreValuesFromInvisible","isUnkown","visItems","setDefaultValueWithOthers","hasActiveChoices","DefaultChoices","QuestionCommentModel","_question_textbase__WEBPACK_IMPORTED_MODULE_2__","ComponentQuestionJSON","ComponentCollection","QuestionCustomModelBase","QuestionCustomModel","QuestionCompositeModel","_question__WEBPACK_IMPORTED_MODULE_0__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__","onInit","onLoaded","onAfterRender","onAfterRenderContentElement","elementsJSON","createElements","customQuestionValues","getCustomQuestionByName","customQuestion","onAddingJson","isComposite","questionJSON","createCompositeModel","createCustomModel","onCreateComposite","onCreateCustom","CreateDisabledDesignElements","createWrapper","getElement","initElement","disableDesignActions","getSurveyData","locNotification","convertDataName","convertDataValue","questionWrapper","qType","QuestionCompositeTextProcessor","composite","settingNewValue","textProcessing","ItemVariableName","createPanel","setAfterRenderCallbacks","setIsContentElement","isContentElement","oldComposite","prefixName","prefixText","QuestionDropdownModel","minMaxChoices","choicesMax","choicesMin","choicesStep","QuestionEmptyModel","QuestionExpressionModel","getCurrecyCodes","_questionfactory__WEBPACK_IMPORTED_MODULE_3__","_conditions__WEBPACK_IMPORTED_MODULE_4__","runIfReadOnly","runIfReadOnlyValue","getValueAsStr","getExpressionDisplayValue","displayStyle","toLocaleDateString","currency","useGrouping","maximumFractionDigits","minimumFractionDigits","toLocaleString","QuestionFileModel","_questionfactory__WEBPACK_IMPORTED_MODULE_2__","isUploading","onStateChanged","currentState","clearFiles","doneCallback","allFilesOk","stateChanged","loadFilesProc","storeDataAsText","fileReader","FileReader","readAsDataURL","uploadFiles","fileItem","allowImagesPreview","isFileImage","newValues","downloadFile","waitForUpload","errorLength","imagePrefix","subStr","QuestionHtmlModel","_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__","ignoreHtmlProgressing","processHtml","QuestionImageModel","ImageItemValue","QuestionImagePickerModel","convertValToArrayForMultSelect","MatrixRowModel","MatrixCells","QuestionMatrixModel","_martixBase__WEBPACK_IMPORTED_MODULE_2__","_error__WEBPACK_IMPORTED_MODULE_6__","_questionfactory__WEBPACK_IMPORTED_MODULE_7__","_localizablestring__WEBPACK_IMPORTED_MODULE_8__","_question_dropdown__WEBPACK_IMPORTED_MODULE_9__","_settings__WEBPACK_IMPORTED_MODULE_10__","onMatrixRowChanged","getCorrectedRowValue","rowClass","rowErrorClass","cellsOwner","setCellText","getCellRowColumnValue","createString","setDefaultCellText","matrixDefaultRowName","getCellLocText","getDefaultCellLocText","getCellText","getDefaultCellText","getCellDisplayText","getColumns","resRow","rowValues","isRowChanging","emptyLocalizableString","cellsValue","updateVisibilityBasedOnRows","rowsOrder","cellDisabledClass","cellSelectedClass","itemHoverClass","cellClass","createMatrixRow","sortVisibleRows","hasValuesInAllRows","hasErrorInRows","isAllRowRequired","onMatrixRowCreated","rowVal","newKey","rowName","rowDataItem","hideIfRowsEmpty","getColumnHeaderWrapperComponentName","SurveyModel","getElementWrapperComponentName","getColumnHeaderWrapperComponentData","getElementWrapperComponentData","getRowHeaderWrapperComponentName","getRowHeaderWrapperComponentData","DefaultRows","DefaultColums","MatrixDropdownRowModel","QuestionMatrixDropdownModel","_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__","_itemvalue__WEBPACK_IMPORTED_MODULE_2__","buildCells","resetRenderedTable","getFooterText","locTotalText","getRowTitleWidth","rowTitleWidth","rowValue","displayRowValue","getRowDisplayValue","hasContext","prefixTitle","fullTitle","generateRows","addDefaultColumns","matrixDropdownColumnTypes","MatrixDropdownColumn","MatrixDropdownCell","MatrixDropdownTotalCell","MatrixDropdownRowModelBase","MatrixDropdownTotalRowModel","QuestionMatrixDropdownRenderedCell","QuestionMatrixDropdownRenderedRow","QuestionMatrixDropdownRenderedTable","QuestionMatrixDropdownModelBase","_martixBase__WEBPACK_IMPORTED_MODULE_1__","_survey_element__WEBPACK_IMPORTED_MODULE_4__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_5__","_itemvalue__WEBPACK_IMPORTED_MODULE_6__","_surveyStrings__WEBPACK_IMPORTED_MODULE_7__","_questionfactory__WEBPACK_IMPORTED_MODULE_8__","_question_expression__WEBPACK_IMPORTED_MODULE_9__","_functionsfactory__WEBPACK_IMPORTED_MODULE_10__","_settings__WEBPACK_IMPORTED_MODULE_11__","_error__WEBPACK_IMPORTED_MODULE_12__","_actions_action__WEBPACK_IMPORTED_MODULE_13__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_14__","onUpdateSelectBaseCellQuestion","onCellQuestionUpdate","locOptionsCaption","columnColCount","colOwnerValue","indexValue","_isVisible","_hasVisibleCell","doShowInMultipleColumnsChanged","updateTemplateQuestion","templateQuestion","getColumnTypes","getClassNameProperty","colOwner","calcCellQuestionType","onColumnCellTypeChanged","templateQuestionValue","locRequiredErrorText","cellType","showInMultipleColumns","isSupportMultipleColumns","totalType","totalExpression","createCellQuestion","createNewQuestion","callOnCellQuestionUpdate","updateCellQuestion","onUpdateJson","setQuestionProperties","qDefinition","defaultCellTypeChanged","getCellType","matrixDefaultCellType","prevCellType","curCellType","removeProperties","doItemValuePropertyChanged","isEditableTemplateElement","onColumnPropertyChanged","onColumnItemValuePropertyChanged","onShowInMultipleColumnsChanged","validateCell","getTotalExpression","totalFormat","totalCurrency","totalDisplayStyle","totalMaximumFractionDigits","totalMinimumFractionDigits","funName","MatrixDropdownRowTextProcessor","getValues","onCustomProcessText","IndexVariableName","RowValueVariableName","isSettingValue","detailPanelValue","isCreatingDetailPanel","subscribeToChanges","textPreProcessor","RowVariableName","showHideDetailPanel","getId","idCounter","getCellValue","hasDetailPanel","detailPanel","setIsDetailPanelShowing","onDetailPanelShowingChanged","isDetailPanelShowing","hideDetailPanel","showDetailPanel","ensureDetailPanel","destroyPanel","createRowDetailPanel","getRowValue","getRowIndex","allValues","OwnerVariableName","getDataValueCore","valuesHash","newColumnValue","updateQuestionsValue","changedName","changedValue","changedQuestion","changingValue","onRowChanging","isValidateOnValueChanging","hasQuestonError","onRowChanged","colQuestion","getQuestionByColumnName","detailQuestion","isColQuestion","getCellByColumnName","checkIfValueInRowDuplicated","getQuestionByColumn","getCellByColumn","columnName","detailQuestions","getQuestionsByName","getSharedQuestionByName","qVal","matrixTotalValuePostFix","updateCellQuestionOnColumnChanged","updateCellOnColumnChanged","updateCellQuestionOnColumnItemValueChanged","updateCellOnColumnItemValueChanged","onQuestionReadOnlyChanged","parentIsReadOnly","panelHasError","hideErroredPanel","isSingleDetailPanel","createCell","cellValue","commentKey","editingObj","editingObjValue","onEditingObjPropertyChanged","updateOnSetValue","onTotalValueChanged","prevValue","showErrorOnCore","getShowErrorLocation","isFirstChoice","hideCaption","choiceIndex","cssError","isShowInMultipleColumns","calculateFinalClassName","matrixCssClasses","questionCss","isDetailRow","hasActionCellInRowsValues","build","hasFooter","isColumnLayoutHorizontal","hasRemoveRowsValue","isRequireReset","hasRemoveRows","canRemoveRows","headerRowValue","footerRowValue","buildRowsActions","buildHeader","buildFooter","updateShowTableAndAddRow","getShowColumnsIfEmpty","showAddRow","canAddRow","getAddRowLocation","columnLayout","onAddedRow","getRenderedDataRowCount","rowsActions","buildRowActions","addHorizontalRow","onRemovedRow","getRenderedRowIndex","removeCount","onDetailPanelChangeVisibility","panelRowIndex","createDetailPanelRow","colHeaders","isShown","hasRowText","hasActionCellInRows","createHeaderCell","hasVisibleCell","createMutlipleColumnsHeader","createTextCell","visibleTotalRow","createMutlipleColumnsFooter","createEditCell","buildHorizontalRows","buildVerticalRows","getRowActions","canRemoveRow","renderedRows","useAsHeader","renderedRow","createHorizontalRow","getRowActionsCell","rowActions","actionContainer","setDefaultRowActions","getUpdatedMatrixRowActions","addRowActionsCell","renderedCell","setHeaderCellWidth","createMutlipleEditCells","buttonCell","onCreateDetailPanelRenderedRowCallback","createMutlipleVerticalRows","createVerticalRow","createEndVerticalActionRow","getMultipleColumnChoices","lTitle","hCell","setRequriedToHeaderCell","rChoice","rChoiceIndex","visChoices","rCell","hasTotal","rRow","isFooter","choiceItem","setHeaderCell","getColumnWidth","createRemoveRowCell","isRemoveRow","lockResetRenderedTable","isDoingonAnyValueChanged","createNewDetailPanel","selectedElementInDesign","newColumns","updateColumnsIndexes","clearRowsAndResetRenderedTable","updateColumnsCellType","colNames","onStartRowAddingRemoving","onEndRowAdding","onEndRowRemoving","columnsChangedCallback","renderedTableValue","onRenderedTableResetCallback","createRenderedTable","onRenderedTableCreatedCallback","onCellCreatedCallback","matrixCellCreated","getRequiredText","updateHasFooter","getColumnByName","prevTotalValue","totalValue","runCellsCondition","runTotalsCondition","getRowConditionValues","checkColumnsVisibility","isColumnVisibilityChanged","curVis","hasVisCell","totalRow","getColumnName","columnMinWidth","updateValueOnRowsGeneration","createNewValue","rValue","getNewValueOnRowChanged","getVisibleTotalRow","generateTotalRow","visRows","getRowValueCore","checkedRow","addDuplicationError","setRowValue","nullOnEmpty","isMatrixValueEmpty","getRowObj","displayvalue","getCellQuestions","onBeforeValueChanged","onSetQuestionValue","checkForAnswersOrErrors","predicate","every","errosInRows","isDuplicated","isValueDuplicated","detailPanelMode","getUniqueColumns","isValueInColumnDuplicated","keyValues","isValueDuplicatedInRow","getFirstCellQuestion","createQuestionCore","deleteRowValue","isObject","getOnCellValueChangedOptions","getQuestion","colName","getCellQuestion","onCellValueChanged","onCellValueChangedCallback","matrixCellValueChanged","matrixCellValidate","oldRowValue","matrixCellValueChanging","newRowValue","isDeletingValue","rowObj","columnValue","combine","detailElements","onHasDetailPanelCallback","updateDetailPanelButtonCss","onCreateDetailPanelCallback","getQuestionByValueNameFromArray","isSett","getCellTemplateData","getMatrixCellTemplateData","getCellWrapperComponentName","getCellWrapperComponentData","MatrixDynamicRowModel","QuestionMatrixDynamicModel","_helpers__WEBPACK_IMPORTED_MODULE_5__","_settings__WEBPACK_IMPORTED_MODULE_6__","_utils_utils__WEBPACK_IMPORTED_MODULE_7__","sortablejs__WEBPACK_IMPORTED_MODULE_8__","initialRowCount","setRowCountValueFromData","moveRowByIndex","fromIndex","toIndex","movableRow","defaultAddRowText","allowRowsDragAndDrop","initSortable","sortableInst","defaultRowValue","rowCount","rowCountValue","matrixMaximumRowCount","newRow","getValueForNewRow","domNode","QuestionMatrixDynamicRenderedTable","onGetValueForNewRowCallBack","maxRowCount","allowAddRows","allowRemoveRows","canRemoveRowsCallback","matrixAllowRemoveRow","oldRowCount","getQuestionToFocusOnAddingRow","matrixBeforeRowAdded","addRowCore","detailPanelShowOnAdding","prevRowCount","getDefaultRowValue","matrixRowAdded","isRowAdded","defaultValueFromLastRow","isRequireConfirmOnRowDelete","confirmDeleteText","matrixRowRemoving","removeRowCore","matrixRowRemoved","addRowLocation","hideColumnsIfEmpty","addColumnIntoaddConditionObjectsByContext","matrixMaxRowCountInCondition","hasErrorInMinRows","setRowCount","getRowValueByIndex","newRowCount","MultipleTextItemModel","QuestionMultipleTextModel","_survey_element__WEBPACK_IMPORTED_MODULE_1__","_question_text__WEBPACK_IMPORTED_MODULE_3__","_jsonobject__WEBPACK_IMPORTED_MODULE_4__","_questionfactory__WEBPACK_IMPORTED_MODULE_5__","_helpers__WEBPACK_IMPORTED_MODULE_6__","editorValue","createEditor","questionTitleTemplateCallback","getItemDefaultValue","maxTextLength","placeHolder","locPlaceHolder","getMultipleTextValue","setMultipleTextValue","isMultipleItemValueChanging","updateItemsSize","addDefaultItems","DefaultMutlipleTextItems","addItem","editorsOnSurveyLoad","performForEveryEditor","updateInputSize","createTextItem","getItemByName","onItemValueChanged","itemName","getIsRequiredText","QuestionPanelDynamicItem","QuestionPanelDynamicTemplateSurveyImpl","QuestionPanelDynamicModel","_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__","_jsonobject__WEBPACK_IMPORTED_MODULE_5__","QuestionPanelDynamicItemTextProcessor","panelItem","getSharedQuestionFromArray","ParentItemVariableName","returnDisplayValue","panelValue","setPanelItemData","getPanelItemData","surveyValues","getRootData","loadingPanelCount","currentIndexValue","isAddingNewPanels","templateValue","createAndSetupNewPanelObject","addOnPropertyChangedCallback","rebuildPanels","setPanelsState","setTemplatePanelSurveyImpl","setPanelsSurveyImpl","assignOnPropertyChangedToTemplate","onTemplateElementPropertyChanged","currentIndexChangedCallback","showRangeInProgress","templateElements","prepareValueForPanelCreating","addingNewPanelsValue","isNewPanelsValueChanged","setValueAfterPanelsCreating","isValueChangingInternally","panelsState","setValueBasedOnPanelCount","reRunCondition","panelCountChangedCallback","templateTitle","minPanelCount","maxPanelCount","panelMaximumPanelCount","renderModeChangedCallback","setPanelVisibleIndex","showIndex","allowAddPanel","allowRemovePanel","defaultPanelValue","isRowEmpty","newPanel","hasModified","copyValue","defaultValueFromLastPanel","dynamicPanelAdded","getPanelIndex","dynamicPanelRemoved","clearIncorrectValuesInPanel","iscorrectValueWithPostPrefix","postPrefix","panelObjs","questionName","runPanelsCondition","panelValues","hasKeysDuplicated","updatePanelsContainsErrors","changingValueQuestion","errosInPanels","hasErrorInPanels","visibleQuestions","getPanelDisplayValue","qValue","setOnCompleteAsyncInPanel","pnlError","createNewPanelObject","isInteractiveDesignElement","getTemplateQuestionTitleLocation","templateTitleLocation","setPanelCountBasedOnValue","newPanelCount","panelUpdateValueFromSurvey","panelSurveyValueChanged","isSetPanelItemData","dynamicPanelItemValueChanged","panelDataItem","panelRemoveButtonLocation","QuestionRadiogroupModel","showClearButton","QuestionRankingModel","sortablejs__WEBPACK_IMPORTED_MODULE_0__","_question_checkbox__WEBPACK_IMPORTED_MODULE_3__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__","handleArrowUp","handleArrowDown","moveArrayItemBack","syncNumbers","setValueFromUI","focusItem","moveArrayItemForward","itemsNodes","textNodes","textNode","visibleChoice","indexNodes","indexNode","setGhostText","ghostNode","removeOtherChoiceFromChoices","mergeValueAndVisibleChoices","onStart","opacity","QuestionRatingModel","rateValuesChangedCallback","locMinRateDescriptionValue","locMaxRateDescriptionValue","rateMax","rateStep","rateMin","rateValues","ratingMaximumRateValueCount","correctValue","fr","itemCss","QuestionSignaturePadModel","signature_pad__WEBPACK_IMPORTED_MODULE_3__","_questionfactory__WEBPACK_IMPORTED_MODULE_4__","defaultWidth","defaultHeight","resizeCanvas","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","oldWidth","oldHeight","scale","updateValue","signaturePad","dataFormat","initSignaturePad","destroySignaturePad","buttonEl","onclick","readOnlyChangedCallback","allowClear","isDrawingValue","updateValueHandler","propertyChangedHandler","QuestionTextModel","_localizablestring__WEBPACK_IMPORTED_MODULE_2__","_validator__WEBPACK_IMPORTED_MODULE_4__","_settings__WEBPACK_IMPORTED_MODULE_7__","_question_textbase__WEBPACK_IMPORTED_MODULE_8__","locDataListValue","setRenderedMinMax","calcRenderedPlaceHolder","minValueExpression","maxValueExpression","isTextInput","minMaxTypes","isValueLessMin","getMinMaxErrorText","minErrorText","getCalculatedMinMax","isValueGreaterMax","maxErrorText","isMinMaxType","errorText","minMax","isDateInputType","minDate","maxDate","locDataList","correctValueType","hasPlaceHolder","propertyEditor","QuestionTextBase","textUpdateMode","setRenderedPlaceHolder","QuestionFactory","ElementFactory","creatorHash","questionCreator","unregisterElement","elementType","getAllTypes","elementCreator","removeFromSerializer","QuestionNonValue","RendererFactory","renderersHash","unregisterRenderer","rendererAs","renderer","settings","executeCompleteTriggerOnValueChanged","executeSkipTriggerOnValueChanged","confirmActionFunc","confirm","maximumConditionRunCountOnValueChanged","lazyRowsRendering","customIcons","StylesManager","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__","Enabled","findSheet","SurveyJSStylesSheetId","createSheet","initializeStyles","styleSheetId","styleSheets","ownerNode","themeName","themeSelector","ThemeCss","sheet_1","theme_1","ThemeColors","cssRuleText","colorVariableName","insertRule","Media","media","orange","darkblue","darkrose","stone","winter","winterstone","modern","bootstrap","bootstrapmaterial","modernThemeCss","bootstrapThemeCss","bootstrapmaterialThemeCss","SurveyElement","_rendererFactory__WEBPACK_IMPORTED_MODULE_2__","_actions_action__WEBPACK_IMPORTED_MODULE_4__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__","selectedElementInDesignValue","updateVisibleErrors","childInfo","ScrollElementToTop","getElementById","scrollIntoView","elemTop","GetFirstNonTextElement","removeSpaces","tEl","focusElementCore","updateTitleActions","updateExpandAction","notifyStateChanged","elementContentVisibilityChanged","titleToolbarValue","getTitleActions","expandAction","isTitleActionRequested","titleActions","hasStateButton","getUpdatedElementTitleActions","surveyImplValue","surveyDataValue","textProcessorValue","surveyChangedCallback","getProcessedHtml","oldPage","SurveyError","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_4__","_page__WEBPACK_IMPORTED_MODULE_5__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_6__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__","_dxSurveyService__WEBPACK_IMPORTED_MODULE_8__","_surveyStrings__WEBPACK_IMPORTED_MODULE_9__","_error__WEBPACK_IMPORTED_MODULE_10__","_localizablestring__WEBPACK_IMPORTED_MODULE_11__","_stylesmanager__WEBPACK_IMPORTED_MODULE_12__","_surveytimer__WEBPACK_IMPORTED_MODULE_13__","_settings__WEBPACK_IMPORTED_MODULE_15__","_utils_utils__WEBPACK_IMPORTED_MODULE_16__","variablesHash","localeValue","completedStateValue","completedStateTextValue","isTimerStarted","onCompleting","onComplete","onShowingPreview","onNavigateToUrl","onStarted","onPartialSend","onCurrentPageChanging","onValueChanging","onPanelVisibleChanged","onQuestionCreated","onQuestionAdded","onQuestionRemoved","onPanelAdded","onPanelRemoved","onPageAdded","onValidateQuestion","onSettingQuestionErrors","onServerValidateQuestions","onValidatePanel","onErrorCustomText","onValidatedErrorsOnCurrentPage","onProcessHtml","onGetQuestionTitle","onGetQuestionNo","onProgressText","onTextMarkdown","onTextRenderAs","onUploadFiles","onDownloadFile","onClearFiles","onLoadChoicesFromServer","onLoadedSurveyFromService","onProcessTextValue","onUpdateQuestionCssClasses","onUpdatePanelCssClasses","onUpdatePageCssClasses","onAfterRenderSurvey","onAfterRenderHeader","onAfterRenderPage","onAfterRenderQuestion","onAfterRenderQuestionInput","onAfterRenderPanel","onMatrixRowAdded","onMatrixBeforeRowAdded","onMatrixRowRemoving","onMatrixRowRemoved","onMatrixAllowRemoveRow","onMatrixCellCreated","onMatrixAfterCellRender","onMatrixCellValueChanged","onMatrixCellValueChanging","onMatrixCellValidate","onDynamicPanelAdded","onDynamicPanelRemoved","onTimer","onTimerPanelInfoText","onDynamicPanelItemValueChanged","onIsAnswerCorrect","onDragDropAllow","onScrollingElementToTop","onGetQuestionTitleActions","onGetPanelTitleActions","onGetPageTitleActions","onGetMatrixRowActions","onElementContentVisibilityChanged","onGetExpressionDisplayValue","jsonErrors","cssValue","hideRequiredErrors","_isMobile","_isDesignMode","ignoreValidation","isNavigationButtonPressed","isCalculatingProgressText","isTriggerIsRunning","triggerValues","triggerKeys","conditionValues","isValueChangedOnRunningCondition","conditionRunnerCounter","conditionUpdateVisibleIndexes","conditionNotifyElementsOnAnyValueOrVariableChanged","isEndLoadingFromJson","questionHashes","namesInsensitive","valueNames","valueNamesInsensitive","timerFunc","stylesManager","onProcess","doOnPageAdded","doOnPageRemoved","onFirstPageIsStartedChanged","onModeChanged","updateProgressText","onBeforeCreating","loadSurveyFromService","platform","onQuestionsOnPageModeChanged","mergeValues","getNavigationCss","btn","lazyRenderingValue","lazyRendering","updateLazyRenderingRowsOnRemovingElements","getNavigateToUrl","getExpressionItemOnRunCondition","navigateToUrlOnCondition","navigateToUrl","navigateTo","maakeRequiredErrorsInvisibgle","erType","removeNonExisingRootKeys","getCalculatedValueByName","includeIntoResult","currentLocale","getUsedLocales","defaultLoc","defIndex","currentPageValue","activePage","getBuiltInRendererForString","logoPosition","renderedHasLogo","logoClasses","setIsMobile","isMobile","runTriggers","checkTriggers","completedHtmlOnCondition","completedHtml","getQuestionTitlePatternOptions","getNewTitlePattern","getNewQuestionTitleElement","currentValue","showPageNumbers","canShowProresBar","showProgressBar","isShowingPreview","showPreviewBeforeComplete","setCalcuatedValuesIntoResult","setDataCore","setDataValueCore","updateAllQuestionsValue","notifyAllQuestionsOnValueChanged","notifyElementsOnAnyValueOrVariableChanged","isDisposed","getAllQuestions","calValue","resultItem","addCalculatedValuesIntoFilteredValues","caclValues","deleteDataValueCore","pageCount","firstPageIsStarted","vPages","onContainsPageCallback","newPage","getPageByObject","currentPageChanging","currentPageChanged","isStartedState","isFocusingQuestion","focusFirstQuestionAutomatic","isLoading","isCompletedBefore","isEditMode","onShowingPreviewChanged","setCompletedState","clearData","gotoFirstPage","passed","visiblePageCount","updateValuesWithDefaults","oldCurrentPage","newCurrentPage","allowChanging","isNextPage","isPrevPage","getProgress","navigationButtonsVisibility","showNavigationButtons","getIsNavigationButtonsShowingOn","buttonPosition","isNavigationButtonsShowing","isShowPreviewBeforeComplete","setDesignMode","visPages","updateAllElementsVisibility","showInvisibleElements","cookieName","cookies","cookie","setCookie","deleteCookie","doCurrentPageComplete","hasErrorsOnNavigate","doCurrentPageCompleteCore","checkErrorsMode","hasCurrentPageErrors","checkForAsyncQuestionValidation","clearAsyncValidationQuesitons","onCompletedAsyncQuestionValidators","asyncValidationQuesitons","asynQuestions","checkIsCurrentPageHasErrors","onAsyncValidation","hasPageErrors","checkIsPageHasErrors","firstErrorPage","ensureUniqueNames","ensureUniqueName","ensureUniquePageName","ensureUniquePanelName","ensureUniqueQuestionName","ensureUniqueElementName","existingElement","getNewName","isFocuseOnFirstError","fireValidatedErrorsOnPage","questionsOnPage","resetNavigationButton","doServerValidation","allowShowPreview","curPage","isValidatingOnServer","doNextPage","questionsOnPageMode","runningPages","setupPagesForPageModes","restoreOrigionalPages","currentPageNo","origionalPages","isSinglePage","originalPages","questionHashesClear","newPages","createPagesForQuestionOnPageMode","deletedLen","doElementsOnLoad","createSinglePage","createPagesForEveryQuestion","single","createNewPage","originalPage","originalElement","pageJson","questionHashesAdded","showPrevButton","getPageMaxTimeToFinish","isCompleteOnTrigger","onCompletingOptions","allowComplete","previousCookie","hasCookie","setCompleted","savingDataStarted","onCompleteOptions","showDataSaving","showDataSavingError","showDataSavingSuccess","showDataSavingClear","surveyPostId","setIsValidatingOnServer","onIsValidatingOnServerChanged","isPreview","completeServerValidation","hasToFocus","checkOnPageTriggers","sendResultOnPageNext","renderedCompletedHtml","completedBeforeHtml","loadingHtml","getProgressText","getProgressTextCore","correctAnswersCount","getCorrectedAnswerCount","afterRenderSurvey","afterRenderHeader","getQuestionsByValueName","allow","getUpdatedPageTitleActions","getUpdatedPanelTitleActions","getUpdatedQuestionTitleActions","uploadingCallback","uploadFilesCore","fileValue","createSurveyService","responses","addPage","addNewPage","removePage","caseInsensitive","getQuestionsByNames","getPageByElement","getPageByQuestion","getPagesByNames","getQuizQuestions","getAllPanels","panelName","questionOnValueChanging","updateQuestionValue","checkQuestionErrorOnValueChanged","checkQuestionErrorOnValueChangedCore","oldErrorCount","checkErrorsOnValueChanging","notifyQuestionOnValueChanged","isRunningConditions","valName","getCurrentPageQuestions","includeInvsible","isOnNextPage","triggers","trigger","checkExpression","oldCurrentPageIndex","runConditionsCore","checkIfNewPagesBecomeVisible","runConditionOnValueChanged","newCurrentPageIndex","surveyShowDataSaving","cliendId","onLoadingSurveyFromService","loadSurveyFromServiceJson","onLoadSurveyFromService","updatePageVisibleIndexes","isPageVisible","jsonConverter","setJsonObject","getProcessedTextValueCore","wasEmpty","getInCorrectedAnswerCount","variable","firstName","reduceFirstName","pos1","pos2","clearInvisibleValues","clearInvisibleQuestionValues","getVariableNames","newQuestionValue","isValueEqual","tryGoNextPageAutomatic","generateNewName","questionHashesPanelAdded","baseName","goNextPageAutomatic","allowCompleteSurveyAutomatic","commentName","parentPanel","rootPanel","questionHashesRemoved","oldName","questionHashAddedCore","questionHashRemovedCore","doEncoding","processTextCore","getCorrectedAnswerCountCore","isCorrect","correctAnswers","incorrectAnswers","addCount","getCorrectedAnswers","getInCorrectedAnswers","showTimerPanel","getTimerInfoText","pageSpent","getDisplayTime","surveySpent","pageLimitSec","pageLimit","surveyLimit","maxTimeToFinish","showTimerPanelMode","getTimerInfoPageText","getTimerInfoSurveyText","pageText","surveyText","startTimer","doTimer","instance","stop","maxTimeToFinishPage","getObjects","setTriggerValue","isVariable","copyTriggerValue","fromName","focusQuestion","reason","getRowWrapperComponentName","getRowWrapperComponentData","SurveyProgressButtonsModel","elementCss","surveyLocalization","surveyStrings","_localization_english__WEBPACK_IMPORTED_MODULE_0__","currentLocaleValue","defaultLocaleValue","supportedLocales","getLocaleStrings","getCurrentStrings","removeDefaultLoc","locName","str1","str2","SurveyWindowModel","initialModel","createSurvey","windowElement","onSurveyComplete","showingChangedCallback","show","hide","expandedChangedCallback","expandcollapse","closeWindowOnComplete","timerId","surveyElementName","surveyTimerFunctions","SurveyTimer","listenerCounter","instanceValue","TextPreProcessorItem","TextPreProcessorValue","TextPreProcessor","QuestionTextProcessor","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__","canProcess","hasAllValuesOnLastRunValue","getItems","getName","replacedValue","encodeURIComponent","Trigger","SurveyTrigger","SurveyTriggerVisible","SurveyTriggerComplete","SurveyTriggerSetValue","SurveyTriggerSkip","SurveyTriggerRunExpression","SurveyTriggerCopyValue","_expressions_expressions__WEBPACK_IMPORTED_MODULE_4__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__","usedNames","oldPropertiesChanged","onExpressionChanged","operatorsValue","expectedValue","exp","buildExpression","operators","isCheckRequired","perform","triggerResult","onSuccess","onFailure","isRequireValue","buildUsedNames","keyValue","ownerValue","onTrigger","onItemSuccess","onItemFailure","setToName","gotoName","onCompleteRunExpression","IsMobile","vendor","opera","PopupUtils","windowHeight","deltaTop","deltaBottom","targetPos","ResponsivityManager","VerticalResponsivityManager","itemsSelector","dotsItemSize","resizeObserver","isInilized","minDimensionConst","separatorSize","ResizeObserver","observe","getDimensions","getAvailableSpace","space","boxSizing","calcItemSize","calcItemsSizes","currentAction","maxDimension","minDimension","canShrink","getVisibleItemsCount","itemsSizes","currSize","updateItemMode","dimension","minSize","fit","disconnect","paddingTop","paddingBottom","unwrap","getSize","compareVersions","confirmAction","detectIEOrEdge","detectIEBrowser","loadFileFromBase64","isElementVisible","findScrollableParent","scrollElementByChildId","createSvg","doKey2Click","getIconNameFromProxy","regExStrip0","segmentsA","segmentsB","ua","oldIe","elevenIe","isIEOrEdge","msie","trident","edge","b64Data","byteString","atob","mimeString","ia","bb","msSaveOrOpenBlob","orientation","elementRect","viewHeight","topWin","bottomWin","topEl","bottomEl","maxTop","minBottom","scrollableEl","proxyName","svgElem","realIconName","lastSymbol","ev","char","ValidatorResult","SurveyValidator","ValidatorRunner","NumericValidator","TextValidator","AnswerCountValidator","RegexValidator","EmailValidator","ExpressionValidator","_error__WEBPACK_IMPORTED_MODULE_1__","getErrorText","getDefaultErrorText","validate","createCustomError","prepareAsyncValidators","asyncResults","isValidateAllValues","asyncValidators","validatorResult","validatedValue","vName","minLength","allowDigits","reg","minCount","maxCount","regex","ensureConditionRunner","generateError","BaseVue","setIsRendering","isRendering","getIsRendering","onDestroyed","created","beforeUpdate","_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__","_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__","__file","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__","_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__","_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__","preventDefaults","isRightClick","offsetX","isRtl","_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__","_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__","_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__","_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__","_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__","_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__","_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__","_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__","_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__","_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__","_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__","_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__","_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__","_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__","_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__","_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__","_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__","_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__","_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__","_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__","_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__","_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__","_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__","_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__","_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__","_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__","_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__","_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__","_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__","_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__","_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__","_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__","_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__","_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__","_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__","_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__","_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__","_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__","_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__","_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__","_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__","_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__","_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__","_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__","_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__","_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__","_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__","_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__","_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__","_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__","_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__","_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__","_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__","_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__","_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__","_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__","_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__","_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__","_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__","_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__","_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__","_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__","_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__","_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__","_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__","_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__","_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__","_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__","_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__","_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__","_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__","_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__","_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__","_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__","_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__","_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__","_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__","_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__","_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__","_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__","_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__","_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__","_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__","_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__","_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__","_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__","_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__","_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__","_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__","_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__","_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__","_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__","QuestionVue","innerValue","changeQuestion","new_val","old_val","_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__","_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__","_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__","_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__","_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__","_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__","_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__","_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__","_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__","_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__","_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__","_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__","_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__","_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__","_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__","_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__","_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__","_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__","_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__","_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__","_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__","_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__","VueSurveyModel","VueSurveyWindowModel","survey_core__WEBPACK_IMPORTED_MODULE_1__","_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__","_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__","_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__","_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__","_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__","_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__","_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__","_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__","BaseItemGroup","activeClass","mandatory","internalLazyValue","selectedItems","toggleMethod","internalValue","selectedValues","valueIndex","updateInternalValue","updateMultiple","updateSingle","isSame","itemGroup","isInGroup","listItemGroup","setTextColor","getBuiltIn","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","Ripple","exact","exactActiveClass","nuxt","ripple","proxyClass","isLink","$listeners","$attrs","$route","computedRipple","toggle","thisArg","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","_byteLength","curByte","tripletToBase64","encodeChunk","uint8","extraBytes","maxChunkLength","len2","autoBom","responseType","MouseEvent","initMouseEvent","HTMLAnchorElement","webkitURL","safari","onloadend","dateLongFormatter","formatLong","timeLongFormatter","dateTimeLongFormatter","dateTimeFormat","matchResult","datePattern","timePattern","dateTime","longFormatters","DO_NOT_EXPORT_CODEPAGE","cpt","sbcs_cache","dbcs_cache","magic_cache","magic_decode","magic_encode","cpdcache","cpecache","sfcc","cca","mdl","mdb","make_EE","E","EE","sbcs_encode","ofmt","sbcs_decode","DD","dbcs_encode","dbcs_decode","utf8_d","direct","encache","null_enc","cp_decache","decache","last_enc","last_cp","sbcs","dbcs","BM","SetD","isstr","dash","o64","hascp","integer","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","FORCED","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","sham","internalObjectKeys","enumBugKeys","hiddenKeys","MILLISECONDS_IN_MINUTE","getDateMillisecondsPart","getTimezoneOffsetInMilliseconds","baseTimezoneOffset","hasNegativeUTCOffset","millisecondsPartOfTimezoneOffset","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","isUndefined","getDefaultAdapter","adapter","transformRequest","isFormData","isArrayBuffer","isStream","isFile","isBlob","isArrayBufferView","isURLSearchParams","transformResponse","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","merge","maxHeight","minHeight","definePropertyModule","SPECIES","CONSTRUCTOR_NAME","baseMixins","backgroundOpacity","bufferValue","query","reverse","rounded","striped","setBackgroundColor","backgroundStyle","genProgressBar","isReversed","normalizedBuffer","$vuetify","rtl","normalize","slot","listeners","normalizedValue","genListeners","loading","loaderHeight","absolute","emptyObject","freeze","isUndef","isDef","isTrue","isFalse","_toString","isPlainObject","isValidArrayIndex","catch","toNumber","makeMap","expectsLowerCase","isReservedAttribute","hasOwn","hit","camelizeRE","camelize","capitalize","polyfillBind","boundFn","_length","nativeBind","_from","noop","looseEqual","isObjectA","isObjectB","isArrayA","isArrayB","keysA","keysB","looseIndexOf","once","SSR_ATTR","ASSET_TYPES","LIFECYCLE_HOOKS","optionMergeStrategies","silent","productionTip","devtools","performance","errorHandler","warnHandler","ignoredElements","keyCodes","isReservedTag","isReservedAttr","isUnknownElement","getTagNamespace","parsePlatformTagName","mustUseProp","async","_lifecycleHooks","unicodeRegExp","isReserved","bailRE","parsePath","segments","_isServer","inBrowser","inWeex","WXEnvironment","weexPlatform","UA","isIE","isIE9","isIOS","isFF","nativeWatch","supportsPassive","isServerRendering","VUE_ENV","__VUE_DEVTOOLS_GLOBAL_HOOK__","isNative","_Set","hasSymbol","Set","uid","Dep","subs","addSub","removeSub","depend","addDep","notify","targetStack","pushTarget","popTarget","VNode","elm","asyncFactory","fnContext","fnOptions","fnScopeId","componentInstance","isStatic","isRootInsert","isCloned","isOnce","asyncMeta","isAsyncPlaceholder","prototypeAccessors","defineProperties","createEmptyVNode","createTextVNode","cloneVNode","vnode","cloned","arrayProto","arrayMethods","methodsToPatch","ob","__ob__","observeArray","dep","arrayKeys","shouldObserve","toggleObserving","Observer","vmCount","protoAugment","copyAugment","walk","asRootData","isExtensible","_isVue","defineReactive$$1","customSetter","shallow","setter","childOb","dependArray","del","strats","toVal","fromVal","mergeDataOrFn","parentVal","childVal","instanceData","defaultData","mergeHook","dedupeHooks","hooks","mergeAssets","key$1","defaultStrat","normalizeProps","normalizeInject","normalized","normalizeDirectives","dirs","def$$1","mergeOptions","_base","extends","mergeField","strat","resolveAsset","warnMissing","assets","camelizedId","PascalCaseId","validateProp","propOptions","absent","booleanIndex","getTypeIndex","stringIndex","getPropDefaultValue","prevShouldObserve","_props","isSameType","expectedTypes","handleError","$parent","errorCaptured","globalHandleError","invokeWithErrorHandling","_handled","logError","isUsingMicroTask","flushCallbacks","copies","MutationObserver","setImmediate","observer","characterData","_resolve","seenObjects","traverse","_traverse","isA","isFrozen","depId","normalizeEvent","once$$1","createFnInvoker","fns","invoker","arguments$1","updateListeners","oldOn","remove$$1","createOnceHandler","old","mergeVNodeHook","hookKey","oldHook","wrappedHook","merged","extractPropsFromVNodeData","altKey","checkProp","preserve","simpleNormalizeChildren","normalizeChildren","normalizeArrayChildren","isTextNode","nestedIndex","_isVList","initProvide","_provided","initInjections","resolveInject","provideKey","provideDefault","resolveSlots","slots","name$1","isWhitespace","normalizeScopedSlots","normalSlots","prevSlots","hasNormalSlots","isStable","$stable","$key","_normalized","$hasNormal","normalizeScopedSlot","key$2","proxyNormalSlot","proxy","renderList","renderSlot","bindObject","scopedSlotFn","$scopedSlots","resolveFilter","isKeyNotMatch","expect","actual","checkKeyCodes","eventKeyCode","builtInKeyCode","eventKeyName","builtInKeyName","mappedKeyCode","bindObjectProps","asProp","isSync","loop","camelizedKey","hyphenatedKey","renderStatic","isInFor","_staticTrees","_renderProxy","markStatic","markOnce","markStaticNode","bindObjectListeners","ours","resolveScopedSlots","hasDynamicKeys","contentHashKey","bindDynamicKeys","baseObj","prependModifier","symbol","installRenderHelpers","_o","_n","_u","_g","_p","FunctionalRenderContext","contextVm","this$1","_original","isCompiled","needNormalization","injections","scopedSlots","createFunctionalComponent","mergeProps","renderContext","cloneAndMarkFunctionalResult","vnodes","componentVNodeHooks","hydrating","_isDestroyed","keepAlive","mountedNode","prepatch","createComponentInstanceForVnode","activeInstance","$mount","oldVnode","updateChildComponent","_isMounted","callHook","queueActivatedComponent","activateChildComponent","deactivateChildComponent","hooksToMerge","createComponent","baseCtor","cid","resolveAsyncComponent","createAsyncPlaceholder","resolveConstructorOptions","transformModel","nativeOn","abstract","installComponentHooks","_isComponent","_parentVnode","inlineTemplate","toMerge","_merged","mergeHook$1","SIMPLE_NORMALIZE","ALWAYS_NORMALIZE","normalizationType","alwaysNormalize","_createElement","pre","applyNS","registerDeepBindings","force","initRender","_vnode","parentVnode","_renderChildren","parentData","_parentListeners","currentRenderingInstance","renderMixin","Vue","_render","ensureCtor","comp","errorComp","resolved","owners","loadingComp","sync","timerLoading","timerTimeout","$on","forceRender","renderCompleted","reject","getFirstComponentChild","initEvents","_events","_hasHookEvent","updateComponentListeners","remove$1","$off","onceHandler","oldListeners","eventsMixin","hookRE","$once","i$1","cbs","setActiveInstance","prevActiveInstance","initLifecycle","$children","_watcher","_inactive","_directInactive","_isBeingDestroyed","lifecycleMixin","_update","prevEl","prevVnode","restoreActiveInstance","__patch__","__vue__","teardown","_watchers","mountComponent","updateComponent","Watcher","renderChildren","newScopedSlots","oldScopedSlots","hasDynamicScopedSlot","needsForceUpdate","propKeys","_propKeys","isInInactiveTree","handlers","queue","activatedChildren","waiting","flushing","resetSchedulerState","currentFlushTimestamp","getNow","timeStamp","flushSchedulerQueue","watcher","activatedQueue","updatedQueue","callActivatedHooks","callUpdatedHooks","queueWatcher","uid$2","expOrFn","isRenderWatcher","user","lazy","dirty","newDeps","depIds","newDepIds","cleanupDeps","sharedPropertyDefinition","sourceKey","initState","initProps","initMethods","initData","initComputed","initWatch","propsOptions","isRoot","computedWatcherOptions","watchers","_computedWatchers","isSSR","userDef","defineComputed","shouldCache","createComputedGetter","createGetterInvoker","createWatcher","$watch","stateMixin","dataDef","propsDef","$delete","uid$3","initMixin","_uid","initInternalComponent","vnodeComponentOptions","super","superOptions","cachedSuperOptions","modifiedOptions","resolveModifiedOptions","extendOptions","latest","sealed","sealedOptions","initUse","use","installedPlugins","_installedPlugins","install","initMixin$1","mixin","initExtend","SuperId","cachedCtors","_Ctor","Sub","initProps$1","initComputed$1","Comp","initAssetRegisters","definition","pruneCache","keepAliveInstance","cachedNode","pruneCacheEntry","current","cached$$1","patternTypes","KeepAlive","include","exclude","ref$1","builtInComponents","initGlobalAPI","configDef","util","defineReactive","observable","acceptValue","isEnumeratedAttr","isValidContentEditableValue","convertEnumeratedValue","isFalsyAttrValue","isBooleanAttr","xlinkNS","isXlink","getXlinkProp","genClassForVnode","mergeClassData","renderClass","dynamicClass","stringifyClass","stringifyArray","stringifyObject","stringified","namespaceMap","math","isHTMLTag","isSVG","unknownElementCache","HTMLUnknownElement","isTextInputType","createElement$1","namespace","createComment","newNode","referenceNode","setTextContent","setStyleScope","nodeOps","registerRef","isRemoval","refs","refInFor","emptyNode","sameVnode","sameInputType","typeA","typeB","createKeyToOldIdx","beginIdx","endIdx","createPatchFunction","backend","emptyNodeAt","createRmCb","childElm","removeNode","createElm","insertedVnodeQueue","parentElm","refElm","nested","ownerArray","setScope","createChildren","invokeCreateHooks","isReactivated","initComponent","reactivateComponent","pendingInsert","isPatchable","innerNode","activate","ref$$1","ancestor","addVnodes","startIdx","invokeDestroyHook","removeVnodes","removeAndInvokeRemoveHook","rm","updateChildren","oldCh","newCh","removeOnly","oldKeyToIdx","idxInOld","vnodeToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","canMove","patchVnode","findIdxInOld","hydrate","postpatch","invokeInsertHook","initial","isRenderedModule","inVPre","hasChildNodes","childrenMatch","firstChild","fullInvoke","isInitialPatch","isRealElement","oldElm","_leaveCb","patchable","i$2","updateDirectives","oldDir","isCreate","isDestroy","oldDirs","normalizeDirectives$1","newDirs","dirsWithInsert","dirsWithPostpatch","oldArg","callHook$1","componentUpdated","callInsert","emptyModifiers","modifiers","getRawDirName","baseModules","updateAttrs","inheritAttrs","oldAttrs","setAttr","removeAttributeNS","baseSetAttr","__ieph","blocker","updateClass","oldData","cls","transitionClass","_transitionClasses","_prevClass","target$1","klass","RANGE_TOKEN","CHECKBOX_RADIO_TOKEN","normalizeEvents","createOnceHandler$1","remove$2","useMicrotaskFix","add$1","attachedTimestamp","_wrapper","currentTarget","updateDOMListeners","svgContainer","events","updateDOMProps","oldProps","strCur","shouldUpdateValue","checkVal","composing","isNotInFocusAndDirty","isDirtyWithModifiers","notInFocus","_vModifiers","parseStyleText","listDelimiter","propertyDelimiter","normalizeStyleData","normalizeStyleBinding","bindingStyle","checkChild","styleData","emptyStyle","cssVarRE","importantRE","setProp","setProperty","normalizedName","vendorNames","capName","updateStyle","oldStaticStyle","oldStyleBinding","normalizedStyle","oldStyle","newStyle","whitespaceRE","tar","resolveTransition","autoCssTransition","enterClass","enterToClass","enterActiveClass","leaveClass","leaveToClass","leaveActiveClass","hasTransition","TRANSITION","ANIMATION","transitionProp","transitionEndEvent","animationProp","animationEndEvent","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","raf","nextFrame","addTransitionClass","transitionClasses","removeTransitionClass","whenTransitionEnds","expectedType","getTransitionInfo","propCount","transformRE","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","durations","toMs","enter","toggleDisplay","cancelled","_enterCb","appearClass","appearToClass","appearActiveClass","beforeEnter","beforeAppear","appear","afterAppear","appearCancelled","transitionNode","isAppear","startClass","toClass","beforeEnterHook","enterHook","afterEnterHook","enterCancelledHook","explicitEnterDuration","expectsCSS","userWantsControl","getHookArgumentsLength","pendingNode","_pending","isValidDuration","leave","beforeLeave","delayLeave","explicitLeaveDuration","performLeave","invokerFns","_enter","platformModules","patch","vmodel","directive","binding","_vOptions","setSelected","onCompositionStart","onCompositionEnd","prevOptions","curOptions","needReset","hasNoMatchingOption","actuallySetSelected","isMultiple","selectedIndex","locateNode","transition$$1","originalDisplay","__vOriginalDisplay","unbind","platformDirectives","transitionProps","getRealChild","compOptions","extractTransitionData","rawChild","hasParentTransition","isSameChild","oldChild","isNotTextNode","isVShowDirective","Transition","_leaving","oldRawChild","delayedLeave","moveClass","TransitionGroup","kept","prevChildren","rawChildren","transitionData","removed","c$1","hasMove","callPendingCbs","recordPosition","applyTranslation","_reflow","WebkitTransform","transitionDuration","_moveCb","_hasMove","newPos","oldPos","platformComponents","ObjectUnsubscribedErrorImpl","ObjectUnsubscribedError","SubjectSubscription","subject","observers","subscriberIndex","SubjectSubscriber","thrownError","rxSubscriber","lift","_trySubscribe","_subscribe","EMPTY","asObservable","AnonymousSubject","subscribe","setUTCDay","dirtyDay","localeWeekStartsOn","weekStartsOn","defaultWeekStartsOn","currentDay","getUTCDay","remainder","dayIndex","setUTCDate","getUTCDate","setUTCISODay","setUTCISOWeek","dirtyISOWeek","isoWeek","getUTCISOWeek","setUTCWeek","dirtyWeek","week","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_SECOND","numericPatterns","dayOfYear","hour23h","hour24h","hour11h","hour12h","minute","second","singleDigit","twoDigits","threeDigits","fourDigits","anyDigitsSigned","singleDigitSigned","twoDigitsSigned","threeDigitsSigned","fourDigitsSigned","timezonePatterns","basicOptionalMinutes","basic","basicOptionalSeconds","extended","extendedOptionalSeconds","parseNumericPattern","valueCallback","rest","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","rangeEndCentury","isPreviousCentury","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","parsers","priority","token","_options","incompatibleTokens","isTwoDigitYear","ordinalNumber","unit","_date","getUTCFullYear","normalizedTwoDigitYear","_match","_flags","firstWeekOfYear","startOfUTCISOWeek","setUTCMonth","subPriority","isLeapYear","getUTCMonth","wholeWeekDays","dayPeriod","isPM","getUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","timestampIsSet","_token","TIMEZONE_UNIT_PRIORITY","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","dirtyDateString","dirtyFormatString","dirtyReferenceDate","dateString","formatString","subFnOptions","setters","dateToSystemTimezone","tokens","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","incompatibleToken","usedToken","fullToken","parseResult","cleanEscapedString","uniquePrioritySetters","setterArray","utcDate","subMilliseconds","convertedDate","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","enhanceError","__CANCEL__","applyMixin","vuexInit","$store","devtoolHook","devtoolPlugin","_devtoolHook","targetState","replaceState","mutation","prepend","subscribeAction","deepCopy","forEachValue","partial","Module","rawModule","runtime","_children","_rawModule","rawState","namespaced","addChild","hasChild","mutations","getters","forEachChild","forEachGetter","forEachAction","forEachMutation","ModuleCollection","rawRootModule","targetModule","newModule","getNamespace","rawChildModule","isRegistered","Store","strict","_committing","_actions","_actionSubscribers","_mutations","_wrappedGetters","_modules","_modulesNamespaceMap","_subscribers","_watcherVM","_makeLocalGettersCache","dispatch","commit","installModule","resetStoreVM","useDevtools","prototypeAccessors$1","genericSubscribe","resetStore","hot","oldVm","wrappedGetters","$$state","enableStrictMode","_withCommit","rootState","parentState","getNestedState","moduleName","local","makeLocalContext","namespacedType","registerMutation","registerAction","registerGetter","noNamespace","_payload","unifyObjectStyle","makeLocalGetters","gettersProxy","splitPos","localType","rootGetters","rawGetter","_Vue","all","registerModule","preserveState","unregisterModule","hasModule","hotUpdate","newOptions","committing","mapState","normalizeNamespace","states","normalizeMap","getModuleByNamespace","vuex","mapMutations","mapGetters","mapActions","createNamespacedHelpers","isValidMap","helper","createLogger","collapsed","stateBefore","stateAfter","transformer","mutationTransformer","mut","actionFilter","actionTransformer","act","logMutations","logActions","logger","prevState","nextState","formattedTime","getFormattedTime","formattedMutation","startMessage","endMessage","formattedAction","groupCollapsed","groupEnd","getMilliseconds","repeat","times","serializedParams","isDate","hashmarkIndex","generateWarning","defaultImpl","Iterators","anObject","objectKeys","Properties","isAxiosError","lineNumber","columnNumber","isStandardBrowserEnv","originURL","urlParsingNode","resolveURL","protocol","hostname","port","pathname","requestURL","parsed","isString","parseJSON","argument","addToUnscopables","Scroll","app","removeApplication","updateApplication","scrollTarget","scrollThreshold","currentScroll","currentThreshold","isScrollingUp","previousScroll","savedScroll","thresholdMet","clippedLeft","clippedRight","collapseOnScroll","elevateOnScroll","fadeImgOnScroll","hideOnScroll","invertedScroll","scrollOffScreen","shrinkOnScroll","VToolbar","difference","iteration","increment","application","computedScrollThreshold","computedOriginalHeight","computedTransform","marginTop","canScroll","computedOpacity","computedHeight","onScroll","arch","execPath","browser","argv","cwd","chdir","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","UNSCOPABLES","ArrayPrototype","createError","defaultConstructor","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","mergeDeepProperties","axiosKeys","otherKeys","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","form","lazyValidation","errorBag","shouldValidate","watchInput","unwatch","novalidate","submit","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","includes","transformData","throwIfCancellationRequested","cancelToken","throwIfRequested","fixRegExpWellKnownSymbolLogic","requireObjectCoercible","advanceStringIndex","regExpExec","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","REPLACE","nativeReplace","maybeCallNative","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","rx","functionalReplace","fullUnicode","unicode","results","matchStr","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","groups","replacerArgs","replacement","getSubstitution","tailPos","symbols","DELAY_RIPPLE","isTouchEvent","isKeyboardEvent","calculate","localX","localY","radius","centerX","centerY","ripples","isRippleEnabled","rippleShow","rippleHide","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyboardRippleHide","updateRipple","removeListeners","wasEnabled","IS_PURE","copyright","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","bitmap","createTypedArrayConstructor","byteOffset","appendIcon","noAction","prependIcon","subGroup","listClick","matchRoute","VListItemIcon","genIcon","VListItem","inputValue","showLazyContent","isBooted","filteredChild","roundedClasses","measurableStyles","tile","VListItemActionText","VListItemContent","VListItemTitle","VListItemSubtitle","NATIVE_ARRAY_BUFFER","redefineAll","anInstance","IEEE754","arrayFill","setToStringTag","InternalStateModule","getInternalState","setInternalState","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_LENGTH","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","$DataView","$DataViewPrototype","ObjectPrototype","packIEEE754","pack","unpackIEEE754","unpack","packInt8","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","isLittleEndian","intIndex","conversion","ArrayBufferPrototype","testView","nativeSetInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","DataView","breakpointProps","offsetProps","orderProps","alignSelf","hasColClasses","CONVERT_TO_STRING","codeAt","originalArray","NATIVE_WEAK_MAP","objectHas","sharedKey","WeakMap","enforce","getterFor","wmget","wmhas","wmset","STATE","inspectSource","enforceInternalState","TEMPLATE","simple","Wrapper","NewTarget","NewTargetPrototype","extensionHeight","flat","floating","prominent","short","isExtended","isProminent","breakingProps","img","dark","light","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","toOffset","typedArrayFrom","setSpecies","getOwnPropertyDescriptorModule","inheritIfRequired","nativeDefineProperty","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG","TypedArray","TypedArrayPrototype","aTypedArrayConstructor","isTypedArray","BYTES_PER_ELEMENT","fromList","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructor","TypedArrayConstructorPrototype","exported","typedArrayOffset","$length","$len","isDark","Themeable","themeableProvide","rootIsDark","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","nBits","Cancel","expires","domain","secure","toGMTString","decodeURIComponent","hexColor","intToHex","colorToInt","activeXDocument","documentCreateElement","GT","LT","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","parentWindow","NullProtoObjectViaIFrame","iframeDocument","iframe","contentWindow","NullProtoObject","ActiveXObject","createIteratorConstructor","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","CurrentIteratorPrototype","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","makeWatcher","$data","passiveSupported","testListenerOpts","deepEqual","getNestedValue","Node","getZIndex","filtered","esc","up","down","home","backspace","pageup","pagedown","iconPath","getObjectValueByPath","optional","chunked","mergeDeep","argumentsLength","getUTCISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","rotate","circumference","genCircle","viewBoxSize","btnToggle","block","depressed","fab","outlined","retainFocusOnClick","sizeableClasses","defaultRipple","loader","setColor","isAbsoluteURL","combineURLs","baseURL","requestedURL","addMilliseconds","dirtyAmount","timestamp","amount","focused","errorCount","errorMessages","messages","rules","successMessages","validateOnBlur","errorBucket","hasColor","hasFocused","isFocused","isResetting","lazyValue","internalErrorMessages","internalSuccessMessages","validationTarget","hasSuccess","genInternalMessages","rule","hideDetails","hint","persistentHint","hasMouseDown","messagesToDisplay","validations","validation","validationResult","extraData","hasListener","mouseup","onMouseUp","hasHint","hasMessages","genSlot","isGreater","onObserve","onVisible","dirtyTypes","appendOuterIcon","autofocus","clearable","clearIcon","counterValue","filled","fullWidth","prependInnerIcon","shaped","singleLine","solo","soloInverted","suffix","badInput","labelWidth","prefixWidth","prependWidth","initialValue","isClearing","computedColor","isDirty","isSolo","labelValue","hasLabel","computedCounterValue","labelPosition","span","messagesNode","counterNode","genAffix","isInList","isInMenu","isInNav","nav","subheader","threeLine","twoLine","findIndex","_enable_super_gross_mode_that_will_cause_bad_things","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","formatDistance","addSuffix","comparison","buildFormatLongFn","dateFormats","full","long","timeFormats","dateTimeFormats","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","formatRelative","_baseDate","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","am","pm","midnight","noon","morning","afternoon","evening","night","formattingDayPeriodValues","dirtyNumber","_dirtyOptions","rem100","localize","buildMatchPatternFn","dirtyString","matchPattern","matchedString","parsePattern","buildMatchFn","matchPatterns","defaultMatchWidth","parsePatterns","defaultParseWidth","findKey","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","functionToString","checkCorrectnessOfIteration","Int8Array","iterable","condition","View","routerView","route","_routerViewCache","inactive","_routerRoot","vnodeData","routerViewDepth","cachedData","cachedComponent","configProps","fillPropsinData","registerRouteInstance","instances","propsToPass","resolveProps","encodeReserveRE","encodeReserveReplacer","commaRE","resolveQuery","extraQuery","_parseQuery","parsedQuery","parseQuery","castQueryParamValue","param","stringifyQuery","val2","trailingSlashRE","createRoute","redirectedFrom","router","fullPath","getFullPath","formatMatch","START","_stringifyQuery","isSameRoute","isObjectEqual","aKeys","bKeys","aVal","bVal","isIncludedRoute","queryIncludes","resolvePath","relative","firstChar","segment","hashIndex","queryIndex","cleanPath","isarray","pathToRegexp_1","pathToRegexp","parse_1","compile_1","compile","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","defaultDelimiter","delimiter","escaped","modifier","asterisk","escapeGroup","escapeString","encodeURIComponentPretty","encodeURI","encodeAsterisk","attachKeys","sensitive","regexpToRegexp","arrayToRegexp","stringToRegexp","endsWithDelimiter","regexpCompileCache","fillParams","routeMsg","filler","pathMatch","normalizeLocation","params$1","rawPath","parsedPath","basePath","toTypes","eventTypes","Link","ariaCurrentValue","$router","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","guardEvent","scopedSlot","navigate","isExactActive","findAnchor","aData","handler$1","event$1","aAttrs","ctrlKey","defaultPrevented","installed","registerInstance","callVal","_router","history","_route","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","pathList","pathMap","nameMap","addRouteRecord","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","compileRouteRegex","redirect","childMatchAs","alias","aliases","aliasRoute","createMatcher","addRoutes","currentRoute","_createRoute","paramNames","record$1","originalRedirect","resolveRecordPath","resolvedPath","aliasedPath","aliasedMatch","aliasedRecord","Time","genStateKey","getStateKey","setStateKey","positionStore","setupScroll","scrollRestoration","protocolAndPath","absolutePath","stateCopy","handlePopState","handleScroll","isPop","behavior","scrollBehavior","getScrollPosition","shouldScroll","scrollToPosition","saveScrollPosition","pageXOffset","pageYOffset","getElementPosition","docEl","docRect","isValidPosition","normalizePosition","normalizeOffset","hashStartsWithNumberRE","scrollTo","supportsPushState","pushState","runQueue","NavigationFailureType","redirected","aborted","duplicated","createNavigationRedirectedError","createRouterError","stringifyRoute","createNavigationDuplicatedError","createNavigationCancelledError","createNavigationAbortedError","_isRouter","propertiesToLog","isError","isNavigationFailure","resolveAsyncComponents","hasAsync","flatMapComponents","resolvedDef","isESModule","History","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","baseEl","resolveQueue","activated","deactivated","extractGuards","guards","guard","extractGuard","extractLeaveGuards","bindGuard","extractUpdateHooks","extractEnterGuards","isValid","bindEnterGuard","poll","listen","onReady","errorCb","transitionTo","onAbort","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","beforeHooks","postEnterCbs","enterGuards","resolveHooks","setupListeners","teardownListeners","cleanupListener","HTML5History","_startLocation","getLocation","expectScroll","supportsScroll","handleRoutingEvent","go","fromRoute","getCurrentLocation","decodeURI","HashHistory","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","VueRouter","apps","matcher","registerHook","createHref","handleInitialScroll","routeOrError","beforeEach","beforeResolve","afterEach","forward","getMatchedComponents","normalizedTo","srgbForwardMatrix","srgbForwardTransform","srgbReverseMatrix","srgbReverseTransform","xyz","elevation","CancelToken","executor","resolvePromise","IntersectionObserver","isIntersecting","Intersect","isLE","mLen","nBytes","eLen","regexpFlags","stickyHelpers","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","PATCH","reCopy","sticky","charsAdded","strCopy","multiline","feature","detection","POLYFILL","NATIVE","startOfUTCISOWeekYear","fourthOfJanuary","VCardActions","VCardSubtitle","VCardText","VCardTitle","Attributes","eager","hasContent","takeUntil","TakeUntilOperator","takeUntilSubscriber","TakeUntilSubscriber","notifierSubscription","seenValue","notifyNext","notifyComplete","getIteratorMethod","isArrayIteratorMethod","mapfn","mapping","iteratorMethod","Proxyable","fluid","UnsubscriptionErrorImpl","UnsubscriptionError","_subscriptions","_ctorUnsubscribe","parent_1","isFunction","flattenUnsubscriptionErrors","subscription","subscriptions","subscriptionIndex","errs","NativePromise","speciesConstructor","promiseResolve","NON_GENERIC","real","onFinally","colorName","colorModifier","dotAll","aspectRatio","computedAspectRatio","hasIntersect","intersect","contain","gradient","lazySrc","rootMargin","srcset","currentSrc","calculatedAspectRatio","naturalWidth","normalisedSrc","aspect","backgroundImage","backgroundPosition","loadImage","lazyImg","pollForSize","naturalHeight","PrototypeOfArrayIteratorPrototype","arrayIterator","hover","raised","addLeadingZeros","formatters","signedYear","dayPeriodEnumValue","numberOfDigits","milliseconds","fractionalSeconds","MILLISECONDS_IN_DAY","getUTCDayOfYear","startOfYearTimestamp","dayPeriodEnum","lightFormatters","signedWeekYear","weekYear","isoWeekYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","_localize","originalDate","_originalDate","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","dirtyDelimiter","absOffset","dirtyFormatStr","formatStr","formatterOptions","formatter","settle","buildFullPath","parseHeaders","isURLSameOrigin","requestData","requestHeaders","auth","username","unescape","Authorization","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseData","onabort","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","onDownloadProgress","onUploadProgress","upload","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","ieee754","typedArraySupport","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","encodingOrOffset","fromArrayBuffer","fromString","fromObject","assertSize","isEncoding","fromArrayLike","isnan","SlowBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","INSPECT_MAX_BYTES","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","_arr","MAX_ARGUMENTS_LENGTH","codePoints","toHex","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleBE","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","units","leadSurrogate","byteArray","hi","lo","IndexedObject","arraySpeciesCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","specificCreate","boundFunction","PREFERRED_STRING","valueOf","ignoreDuplicateOf","pipe","URLSearchParams","product","stripBOM","SHARED","EXISTS","newPromiseCapability","promiseCapability","fromEvent","resultSelector","setupSubscription","sourceObj","isEventTarget","source_1","isJQueryStyleEventEmitter","source_2","isNodeStyleEventEmitter","source_3","addListener","removeListener","NEVER","refCount","RefCountOperator","connectable","_refCount","refCounter","connection","connect","RefCountSubscriber","sharedConnection","_connection","ConnectableObservable","subjectFactory","_isComplete","getSubject","_subject","connectableObservableDescriptor","connectableProto","ConnectableSubscriber","multicast","subjectOrSubjectFactory","MulticastOperator","Vue$1","shareSubjectFactory","share","isObservable","isObserver","getKey","rxMixin","domStreams","observableMethods","methodName","$createObservableMethod","obs","$observables","_subscription","streamDirective","streamName","modifiersFuncs","prevent","modifiersExists","onNext","native","$eventToObservable","fromEventArgs","_rxHandles","_handle","watchAsObservable","obs$","_unwatch","fromDOMEvent","listener","subscribeTo","eventToObservable","evtName","evtNames","eventPairs","pair","createObservableMethod","passContext","VueRx","$watchAsObservable","$fromDOMEvent","$subscribeTo","createInstance","defaultConfig","axios","promises","spread","subscribeToPromise","getSymbolIterator","subscribeToIterable","return","subscribeToObservable","isArrayLike","SimpleInnerSubscriber","notifyError","SimpleOuterSubscriber","innerSubscribe","innerSubscriber","nativePropertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","CORRECT_SETTER","TAG","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","stringMethod","regexMethod","FinallyOperator","FinallySubscriber","createMessage","generateComponentTrace","newMessage","consoleWarn","consoleError","classifyRE","classify","formatComponentName","includeFile","currentRecursiveSequence","styleList","styleProp","parseStyle","styleMap","mergeTarget","mergeClasses","mergeStyles","mergeListeners","selectable","isClickable","genAttrs","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","DOMIterables","ArrayIteratorMethods","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","METHOD_NAME","normalizeArray","allowAboveRoot","basename","matchedSlash","xs","resolvedAbsolute","isAbsolute","trailingSlash","paths","fromParts","toParts","samePartsLength","outputParts","hasRoot","extname","startDot","startPart","preDotState","CORRECT_PROTOTYPE_GETTER","defineIterator","ARRAY_ITERATOR","iterated","kind","Arguments","DEFAULT_ADDITIONAL_DIGITS","patterns","dateTimeDelimiter","timeZoneDelimiter","timezone","dateRegex","timeRegex","timezoneRegex","parseISO","additionalDigits","dateStrings","splitDateString","parseYearResult","parseYear","restDateString","parseTime","parseTimezone","timeString","century","isWeekDate","parseDateUnit","validateWeekDate","dayOfISOWeekYear","validateDate","validateDayOfYearDate","parseTimeUnit","validateTime","timezoneString","validateTimezone","fourthOfJanuaryDay","daysInMonths","_year","_hours","relativeURL","canReportError","closed_1","toSubscriber","nextOrObserver","pipeFromArray","_isScalar","sink","promiseCtor","getPromiseCtor","operations","toPromise","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","isPrototypeOf","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Int16Array","Float32Array","Float64Array","aTypedArray","ARRAY","exportTypedArrayMethod","exportTypedArrayStaticMethod","project","MapOperator","MapSubscriber","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","differenceInCalendarMonths","yearDiff","monthDiff","differenceInMonths","isLastMonthNotFull","differenceInMilliseconds","differenceInSeconds","cloneObject","dirtyObject","MINUTES_IN_DAY","MINUTES_IN_ALMOST_TWO_DAYS","MINUTES_IN_MONTH","MINUTES_IN_TWO_MONTHS","dirtyBaseDate","localizeOptions","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","years","formatDistanceToNow","PromiseCapability","$$resolve","$$reject","Toggleable","registerComponents","vuetify","badge","dataIterator","noResultsText","loadingText","dataTable","itemsPerPageText","ariaLabel","sortDescending","sortAscending","sortNone","activateNone","activateDescending","activateAscending","sortBy","dataFooter","itemsPerPageAll","firstPage","lastPage","datePicker","nextMonthAriaLabel","nextYearAriaLabel","prevMonthAriaLabel","prevYearAriaLabel","noDataText","carousel","calendar","moreEvents","counterSize","timePicker","pagination","mobileBreakpoint","scrollBarWidth","thresholds","sm","md","lg","icons","iconfont","lang","en","disable","cspNonce","customProperties","minifyTheme","themeCache","variations","primary","secondary","accent","warning","framework","defaultPreset","userPreset","preset","globalPreset","bar","insetFooter","acc","xl","xsOnly","smOnly","smAndDown","smAndUp","mdOnly","mdAndDown","mdAndUp","lgOnly","lgAndDown","lgAndUp","xlOnly","mobile","resizeTimeout","onResize","ssr","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","totalOffset","_settings","appOffset","getContainer","goTo","isDrawer","isClipped","startTime","targetLocation","getOffset","startLocation","ease","timeElapsed","currentTime","checkboxOn","checkboxOff","checkboxIndeterminate","menu","subgroup","radioOn","radioOff","ratingEmpty","ratingFull","ratingHalf","unfold","iconSet","convertToComponentDeclarations","faSvg","presets","LANG_PREFIX","getTranslation","usingDefault","shortKey","translation","translator","cielabForwardTransform","cielabReverseTransform","transformedY","Ln","lab","isItem","variant","colors","parsedTheme","genVariations","anchor","genBaseColor","genVariantColor","genColorVariableName","genColorVariable","cssVar","variablesCss","aColor","variants","variantValue","lighten","darken","vueMeta","fillVariant","styleEl","oldDark","defaultTheme","metaKeyName","getOptions","metaInfo","vuetifyStylesheet","nonce","addApp","generatedStyles","currentTheme","isHydrating","service","Service","catchError","CatchOperator","caught","CatchSubscriber","err2","innerSubscription","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","eject","argStr","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","availableProps"],"mappings":"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AQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IA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CA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGRntE,EAAyC,cAAc8K,SAAS,aAAc,CAC1E,wBACA,CAAE9+K,KAAM,SAAU++L,sBAAuB,aACzC,CACI/+L,KAAM,eACNX,QAAS,OACT0uL,QAAS,CAAC,OAAQ,UAAW,WAAY,UAAW,SAExD,CACI/tL,KAAM,WACN+tL,QAAS,WACL,OAAOozD,KAEX9hP,QAAS,OAEb,CAAEW,KAAM,+BAAgCX,SAAU,GAClD,CAAEW,KAAM,+BAAgCX,SAAU,GAClD,CAAEW,KAAM,sBAAuBX,SAAS,GACxC,CAAEW,KAAM,WAAY4+H,SAAS,GAC7B,CAAE5+H,KAAM,aAAc4+H,SAAS,GAC/B,CAAE5+H,KAAM,WAAY4+H,SAAS,GAC7B,CAAE5+H,KAAM,oBAAqB4+H,SAAS,GACtC,CAAE5+H,KAAM,aAAc4+H,SAAS,GAC/B,CAAE5+H,KAAM,eAAgB4+H,SAAS,GACjC,CAAE5+H,KAAM,gBAAiB4+H,SAAS,GAClC,CAAE5+H,KAAM,aAAc4+H,SAAS,KAChC,WACC,OAAO,IAAIsiH,EAAwB,MACpC,YACHE,EAA8C,mBAAmB7jG,SAASi+F,iBAAiB,cAAc,SAAUx7O,GAC/G,OAAO,IAAIkhP,EAAwBlhP,OAMjC;;;;0CAK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,QACA,QACA,SACA,WACA,QACA,MACA,OACA,OACA,MACA,SAGR,CACI/tL,KAAM,cACNugN,SAAU,EACVG,UAAW,YACXt8B,UAAW,SAAUv3J,GACjB,QAAKA,GAEEA,EAAIs/O,cAGnB,CACInsQ,KAAM,iBACNX,QAAS,UACT0uL,QAAS,CAAC,UAAW,SAAU,YAC/B2yB,UAAW,YACXt8B,UAAW,SAAUv3J,GACjB,QAAKA,GAEEA,EAAIs/O,cAGnB,CACInsQ,KAAM,eACNmsK,SAAU,CACN,OACA,mBACA,aACA,kBACA,cACA,mBACA,WACA,qBACA,WACA,eACA,mBACA,eACA,iBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,UACA,eACA,cACA,UACA,gBACA,qBACA,iBACA,YACA,SACA,eACA,cACA,SACA,UACA,uBACA,qBACA,WACA,OACA,WACA,aACA,YACA,MACA,MACA,QACA,MACA,mBACA,eACA,gBACA,YACA,mBACA,mBACA,gBACA,QACA,SAGR,CACInsK,KAAM,MACN0gN,UAAW,YACXt8B,UAAW,SAAUv3J,GACjB,QAASA,GAAOA,EAAI8/O,cAExBnsD,uBAAwB,SAAU3zL,EAAKugP,GACnCA,EAAex+J,UAAY/hF,EAAI+hF,YAGvC,CACI5uG,KAAM,MACN0gN,UAAW,YACXt8B,UAAW,SAAUv3J,GACjB,QAASA,GAAOA,EAAI8/O,cAExBnsD,uBAAwB,SAAU3zL,EAAKugP,GACnCA,EAAex+J,UAAY/hF,EAAI+hF,YAGvC,CACI5uG,KAAM,gCACNy9M,SAAU,QACViD,UAAW,YACXt8B,UAAW,SAAUv3J,GACjB,QAASA,GAAOA,EAAI8/O,eAG5B,CACI3sQ,KAAM,gCACNy9M,SAAU,QACViD,UAAW,YACXt8B,UAAW,SAAUv3J,GACjB,QAASA,GAAOA,EAAI8/O,eAG5B,CACI3sQ,KAAM,eACN++L,sBAAuB,kBACvB2hB,UAAW,YACXt8B,UAAW,SAAUv3J,GACjB,QAASA,GAAOA,EAAI8/O,eAG5B,CACI3sQ,KAAM,eACN++L,sBAAuB,kBACvB2hB,UAAW,YACXt8B,UAAW,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","file":"js/chunk-vendors.d08531d2.js","sourcesContent":["var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","import { FunctionalComponentOptions, VNode, VNodeData } from 'vue'\nimport mergeData from '../../util/mergeData'\n\nfunction mergeTransitions (\n dest: Function | Function[] = [],\n ...transitions: (Function | Function[])[]\n) {\n /* eslint-disable-next-line no-array-constructor */\n return Array().concat(dest, ...transitions)\n}\n\nexport function createSimpleTransition (\n name: string,\n origin = 'top center 0',\n mode?: string\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n group: {\n type: Boolean,\n default: false,\n },\n hideOnLeave: {\n type: Boolean,\n default: false,\n },\n leaveAbsolute: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: mode,\n },\n origin: {\n type: String,\n default: origin,\n },\n },\n\n render (h, context): VNode {\n const tag = `transition${context.props.group ? '-group' : ''}`\n const data: VNodeData = {\n props: {\n name,\n mode: context.props.mode,\n },\n on: {\n beforeEnter (el: HTMLElement) {\n el.style.transformOrigin = context.props.origin\n el.style.webkitTransformOrigin = context.props.origin\n },\n },\n }\n\n if (context.props.leaveAbsolute) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => (el.style.position = 'absolute'))\n }\n if (context.props.hideOnLeave) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => (el.style.display = 'none'))\n }\n\n return h(tag, mergeData(context.data, data), context.children)\n },\n }\n}\n\nexport function createJavascriptTransition (\n name: string,\n functions: Record,\n mode = 'in-out'\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n mode: {\n type: String,\n default: mode,\n },\n },\n\n render (h, context): VNode {\n return h(\n 'transition',\n mergeData(context.data, {\n props: { name },\n on: functions,\n }),\n context.children\n )\n },\n }\n}\n","import { upperFirst } from '../../util/helpers'\n\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: (Node & ParentNode & HTMLElement) | null\n _initialStyle: {\n transition: string\n overflow: string\n height?: string | null\n width?: string | null\n }\n}\n\nexport default function (expandedParentClass = '', x = false) {\n const sizeProperty = x ? 'width' : 'height' as 'width' | 'height'\n const offsetProperty = `offset${upperFirst(sizeProperty)}` as 'offsetHeight' | 'offsetWidth'\n\n return {\n beforeEnter (el: HTMLExpandElement) {\n el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null\n el._initialStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n },\n\n enter (el: HTMLExpandElement) {\n const initialStyle = el._initialStyle\n\n el.style.setProperty('transition', 'none', 'important')\n // Hide overflow to account for collapsed margins in the calculated height\n el.style.overflow = 'hidden'\n const offset = `${el[offsetProperty]}px`\n\n el.style[sizeProperty] = '0'\n\n void el.offsetHeight // force reflow\n\n el.style.transition = initialStyle.transition\n\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass)\n }\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offset\n })\n },\n\n afterEnter: resetStyles,\n enterCancelled: resetStyles,\n\n leave (el: HTMLExpandElement) {\n el._initialStyle = {\n transition: '',\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n\n el.style.overflow = 'hidden'\n el.style[sizeProperty] = `${el[offsetProperty]}px`\n void el.offsetHeight // force reflow\n\n requestAnimationFrame(() => (el.style[sizeProperty] = '0'))\n },\n\n afterLeave,\n leaveCancelled: afterLeave,\n }\n\n function afterLeave (el: HTMLExpandElement) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass)\n }\n resetStyles(el)\n }\n\n function resetStyles (el: HTMLExpandElement) {\n const size = el._initialStyle[sizeProperty]\n el.style.overflow = el._initialStyle.overflow\n if (size != null) el.style[sizeProperty] = size\n delete el._initialStyle\n }\n}\n","import {\n createSimpleTransition,\n createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VCarouselTransition = createSimpleTransition('carousel-transition')\nexport const VCarouselReverseTransition = createSimpleTransition('carousel-reverse-transition')\nexport const VTabTransition = createSimpleTransition('tab-transition')\nexport const VTabReverseTransition = createSimpleTransition('tab-reverse-transition')\nexport const VMenuTransition = createSimpleTransition('menu-transition')\nexport const VFabTransition = createSimpleTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogTransition = createSimpleTransition('dialog-transition')\nexport const VDialogBottomTransition = createSimpleTransition('dialog-bottom-transition')\nexport const VFadeTransition = createSimpleTransition('fade-transition')\nexport const VScaleTransition = createSimpleTransition('scale-transition')\nexport const VScrollXTransition = createSimpleTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createSimpleTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createSimpleTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createSimpleTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition')\n\n// Javascript transitions\nexport const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', true))\n\nexport default {\n $_vuetify_subcomponents: {\n VCarouselTransition,\n VCarouselReverseTransition,\n VDialogTransition,\n VDialogBottomTransition,\n VFabTransition,\n VFadeTransition,\n VMenuTransition,\n VScaleTransition,\n VScrollXTransition,\n VScrollXReverseTransition,\n VScrollYTransition,\n VScrollYReverseTransition,\n VSlideXTransition,\n VSlideXReverseTransition,\n VSlideYTransition,\n VSlideYReverseTransition,\n VTabReverseTransition,\n VTabTransition,\n VExpandTransition,\n VExpandXTransition,\n },\n}\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","var toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\n\n// `ToIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function hostReportError(err) {\n setTimeout(function () { throw err; }, 0);\n}\n//# sourceMappingURL=hostReportError.js.map\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","import './VGrid.sass'\n\nimport Vue, { PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\n },\n})\n","import VSheet from './VSheet'\n\nexport { VSheet }\nexport default VSheet\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */\nvar XLSX = {};\nfunction make_xlsx_lib(XLSX){\nXLSX.version = '0.16.7';\nvar current_codepage = 1200, current_ansi = 1252;\n/*global cptable:true, window */\nif(typeof module !== \"undefined\" && typeof require !== 'undefined') {\n\tif(typeof cptable === 'undefined') {\n\t\tif(typeof global !== 'undefined') global.cptable = require('./dist/cpexcel.js');\n\t\telse if(typeof window !== 'undefined') window.cptable = require('./dist/cpexcel.js');\n\t}\n}\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950 ];\nfor(var i = 0; i <= 8; ++i) VALID_ANSI.push(1250 + i);\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n0: 1252, /* ANSI */\n1: 65001, /* DEFAULT */\n2: 65001, /* SYMBOL */\n77: 10000, /* MAC */\n128: 932, /* SHIFTJIS */\n129: 949, /* HANGUL */\n130: 1361, /* JOHAB */\n134: 936, /* GB2312 */\n136: 950, /* CHINESEBIG5 */\n161: 1253, /* GREEK */\n162: 1254, /* TURKISH */\n163: 1258, /* VIETNAMESE */\n177: 1255, /* HEBREW */\n178: 1256, /* ARABIC */\n186: 1257, /* BALTIC */\n204: 1251, /* RUSSIAN */\n222: 874, /* THAI */\n238: 1250, /* EASTEUROPE */\n255: 1252, /* OEM */\n69: 6969 /* MISC */\n});\n\nvar set_ansi = function(cp) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data) {\n\tvar o = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data) {\n\tvar o = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data) {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x) { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x) { return String.fromCharCode(x); };\nif(typeof cptable !== 'undefined') {\n\tset_cp = function(cp) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x) {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x) {\n\t\treturn cptable.utils.decode(current_ansi, [x])[0];\n\t};\n}\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64 = (function make_b64(){\n\tvar map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\treturn {\n\t\tencode: function(input) {\n\t\t\tvar o = \"\";\n\t\t\tvar c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;\n\t\t\tfor(var i = 0; i < input.length; ) {\n\t\t\t\tc1 = input.charCodeAt(i++);\n\t\t\t\te1 = (c1 >> 2);\n\n\t\t\t\tc2 = input.charCodeAt(i++);\n\t\t\t\te2 = ((c1 & 3) << 4) | (c2 >> 4);\n\n\t\t\t\tc3 = input.charCodeAt(i++);\n\t\t\t\te3 = ((c2 & 15) << 2) | (c3 >> 6);\n\t\t\t\te4 = (c3 & 63);\n\t\t\t\tif (isNaN(c2)) { e3 = e4 = 64; }\n\t\t\t\telse if (isNaN(c3)) { e4 = 64; }\n\t\t\t\to += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\n\t\t\t}\n\t\t\treturn o;\n\t\t},\n\t\tdecode: function b64_decode(input) {\n\t\t\tvar o = \"\";\n\t\t\tvar c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;\n\t\t\tinput = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\t\t\tfor(var i = 0; i < input.length;) {\n\t\t\t\te1 = map.indexOf(input.charAt(i++));\n\t\t\t\te2 = map.indexOf(input.charAt(i++));\n\t\t\t\tc1 = (e1 << 2) | (e2 >> 4);\n\t\t\t\to += String.fromCharCode(c1);\n\n\t\t\t\te3 = map.indexOf(input.charAt(i++));\n\t\t\t\tc2 = ((e2 & 15) << 4) | (e3 >> 2);\n\t\t\t\tif (e3 !== 64) { o += String.fromCharCode(c2); }\n\n\t\t\t\te4 = map.indexOf(input.charAt(i++));\n\t\t\t\tc3 = ((e3 & 3) << 6) | e4;\n\t\t\t\tif (e4 !== 64) { o += String.fromCharCode(c3); }\n\t\t\t}\n\t\t\treturn o;\n\t\t}\n\t};\n})();\nvar has_buf = (typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node);\n\nvar Buffer_from = function(){};\n\nif(typeof Buffer !== 'undefined') {\n\tvar nbfs = !Buffer.from;\n\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\tBuffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t// $FlowIgnore\n\tif(!Buffer.alloc) Buffer.alloc = function(n) { return new Buffer(n); };\n\t// $FlowIgnore\n\tif(!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) { return new Buffer(n); };\n}\n\nfunction new_raw_buf(len) {\n\t/* jshint -W056 */\n\treturn has_buf ? Buffer.alloc(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len) {\n\t/* jshint -W056 */\n\treturn has_buf ? Buffer.allocUnsafe(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s) {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x){ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s) {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data) {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data) {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data) {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\nvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = function(bufs) { return [].concat.apply([], bufs); };\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nvar SSF = ({});\nvar make_ssf = function make_ssf(SSF){\nSSF.version = '0.11.2';\nfunction _strrev(x) { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction fill(c,l) { var o = \"\"; while(o.length < l) o+=c; return o; }\nfunction pad0(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v,d){var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v,d){var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v,d){var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = Math.pow(2,32);\nfunction pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\nfunction isgeneral(s, i) { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction init_table(t) {\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n}\n\nvar table_fmt = {};\ninit_table(table_fmt);\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar default_map = [];\nvar defi = 0;\n\n// 5 -> 37 ... 8 -> 40\nfor(defi = 5; defi <= 8; ++defi) default_map[defi] = 32 + defi;\n\n// 23 -> 0 ... 26 -> 0\nfor(defi = 23; defi <= 26; ++defi) default_map[defi] = 0;\n\n// 27 -> 14 ... 31 -> 14\nfor(defi = 27; defi <= 31; ++defi) default_map[defi] = 14;\n// 50 -> 14 ... 58 -> 14\nfor(defi = 50; defi <= 58; ++defi) default_map[defi] = 14;\n\n// 59 -> 1 ... 62 -> 4\nfor(defi = 59; defi <= 62; ++defi) default_map[defi] = defi - 58;\n// 67 -> 9 ... 68 -> 10\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 58;\n// 72 -> 14 ... 75 -> 17\nfor(defi = 72; defi <= 75; ++defi) default_map[defi] = defi - 58;\n\n// 69 -> 12 ... 71 -> 14\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 57;\n\n// 76 -> 20 ... 78 -> 22\nfor(defi = 76; defi <= 78; ++defi) default_map[defi] = defi - 56;\n\n// 79 -> 45 ... 81 -> 47\nfor(defi = 79; defi <= 81; ++defi) default_map[defi] = defi - 34;\n\n// 82 -> 0 ... 65536 -> 0 (omitted)\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar default_str = [];\n\n// 5 -- Currency, 0 decimal, black negative\ndefault_str[5] = default_str[63] = '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)';\n// 6 -- Currency, 0 decimal, red negative\ndefault_str[6] = default_str[64] = '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)';\n// 7 -- Currency, 2 decimal, black negative\ndefault_str[7] = default_str[65] = '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)';\n// 8 -- Currency, 2 decimal, red negative\ndefault_str[8] = default_str[66] = '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)';\n\n// 41 -- Accounting, 0 decimal, No Symbol\ndefault_str[41] = '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)';\n// 42 -- Accounting, 0 decimal, $ Symbol\ndefault_str[42] = '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)';\n// 43 -- Accounting, 2 decimal, No Symbol\ndefault_str[43] = '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)';\n// 44 -- Accounting, 2 decimal, $ Symbol\ndefault_str[44] = '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)';\nfunction frac(x, D, mixed) {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction parse_date_code(v,opts,b2) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nSSF.parse_date_code = parse_date_code;\nvar basedate = new Date(1899, 11, 31, 0, 0, 0);\nvar dnthresh = basedate.getTime();\nvar base1904 = new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v, date1904) {\n\tvar epoch = v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= base1904) epoch += 24*60*60*1000;\n\treturn (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* The longest 32-bit integer text is \"-4294967296\", exactly 11 chars */\nfunction general_fmt_int(v) { return v.toString(10); }\nSSF._general_int = general_fmt_int;\n\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\nvar general_fmt_num = (function make_general_fmt_num() {\n\tvar trailing_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)$/;\n\tfunction strip_decimal(o) {\n\t\treturn (o.indexOf(\".\") == -1) ? o : o.replace(trailing_zeroes_and_decimal, \"$1\");\n\t}\n\n\t/* General Exponential always shows 2 digits exp and trims the mantissa */\n\tvar mantissa_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/;\n\tvar exp_with_single_digit = /(E[+-])(\\d)$/;\n\tfunction normalize_exp(o) {\n\t\tif(o.indexOf(\"E\") == -1) return o;\n\t\treturn o.replace(mantissa_zeroes_and_decimal,\"$1E\").replace(exp_with_single_digit,\"$10$2\");\n\t}\n\n\t/* exponent >= -9 and <= 9 */\n\tfunction small_exp(v) {\n\t\tvar w = (v<0?12:11);\n\t\tvar o = strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\t\to = v.toPrecision(10); if(o.length <= w) return o;\n\t\treturn v.toExponential(5);\n\t}\n\n\t/* exponent >= 11 or <= -10 likely exponential */\n\tfunction large_exp(v) {\n\t\tvar o = strip_decimal(v.toFixed(11));\n\t\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n\t}\n\n\tfunction general_fmt_num_base(v) {\n\t\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\t\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\t\telse if(Math.abs(V) <= 9) o = small_exp(v);\n\t\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\t\telse o = large_exp(v);\n\n\t\treturn strip_decimal(normalize_exp(o.toUpperCase()));\n\t}\n\n\treturn general_fmt_num_base;\n})();\nSSF._general_num = general_fmt_num;\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction general_fmt(v, opts) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : general_fmt_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\nSSF._general = general_fmt;\nfunction fix_hijri(date, o) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n/*jshint -W086 */\nfunction write_date(type, fmt, val, ss0) {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\nif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n/*jshint +W086 */\nfunction commaify(s) {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar write_num = (function make_write_num(){\nvar pct1 = /%/g;\nfunction write_num_pct(type, fmt, val){\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_cm(type, fmt, val){\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_exp(fmt, val){\n\tvar o;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r, aval, sign) {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r, aval, sign) {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str) {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val, d) { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val, d) {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val, d) {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val) {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type, fmt, val) {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\no = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\nreturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\nSSF.is_date = fmt_is_date;\nfunction eval_fmt(fmt, v, opts, flen) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? \"P\" : \"A\"; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(abstime)) {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\nif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\nif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\nout[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\nSSF._eval = eval_fmt;\nvar cfregex = /\\[[=<>]/;\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f, v) {\n\tvar fmt = split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction format(fmt,v,o) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[default_map[fmt]]) || table_fmt[default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(isgeneral(sfmt,0)) return general_fmt(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(isgeneral(f[1])) return general_fmt(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction load_entry(fmt, idx) {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\nfor(var i = 0; i < 0x0188; ++i) {\nif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\nif(idx < 0) idx = 0x187;\n\t}\ntable_fmt[idx] = fmt;\n\treturn idx;\n}\nSSF.load = load_entry;\nSSF._table = table_fmt;\nSSF.get_table = function get_table() { return table_fmt; };\nSSF.load_table = function load_table(tbl) {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) load_entry(tbl[i], i);\n};\nSSF.init_table = init_table;\nSSF.format = format;\n};\nmake_ssf(SSF);\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*{[string]:string}*/ = ({\n\t\"General Number\": \"General\",\n\t\"General Date\": SSF._table[22],\n\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\"Medium Date\": SSF._table[15],\n\t\"Short Date\": SSF._table[14],\n\t\"Long Time\": SSF._table[19],\n\t\"Medium Time\": SSF._table[18],\n\t\"Short Time\": SSF._table[20],\n\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"Fixed\": SSF._table[2],\n\t\"Standard\": SSF._table[4],\n\t\"Percent\": SSF._table[10],\n\t\"Scientific\": SSF._table[11],\n\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n});\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n});\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF) {\n\tvar fmt = typeof dateNF == \"number\" ? SSF._table[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str, dateNF, match) {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\nvar DO_NOT_EXPORT_CFB = true;\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32;\n(function (factory) {\n\t/*jshint ignore:start */\n\t/*eslint-disable */\n\tfactory(CRC32 = {});\n\t/*eslint-enable */\n\t/*jshint ignore:end */\n}(function(CRC32) {\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table() {\n\tvar c = 0, table = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T = signed_crc_table();\nfunction crc32_bstr(bstr, seed) {\n\tvar C = seed ^ -1, L = bstr.length - 1;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t}\n\tif(i === L) C = (C>>>8) ^ T[(C ^ bstr.charCodeAt(i))&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf(buf, seed) {\n\tif(buf.length > 10000) return crc32_buf_8(buf, seed);\n\tvar C = seed ^ -1, L = buf.length - 3;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+3) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf_8(buf, seed) {\n\tvar C = seed ^ -1, L = buf.length - 7;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+7) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_str(str, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L=str.length, c, d; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T[(C ^ c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn C ^ -1;\n}\nCRC32.table = T;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\n}));\n/* [MS-CFB] v20171201 */\nvar CFB = (function _CFB(){\nvar exports = {};\nexports.version = '1.1.4';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l, r) {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf, date) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf) {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob) {\n\tprep_blob(blob, 0);\n\tvar o = {};\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs;\nfunction get_fs() { return fs || (fs = require('fs')); }\nfunction parse(file, options) {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob = file.slice(0,512);\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files = {}, Paths = [], FileIndex = [], FullPaths = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob) {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob, mver) {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file, ssz) {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI, FP, Paths) {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad = [], q = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry, payload, mini) {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size));\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0));\n\treturn (bconcat(o).slice(0, entry.size));\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\n\tvar q = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tsleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\n\tvar buf = [], buf_chain = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors, dir_start, fat_addrs, ssz) {\n\tvar sl = sectors.length, sector_list = ([]);\n\tvar chkd = [], buf = [], buf_chain = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])});\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob = sector.slice(i, i+128);\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size));\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob, offset) {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename, options) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob, options) {\n\tswitch(options && options.type || \"base64\") {\n\t\tcase \"file\": return read_file(blob, options);\n\t\tcase \"base64\": return parse(s2a(Base64.decode(blob)), options);\n\t\tcase \"binary\": return parse(s2a(blob), options);\n\t}\n\treturn parse(blob, options);\n}\n\nfunction init_cfb(cfb, opts) {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 });\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb) {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb, f) {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\tvar data = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = false;\n\t\tfor(j = 0; j < data.length; ++j) if(data[j][0] === dad) s = true;\n\t\tif(!s) data.push([dad, ({\n\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\ttype: 1,\n\t\t\tclsid: HEADER_CLSID,\n\t\t\tct: now, mt: now,\n\t\t\tcontent: null\n\t\t})]);\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb, options) {\n\tvar _opts = options || {};\n\trebuild_cfb(cfb);\n\tif(_opts.fileType == 'zip') return write_zip(cfb, _opts);\n\tvar L = (function(cfb){\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\nvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w) {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\nflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm = (i === 0 && _opts.root) || file.name;\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size > 0 && file.size < 0x1000) {\n\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t}\n\t}\n\twhile(o.l < o.length) o.write_shift(1, 0);\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb, path) {\n\tvar UCFullPaths = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath = path.toUpperCase();\n\tvar w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb, filename, options) {\n\tget_fs();\n\tvar o = _write(cfb, options);\nfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o) {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb, options) {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type) {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o)); return o;\n\t\tcase \"binary\": return a2s(o);\n\t\tcase \"base64\": return Base64.encode(a2s(o));\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < b.length; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}var _deflate = (function() {\nvar _deflateRaw = (function() {\n\treturn function deflateRaw(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\t/* TODO: this is only type 0 stored */\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t};\n})();\n\nreturn function(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n};\n})();\n/* modified inflate function also moves original read head */\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX) {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\tif(typeof data.copy === 'function') {\n\t\t\t\t// $FlowIgnore\n\t\t\t\tdata.copy(outbuf, woff, boff>>>3, (boff>>>3)+sz);\n\t\t\t\twoff += sz; boff += 8*sz;\n\t\t\t} else while(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\tcontinue;\n\t\t} else if((header >>> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\treturn [usz ? outbuf : outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file, options) {\n\tvar blob = file;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex = [], FullPaths = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(blob.slice(blob.l+namelen, blob.l+namelen+efsz));\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob, csz, usz, o, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break;\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\tvar _crc32 = CRC32.buf(data, 0);\n\tif((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb, options) {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(fi.content, 0);\n\n\t\tvar outbuf = fi.content;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: encryption header ? */\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, fi.content.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out)), bconcat(cdirs), o]));\n}\nfunction cfb_new(opts) {\n\tvar o = ({});\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb, name, content, opts) {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2});\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\nfile.content = (content);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb, name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb, old_name, new_name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb) { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nif(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }\nvar _fs;\nif(typeof require !== 'undefined') try { _fs = require('fs'); } catch(e) {}\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname, payload, enc) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\nif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\nif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\nif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\nif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true});\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\na.download = fname; a.href = url; document.body.appendChild(a); a.click();\ndocument.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o) {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj, key) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj) {\n\tvar o = ([]), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\nfunction datenum(v, date1904) {\n\tvar epoch = v.getTime();\n\tif(date1904) epoch -= 1462*24*60*60*1000;\n\tvar dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\n\treturn (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\nvar refdate = new Date();\nvar dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\nvar refoffset = refdate.getTimezoneOffset();\nfunction numdate(v) {\n\tvar out = new Date();\n\tout.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\tif (out.getTimezoneOffset() !== refoffset) {\n\t\tout.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n\t}\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\nvar good_pd_date = new Date('2017-02-19T19:06:09.000Z');\nif(isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17');\nvar good_pd = good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\nfunction parseDate(str, fixdate) {\n\tvar d = new Date(str);\n\tif(good_pd) {\nif(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n\t\telse if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n\t\treturn d;\n\t}\n\tif(str instanceof Date) return str;\n\tif(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n\t\tvar s = d.getFullYear();\n\t\tif(str.indexOf(\"\" + s) > -1) return d;\n\t\td.setFullYear(d.getFullYear() + 100); return d;\n\t}\n\tvar n = str.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"];\n\tvar out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));\n\tif(str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n\treturn out;\n}\n\nfunction cc2str(arr) {\n\tvar o = \"\";\n\tfor(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);\n\treturn o;\n}\n\nfunction dup(o) {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c,l) { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s) {\n\tvar v = Number(s);\n\tif(!isNaN(v)) return v;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\nfunction fuzzydate(s) {\n\tvar o = new Date(s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tif(y < 0 || y > 8099) return n;\n\tif((m > 0 || d > 1) && y != 101) return o;\n\tif(s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) return o;\n\tif(s.match(/[^-0-9:,\\/\\\\]/)) return n;\n\treturn o;\n}\n\nvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\nfunction split_regex(str, re, def) {\n\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\tvar p = str.split(re), o = [p[0]];\n\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\treturn o;\n}\nfunction getdatastr(data) {\n\tif(!data) return null;\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\tif(data.content && data.type) return debom(cc2str(data.content));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase(), g = f.replace(/\\//g,'\\\\');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s?[\\/\\?]?>/mg;\n\nif(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag, skip_root, skip_LC) {\n\tvar z = ({});\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i];\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x) { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml = (function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\treturn function unescapexml(text) {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn unescapexml(s.slice(0, i)) + s.slice(i+9,j) + unescapexml(s.slice(j+3));\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\nfunction escapexml(text){\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text){ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text){\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"
\").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text){\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr = (function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$,$1) { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str) { return str.replace(entregex,entrepl); };\n})();\nvar xlml_unfixstr = (function() {\n\treturn function xlml_unfixstr(str) { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); };\n})();\n\nfunction parsexmlbool(value) {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': case 'TRUE': return true;\n\t\t/* case '0': case 'false': case 'FALSE':*/\n\t\tdefault: return false;\n\t}\n}\n\nvar utf8read = function utf8reada(orig) {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n};\n\nvar utf8write = function(orig) {\n\tvar out = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\nif(has_buf) {\n\tvar utf8readb = function utf8readb(data) {\n\t\tvar out = Buffer.alloc(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\t\tfor(i = 0; i < data.length; i+=j) {\n\t\t\tj = 1;\n\t\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\t\telse { j = 4;\n\t\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t\t}\n\t\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t\t}\n\t\treturn out.slice(0,k).toString('ucs2');\n\t};\n\tvar corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\n\tif(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;\n\tvar utf8readc = function utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); };\n\tif(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;\n\n\tutf8write = function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); };\n}\n\n// matches ... extracts content\nvar matchtag = (function() {\n\tvar mtcache = ({});\n\treturn function matchtag(f,g) {\n\t\tvar t = f+\"|\"+(g||\"\");\n\t\tif(mtcache[t]) return mtcache[t];\n\t\treturn (mtcache[t] = new RegExp('<(?:\\\\w+:)?'+f+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)',((g||\"\"))));\n\t};\n})();\n\nvar htmldecode = (function() {\n\tvar entities = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str) {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/[\\t\\n\\r ]+$/,\"\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtregex = (function(){ var vt_cache = {};\n\treturn function vt_regex(bt) {\n\t\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\n\t\treturn (vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)\", 'g') );\n};})();\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)' + g + ''; }\n\nfunction wxt_helper(h) { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f,g,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '';}\n\nfunction write_w3cdtf(d, t) { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx) {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nvar XMLNS = ({\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n});\n\nXMLNS.main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n});\nfunction read_double_le(b, idx) {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b, v, idx) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___lpstr = __lpstr;\nvar __cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___cpstr = __cpstr;\nvar __lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___lpwstr = __lpwstr;\nvar __lpp4, ___lpp4;\n__lpp4 = ___lpp4 = function lpp4_(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar ___8lpp4 = __8lpp4;\nvar __double, ___double;\n__double = ___double = function(b, idx) { return read_double_le(b, idx);};\nvar is_buf = function is_buf_a(a) { return Array.isArray(a); };\n\nif(has_buf) {\n\t__utf16le = function(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/; };\n\t__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };\n\t__lpstr = function lpstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b, i) { if(!Buffer.isBuffer(b)) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : ___utf8(b,s,e); };\n\t__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};\n\tbconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };\n\t__double = function double_(b, i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };\n}\n\n/* from js-xls */\nif(typeof cptable !== 'undefined') {\n\t__utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\n\nvar __readUInt8 = function(b, idx) { return b[idx]; };\nvar __readUInt16LE = function(b, idx) { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b, idx) { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b, idx) { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size, t) {\n\tvar o=\"\", oI, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof cptable !== 'undefined') o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof cptable !== 'undefined') {\n\t\t\t\to = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t, val, f) {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\nfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs') {\n\t\tif(typeof cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\nfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cppayload = cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cppayload[0];\n\t\t\t}\n\t\t} else {\nval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\nfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t}\n\t\tsize = val.length;\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\nthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\nvar end = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr, fld) {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos) {\n\tblob.l = pos;\n\tblob.read_shift = ReadShift;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length) { blob.l += length; }\n\nfunction new_buf(sz) {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb, opts) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = (R.f||parsenoop)(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R.n, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array() {\n\tvar bufs = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz) {\n\t\tvar o = (new_buf(sz));\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz) {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn __toBuffer([bufs]);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs });\n}\n\nfunction write_record(ba, type, payload, length) {\n\tvar t = +XLSBRE[type], l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell, tgt, opts) {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c, biff) {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts) {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nvar OFFCRYPTO = {};\n\nvar make_offcrypto = function(O, _crypto) {\n\tvar crypto;\n\tif(typeof _crypto !== 'undefined') crypto = _crypto;\n\telse if(typeof require !== 'undefined') {\n\t\ttry { crypto = require('crypto'); }\n\t\tcatch(e) { crypto = null; }\n\t}\n\n\tO.rc4 = function(key, data) {\n\t\tvar S = new Array(256);\n\t\tvar c = 0, i = 0, j = 0, t = 0;\n\t\tfor(i = 0; i != 256; ++i) S[i] = i;\n\t\tfor(i = 0; i != 256; ++i) {\n\t\t\tj = (j + S[i] + (key[i%key.length]).charCodeAt(0))&255;\n\t\t\tt = S[i]; S[i] = S[j]; S[j] = t;\n\t\t}\n\t\t// $FlowIgnore\n\t\ti = j = 0; var out = new_raw_buf(data.length);\n\t\tfor(c = 0; c != data.length; ++c) {\n\t\t\ti = (i + 1)&255;\n\t\t\tj = (j + S[i])%256;\n\t\t\tt = S[i]; S[i] = S[j]; S[j] = t;\n\t\t\tout[c] = (data[c] ^ S[(S[i]+S[j])&255]);\n\t\t}\n\t\treturn out;\n\t};\n\n\tO.md5 = function(hex) {\n\t\tif(!crypto) throw new Error(\"Unsupported crypto\");\n\t\treturn crypto.createHash('md5').update(hex).digest('hex');\n\t};\n};\n/*global crypto:true */\nmake_offcrypto(OFFCRYPTO, typeof crypto !== \"undefined\" ? crypto : undefined);\n\nfunction decode_row(rowstr) { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row) { return \"\" + (row + 1); }\nfunction fix_row(cstr) { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr) { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr) { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col) { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr) { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr) { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr) { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\n//function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\nfunction decode_cell(cstr) {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\n//function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }\nfunction encode_cell(cell) {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range) {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\nfunction encode_range(cs,ce) {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\nreturn encode_range(cs.s, cs.e);\n\t}\nif(typeof cs !== 'string') cs = encode_cell((cs));\n\tif(typeof ce !== 'string') ce = encode_cell((ce));\nreturn cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range) {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell, v) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF.format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF.format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell, v, o) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet, opts) {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_add_aoa(_ws, data, opts) {\n\tvar o = opts || {};\n\tvar dense = _ws ? Array.isArray(_ws) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws = _ws || (dense ? ([]) : ({}));\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t\tif(!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n\t}\n\tvar range = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}});\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = _range.e.r + 1;\n\t}\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell = ({v: data[R][C] });\n\t\t\tvar __R = _R + R, __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) { if(cell.f) cell.t = 'n'; else if(!o.sheetStubs) continue; else cell.t = 'z'; }\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || SSF._table[14];\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF.format(cell.z, datenum(cell.v)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF.format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(!ws[__R]) ws[__R] = [];\n\t\t\t\tif(ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n\t\t\t\tws[__R][__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_cell(({c:__C,r:__R}));\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data, opts) { return sheet_add_aoa(null, data, opts); }\n\nfunction write_UInt32LE(x, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data) {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data) {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length) {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str });\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str, o) {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str, o) {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data) {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell, o) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data) {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data) {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tb[0] &= 0xFC; // b[0] &= ~3;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, b[0], b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data ) {\n\tvar cell = ({ s: {}, e: {} });\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data) { return data.read_shift(8, 'f'); }\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w) {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\nvar VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\nvar VT_VECTOR = 0x1000;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n0x01: { n: 'CodePage', t: VT_I2 },\n0x02: { n: 'Category', t: VT_STRING },\n0x03: { n: 'PresentationFormat', t: VT_STRING },\n0x04: { n: 'ByteCount', t: VT_I4 },\n0x05: { n: 'LineCount', t: VT_I4 },\n0x06: { n: 'ParagraphCount', t: VT_I4 },\n0x07: { n: 'SlideCount', t: VT_I4 },\n0x08: { n: 'NoteCount', t: VT_I4 },\n0x09: { n: 'HiddenCount', t: VT_I4 },\n0x0a: { n: 'MultimediaClipCount', t: VT_I4 },\n0x0b: { n: 'ScaleCrop', t: VT_BOOL },\n0x0c: { n: 'HeadingPairs', t: VT_VECTOR | VT_VARIANT },\n0x0d: { n: 'TitlesOfParts', t: VT_VECTOR | VT_LPSTR },\n0x0e: { n: 'Manager', t: VT_STRING },\n0x0f: { n: 'Company', t: VT_STRING },\n0x10: { n: 'LinksUpToDate', t: VT_BOOL },\n0x11: { n: 'CharacterCount', t: VT_I4 },\n0x13: { n: 'SharedDoc', t: VT_BOOL },\n0x16: { n: 'HyperlinksChanged', t: VT_BOOL },\n0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },\n0x18: { n: 'DigSig', t: VT_BLOB },\n0x1A: { n: 'ContentType', t: VT_STRING },\n0x1B: { n: 'ContentStatus', t: VT_STRING },\n0x1C: { n: 'Language', t: VT_STRING },\n0x1D: { n: 'Version', t: VT_STRING },\n0xFF: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n0x01: { n: 'CodePage', t: VT_I2 },\n0x02: { n: 'Title', t: VT_STRING },\n0x03: { n: 'Subject', t: VT_STRING },\n0x04: { n: 'Author', t: VT_STRING },\n0x05: { n: 'Keywords', t: VT_STRING },\n0x06: { n: 'Comments', t: VT_STRING },\n0x07: { n: 'Template', t: VT_STRING },\n0x08: { n: 'LastAuthor', t: VT_STRING },\n0x09: { n: 'RevNumber', t: VT_STRING },\n0x0A: { n: 'EditTime', t: VT_FILETIME },\n0x0B: { n: 'LastPrinted', t: VT_FILETIME },\n0x0C: { n: 'CreatedDate', t: VT_FILETIME },\n0x0D: { n: 'ModifiedDate', t: VT_FILETIME },\n0x0E: { n: 'PageCount', t: VT_I4 },\n0x0F: { n: 'WordCount', t: VT_I4 },\n0x10: { n: 'CharCount', t: VT_I4 },\n0x11: { n: 'Thumbnail', t: VT_CF },\n0x12: { n: 'Application', t: VT_STRING },\n0x13: { n: 'DocSecurity', t: VT_I4 },\n0xFF: {}\n};\n\n/* [MS-OLEPS] 2.18 */\nvar SpecialProperties = {\n0x80000000: { n: 'Locale', t: VT_UI4 },\n0x80000003: { n: 'Behavior', t: VT_UI4 },\n0x72627262: {}\n};\n\n(function() {\n\tfor(var y in SpecialProperties) if(Object.prototype.hasOwnProperty.call(SpecialProperties, y))\n\tDocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];\n})();\n\nvar DocSummaryRE = evert_key(DocSummaryPIDDSI, \"n\");\nvar SummaryRE = evert_key(SummaryPIDSI, \"n\");\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n0x0001: \"US\", // United States\n0x0002: \"CA\", // Canada\n0x0003: \"\", // Latin America (except Brazil)\n0x0007: \"RU\", // Russia\n0x0014: \"EG\", // Egypt\n0x001E: \"GR\", // Greece\n0x001F: \"NL\", // Netherlands\n0x0020: \"BE\", // Belgium\n0x0021: \"FR\", // France\n0x0022: \"ES\", // Spain\n0x0024: \"HU\", // Hungary\n0x0027: \"IT\", // Italy\n0x0029: \"CH\", // Switzerland\n0x002B: \"AT\", // Austria\n0x002C: \"GB\", // United Kingdom\n0x002D: \"DK\", // Denmark\n0x002E: \"SE\", // Sweden\n0x002F: \"NO\", // Norway\n0x0030: \"PL\", // Poland\n0x0031: \"DE\", // Germany\n0x0034: \"MX\", // Mexico\n0x0037: \"BR\", // Brazil\n0x003d: \"AU\", // Australia\n0x0040: \"NZ\", // New Zealand\n0x0042: \"TH\", // Thailand\n0x0051: \"JP\", // Japan\n0x0052: \"KR\", // Korea\n0x0054: \"VN\", // Viet Nam\n0x0056: \"CN\", // China\n0x005A: \"TR\", // Turkey\n0x0069: \"JS\", // Ramastan\n0x00D5: \"DZ\", // Algeria\n0x00D8: \"MA\", // Morocco\n0x00DA: \"LY\", // Libya\n0x015F: \"PT\", // Portugal\n0x0162: \"IS\", // Iceland\n0x0166: \"FI\", // Finland\n0x01A4: \"CZ\", // Czech Republic\n0x0376: \"TW\", // Taiwan\n0x03C1: \"LB\", // Lebanon\n0x03C2: \"JO\", // Jordan\n0x03C3: \"SY\", // Syria\n0x03C4: \"IQ\", // Iraq\n0x03C5: \"KW\", // Kuwait\n0x03C6: \"SA\", // Saudi Arabia\n0x03CB: \"AE\", // United Arab Emirates\n0x03CC: \"IL\", // Israel\n0x03CE: \"QA\", // Qatar\n0x03D5: \"IR\", // Iran\n0xFFFF: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0xFFFFFF, /* 0x40 icvForeground ?? */\n\t0x000000, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n0x00: \"#NULL!\",\n0x07: \"#DIV/0!\",\n0x0F: \"#VALUE!\",\n0x17: \"#REF!\",\n0x1D: \"#NAME?\",\n0x24: \"#NUM!\",\n0x2A: \"#N/A\",\n0x2B: \"#GETTING_DATA\",\n0xFF: \"#WTF?\"\n};\nvar RBErr = evert_num(BErr);\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* Metadata */\n\t\"application/vnd.ms-excel.sheetMetadata\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"TODO\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"vba\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n});\n\nvar CT_LIST = (function(){\n\tvar o = {\n\t\tworkbooks: {\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t\t},\n\t\tstrs: { /* Shared Strings */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t\t},\n\t\tcomments: { /* Comments */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t\t},\n\t\tsheets: { /* Worksheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t\t},\n\t\tcharts: { /* Chartsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t\t},\n\t\tdialogs: { /* Dialogsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t\t},\n\t\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t\t},\n\t\tstyles: { /* Styles */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t\t}\n\t};\n\tkeys(o).forEach(function(k) { [\"xlsm\", \"xlam\"].forEach(function(v) { if(!o[k][v]) o[k][v] = o[k].xlsx; }); });\n\tkeys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); });\n\treturn o;\n})();\n\nvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\nXMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';\n\nfunction new_ct() {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [],\n\t\tTODO:[], xmlns: \"\" });\n}\n\nfunction parse_ct(data) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nvar CTYPE_XML_ROOT = writextag('Types', null, {\n\t'xmlns': XMLNS.CT,\n\t'xmlns:xsd': XMLNS.xsd,\n\t'xmlns:xsi': XMLNS.xsi\n});\n\nvar CTYPE_DEFAULTS = [\n\t['xml', 'application/xml'],\n\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t/* from test files */\n\t['bmp', 'image/bmp'],\n\t['png', 'image/png'],\n\t['gif', 'image/gif'],\n\t['emf', 'image/x-emf'],\n\t['wmf', 'image/x-wmf'],\n\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t['pdf', 'application/pdf'],\n\t['rels', type2ct.rels[0]]\n].map(function(x) {\n\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n});\n\nfunction write_ct(ct, opts) {\n\tvar o = [], v;\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (CTYPE_XML_ROOT);\n\to = o.concat(CTYPE_DEFAULTS);\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('drawings');\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n});\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file) {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data, currentFilePath) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nvar RELS_EXTERN = [RELS.HLINK, RELS.XPATH, RELS.XMISS];\nfunction add_rels(rels, rId, f, type, relobj, targetmode) {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(rId < 0) for(rId = 1; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if(RELS_EXTERN.indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n/* Part 3 Section 4 Manifest File */\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n\tvar str = xlml_normalize(d);\n\tvar Rn;\n\tvar FEtag;\n\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\n\t\tcase 'manifest': break; // 4.2 \n\t\tcase 'file-entry': // 4.3 \n\t\t\tFEtag = parsexmltag(Rn[0], false);\n\t\t\tif(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n\t\t\tbreak;\n\t\tcase 'encryption-data': // 4.4 \n\t\tcase 'algorithm': // 4.5 \n\t\tcase 'start-key-generation': // 4.6 \n\t\tcase 'key-derivation': // 4.7 \n\t\t\tthrow new Error(\"Unsupported ODS Encryption\");\n\t\tdefault: if(opts && opts.WTF) throw Rn;\n\t}\n}\n\nfunction write_manifest(manifest) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\to.push(' \\n');\n\tfor(var i = 0; i < manifest.length; ++i) o.push(' \\n');\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* Part 3 Section 6 Metadata Manifest File */\nfunction write_rdf_type(file, res, tag) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf_has(base, file) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf(rdf) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\tfor(var i = 0; i != rdf.length; ++i) {\n\t\to.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n\t\to.push(write_rdf_has(\"\",rdf[i][0]));\n\t}\n\to.push(write_rdf_type(\"\",\"Document\", \"pkg\"));\n\to.push('');\n\treturn o.join(\"\");\n}\n/* TODO: pull properties */\nvar write_meta_ods = (function() {\n\tvar payload = 'Sheet' + 'JS ' + XLSX.version + '';\n\treturn function wmo() {\n\t\treturn payload;\n\t};\n})();\n\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nXMLNS.CORE_PROPS = \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\";\nRELS.CORE_PROPS = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n\nvar CORE_PROPS_REGEX = (function() {\n\tvar r = new Array(CORE_PROPS.length);\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar g = \"(?:\"+ f[0].slice(0,f[0].indexOf(\":\")) +\":)\"+ f[0].slice(f[0].indexOf(\":\")+1);\n\t\tr[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n\t}\n\treturn r;\n})();\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nvar CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {\n\t//'xmlns': XMLNS.CORE_PROPS,\n\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t'xmlns:dc': XMLNS.dc,\n\t'xmlns:dcterms': XMLNS.dcterms,\n\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t'xmlns:xsi': XMLNS.xsi\n});\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, CORE_PROPS_XML_ROOT], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nXMLNS.EXT_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\";\nRELS.EXT_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (data.match(matchtag(f[0]))||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nvar EXT_PROPS_XML_ROOT = writextag('Properties', null, {\n\t'xmlns': XMLNS.EXT_PROPS,\n\t'xmlns:vt': XMLNS.vt\n});\n\nfunction write_ext_props(cp) {\n\tvar o = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (EXT_PROPS_XML_ROOT);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nXMLNS.CUST_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\";\nRELS.CUST_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n\nvar custregex = /<[^>]+>[^<]*/g;\nfunction parse_cust_props(data, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM = evert(XLMLDocPropsMap);\n\nfunction xlml_set_prop(Props, tag, val) {\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o = [];\n\tif(Props) keys(Props).forEach(function(k) {\nif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\nif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob) {\n\tvar length = blob.read_shift(4);\n\tvar ret = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */\nfunction parse_VtVecUnalignedLpstr(blob) {\n\treturn parse_VtVecUnalignedLpstrValue(blob);\n}\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */\nfunction parse_VtVecHeadingPair(blob) {\n\t// NOTE: When invoked, wType & padding were already consumed\n\treturn parse_VtVecHeadingPairValue(blob);\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict = ({});\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type, _opts) {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob);\n\t\tcase 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\np = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj = ({});\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2));\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ].concat(PseudoPropsPairs);\nfunction guess_property_type(val) {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI)[idx];\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\nvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({});\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier });\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI, entries2, clsid2) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob) {\n\tblob.l += 2; //var cAnti = blob.read_shift(2);\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length) {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tvar out = ({Target:target});\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tvar F = Target.indexOf(\"#\") > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\tout.write_shift(4, Target.length + 1);\n\t\tfor(i = 0; i < Target.length; ++i) out.write_shift(2, Target.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tout.write_shift(4, 2*(Target.length + 1));\n\t\tfor(i = 0; i < Target.length; ++i) out.write_shift(2, Target.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length + 1);\n\t\tfor(i = 0; i < Target.length; ++i) out.write_shift(1, Target.charCodeAt(i) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob) {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ixfe = blob.read_shift(2);\n\treturn ({r:rw, c:col, ixfe:ixfe});\n}\nfunction write_XLSCell(R, C, ixfe, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n0x00: parse_FtSkip, /* FtEnd */\n0x04: parse_FtSkip, /* FtMacro */\n0x05: parse_FtSkip, /* FtButton */\n0x06: parse_FtSkip, /* FtGmo */\n0x07: parse_FtCf, /* FtCf */\n0x08: parse_FtSkip, /* FtPioGrbit */\n0x09: parse_FtSkip, /* FtPictFmla */\n0x0A: parse_FtSkip, /* FtCbls */\n0x0B: parse_FtSkip, /* FtRbo */\n0x0C: parse_FtSkip, /* FtSbs */\n0x0D: parse_FtNts, /* FtNts */\n0x0E: parse_FtSkip, /* FtSbsFmla */\n0x0F: parse_FtSkip, /* FtGboData */\n0x10: parse_FtSkip, /* FtEdoData */\n0x11: parse_FtSkip, /* FtRboData */\n0x12: parse_FtSkip, /* FtCblsData */\n0x13: parse_FtSkip, /* FtLbsData */\n0x14: parse_FtSkip, /* FtCblsFmla */\n0x15: parse_FtCmo\n};\nfunction parse_FtArray(blob, length) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts.push(FtTab[ft](blob, tgt - blob.l));\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb, t, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length) {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs = ([]);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\no.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({});\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1() {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob) {\n\tvar cell = parse_XLSCell(blob);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R, C, v, os ) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) blob.l++;\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R, C, v, os, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i, f, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R, C, v, os, opts, t) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R, C, v, os) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t});\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\tvar rgce = target == blob.l || cce === 0 ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\nfunction parse_NoteSh(blob, length, opts) {\n\tif(opts.biff < 8) return;\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\tif(opts.biff < 8) blob.read_shift(1);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length) {\n\tvar merges = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = [];\nparse_BIFF5OT[0x08] = function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts);\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob) {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags});\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r, c, val) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r, c, val) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n/* from js-harb (C) 2014-present SheetJS */\nvar DBF = (function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n0x01: 437, 0x02: 850,\n0x03: 1252, 0x04: 10000,\n0x64: 852, 0x65: 866,\n0x66: 865, 0x67: 861,\n0x68: 895, 0x69: 620,\n0x6A: 737, 0x6B: 857,\n0x78: 950, 0x79: 949,\n0x7A: 936, 0x7B: 932,\n0x7C: 874, 0x7D: 1255,\n0x7E: 1256, 0x96: 10007,\n0x97: 10029, 0x98: 10006,\n0xC8: 1250, 0xC9: 1251,\n0xCA: 1254, 0xCB: 1253,\n\n\t/* shapefile DBF extension */\n0x00: 20127, 0x08: 865,\n0x09: 437, 0x0A: 850,\n0x0B: 437, 0x0D: 437,\n0x0E: 850, 0x0F: 437,\n0x10: 850, 0x11: 437,\n0x12: 850, 0x13: 932,\n0x14: 850, 0x15: 437,\n0x16: 850, 0x17: 865,\n0x18: 437, 0x19: 437,\n0x1A: 850, 0x1B: 437,\n0x1C: 863, 0x1D: 850,\n0x1F: 852, 0x22: 852,\n0x23: 852, 0x24: 860,\n0x25: 850, 0x26: 866,\n0x37: 850, 0x40: 852,\n0x4D: 936, 0x4E: 949,\n0x4F: 950, 0x50: 874,\n0x57: 1252, 0x58: 1252,\n0x59: 1252,\n\n0xFF: 16969\n};\nvar dbf_reverse_map = evert({\n0x01: 437, 0x02: 850,\n0x03: 1252, 0x04: 10000,\n0x64: 852, 0x65: 866,\n0x66: 865, 0x67: 861,\n0x68: 895, 0x69: 620,\n0x6A: 737, 0x6B: 857,\n0x78: 950, 0x79: 949,\n0x7A: 936, 0x7B: 932,\n0x7C: 874, 0x7D: 1255,\n0x7E: 1256, 0x96: 10007,\n0x97: 10029, 0x98: 10006,\n0xC8: 1250, 0xC9: 1251,\n0xCA: 1254, 0xCB: 1253,\n0x00: 20127\n});\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts) {\n\tvar out = [];\n\t/* TODO: browser based */\n\tvar d = (new_raw_buf(1));\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64.decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = false;\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: case 0x03: break;\n\t\tcase 0x30: vfp = true; memo = true; break;\n\t\tcase 0x31: vfp = true; break;\n\t\tcase 0x83: memo = true; break;\n\t\tcase 0x8B: memo = true; break;\n\t\tcase 0x8C: memo = true; l7 = true; break;\n\t\tcase 0xF5: memo = true; break;\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\tvar /*filedate = new Date(),*/ nrow = 0, fpos = 0;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\t/*filedate = new Date(d.read_shift(1) + 1900, d.read_shift(1) - 1, d.read_shift(1));*/d.l += 3;\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(ft != 0x02) fpos = d.read_shift(2);\n\tvar rlen = d.read_shift(2);\n\n\tvar /*flags = 0,*/ current_cp = 1252;\n\tif(ft != 0x02) {\n\td.l+=16;\n\t/*flags = */d.read_shift(1);\n\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t/* codepage present in FoxPro */\n\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\td.l+=1;\n\n\td.l+=2;\n\t}\n\tif(l7) d.l += 36;\nvar fields = [], field = ({});\n\tvar hend = fpos - 10 - (vfp ? 264 : 0), ww = l7 ? 32 : 11;\n\twhile(ft == 0x02 ? d.l < d.length && d[d.l] != 0x0d: d.l < hend) {\n\t\tfield = ({});\n\t\tfield.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)).replace(/[\\u0000\\r\\n].*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // VFP Double\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General\n\t\t\tcase 'P': // Picture\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'C': // character\n\t\t\tcase 'D': // date\n\t\t\tcase 'F': // floating point\n\t\t\tcase 'I': // long\n\t\t\tcase 'L': // boolean\n\t\t\tcase 'M': // memo\n\t\t\tcase 'N': // number\n\t\t\tcase 'O': // double\n\t\t\tcase 'T': // datetime\n\t\t\tcase 'Y': // currency\n\t\t\tcase '0': // VFP _NullFlags\n\t\t\tcase '@': // timestamp\n\t\t\tcase '+': // autoincrement\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\telse if(ft == 0x02) d.l = 0x209;\n\tif(ft != 0x02) {\n\t\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\t\td.l = fpos;\n\t}\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) { d.l+=rlen; continue; }\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = cptable.utils.decode(current_cp, dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\tout[R][C] = cptable.utils.decode(current_cp, dd);\n\t\t\t\t\tout[R][C] = out[R][C].trim();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8));\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase ' ': case '?': out[R][C] = false; break; /* NOTE: technically uninitialized */\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N': out[R][C] = +s.replace(/\\u0000/g,\"\").trim(); break;\n\t\t\t\tcase '@': out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400); break;\n\t\t\t\tcase 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4; break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts) {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\treturn aoa_to_sheet(dbf_to_aoa(buf, o), o);\n}\n\nfunction dbf_to_workbook(buf, opts) {\n\ttry { return sheet_to_workbook(dbf_to_sheet(buf, opts), opts); }\n\tcatch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws, opts) {\n\tvar o = opts || {};\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1);\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(i == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar col = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tvar guess = '', _guess = '';\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\tif(guess == 'C') break;\n\t\t}\n\t\trlen += _RLEN[guess] || 0;\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\th.write_shift(4, 0x00000000 | ((+dbf_reverse_map[current_ansi] || 0x03)<<8));\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += _RLEN[coltypes[i]] || 0;\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j\":190, \"?\":191, \"{\":223\n\t});\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: find an actual specification */\n\tfunction sylk_to_aoa(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(d.toString('binary'), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str, opts) {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr = [];\n\t\tvar formats = [];\n\t\tvar next_cell_format = null;\n\t\tvar sht = {}, rowinfo = [], colinfo = [], cw = [];\n\t\tvar Mval = 0, j;\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': break; /* options? */\n\t\t\tcase 'P':\n\t\t\t\tif(record[1].charAt(0) == 'P')\n\t\t\t\t\tformats.push(rstr.slice(3).replace(/;;/g, \";\"));\n\t\t\t\tbreak;\n\t\t\tcase 'C':\n\t\t\tvar C_seen_K = false, C_seen_X = false;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht];\n\t}\n\n\tfunction sylk_to_sheet(d, opts) {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1];\n\t\tvar o = aoa_to_sheet(aoa, opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\treturn o;\n\t}\n\n\tfunction sylk_to_workbook(d, opts) { return sheet_to_workbook(sylk_to_sheet(d, opts), opts); }\n\n\tfunction write_ws_cell_sylk(cell, ws, R, C) {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || cell.v; break;\n\t\t\tcase 'd': o += '\"' + (cell.w || cell.v) + '\"'; break;\n\t\t\tcase 's': o += '\"' + cell.v.replace(/\"/g,\"\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number') col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number') col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out, rows) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws, opts) {\n\t\tvar preamble = [\"ID;PWXL;N;E\"], o = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\tvar dense = Array.isArray(ws);\n\t\tvar RS = \"\\r\\n\";\n\n\t\tpreamble.push(\"P;PGeneral\");\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tpreamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\to.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n\t\t\t}\n\t\t}\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tto_sheet: sylk_to_sheet,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = (function() {\n\tfunction dif_to_aoa(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(d.toString('binary'), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str, opts) {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri].trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str, opts) { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str, opts) { return sheet_to_workbook(dif_to_sheet(str, opts), opts); }\n\n\tvar sheet_to_dif = (function() {\n\t\tvar push_field = function pf(o, topic, v, n, s) {\n\t\t\to.push(topic);\n\t\t\to.push(v + \",\" + n);\n\t\t\to.push('\"' + s.replace(/\"/g,'\"\"') + '\"');\n\t\t};\n\t\tvar push_value = function po(o, type, v, s) {\n\t\t\to.push(type + \",\" + v);\n\t\t\to.push(type == 1 ? '\"' + s.replace(/\"/g,'\"\"') + '\"' : s);\n\t\t};\n\t\treturn function sheet_to_dif(ws) {\n\t\t\tvar o = [];\n\t\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tpush_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n\t\t\tpush_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1,\"\");\n\t\t\tpush_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1,\"\");\n\t\t\tpush_field(o, \"DATA\", 0, 0,\"\");\n\t\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\t\tpush_value(o, -1, 0, \"BOT\");\n\t\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\t\tif(!cell) { push_value(o, 1, 0, \"\"); continue;}\n\t\t\t\t\tswitch(cell.t) {\n\t\t\t\t\t\tcase 'n':\n\t\t\t\t\t\t\tvar val = DIF_XL ? cell.w : cell.v;\n\t\t\t\t\t\t\tif(!val && cell.v != null) val = cell.v;\n\t\t\t\t\t\t\tif(val == null) {\n\t\t\t\t\t\t\t\tif(DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);\n\t\t\t\t\t\t\t\telse push_value(o, 1, 0, \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse push_value(o, 0, val, \"V\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\tpush_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tpush_value(o, 1, 0, (!DIF_XL || isNaN(cell.v)) ? cell.v : '=\"' + cell.v + '\"');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tif(!cell.w) cell.w = SSF.format(cell.z || SSF._table[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\t\tif(DIF_XL) push_value(o, 0, cell.w, \"V\");\n\t\t\t\t\t\t\telse push_value(o, 1, 0, cell.w);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: push_value(o, 1, 0, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpush_value(o, -1, 0, \"EOD\");\n\t\t\tvar RS = \"\\r\\n\";\n\t\t\tvar oo = o.join(RS);\n\t\t\t//while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\t\t\treturn oo;\n\t\t};\n\t})();\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = (function() {\n\tfunction decode(s) { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s) { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str, opts) {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d, opts) { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d, opts) { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws) {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o = [], oo = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF.format(cell.z || SSF._table[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws) {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = (function() {\n\tfunction set_text_arr(data, arr, R, C, o) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f, opts) {\n\t\tvar o = opts || {};\n\t\tvar arr = ([]);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n0x2C: ',',\n0x09: \"\\t\",\n0x3B: ';'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n0x2C: 3,\n0x09: 2,\n0x3B: 1\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]];\n\t}\n\n\tfunction dsv_to_sheet_str(str, opts) {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws = o.dense ? ([]) : ({});\n\t\tvar range = ({s: {c:0, r:0}, e: {c:0, r:0}});\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\t//\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t}\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;\n\t\tstr = str.replace(/\\r\\n/mg, \"\\n\");\n\t\tvar _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\tvar s = str.slice(start, end);\n\t\t\tvar cell = ({});\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; }\n\t\t\telse if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || SSF._table[14];\n\t\t\t\tvar k = 0;\n\t\t\t\tif(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; }\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); }\n\t\t\t\tif(o.cellText !== false) cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1;\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: instr = !instr; break;\n\t\t\tcase sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str, opts) {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d, opts) {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64.decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8');\n\t\t\t\telse if(opts.codepage && typeof cptable !== 'undefined') str = cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = d.toString('binary');\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if((opts.type == 'binary') && typeof cptable !== 'undefined' && opts.codepage) str = cptable.utils.decode(opts.codepage, cptable.utils.encode(1252,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d, opts) { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws) {\n\t\tvar o = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif(!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = (function() {\n\tfunction lotushopper(data, cb, opts) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = (R.f||parsenoop)(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R.n, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64.decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\tfunction lotus_to_workbook_buf(d, opts) {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s = ((o.dense ? [] : {})), n = \"Sheet1\", sidx = 0;\n\t\tvar sheets = {}, snames = [n];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\n\t\tif(d[2] == 0x02) o.Enum = WK1Enum;\n\t\telse if(d[2] == 0x1a) o.Enum = WK3Enum;\n\t\telse if(d[2] == 0x0e) { o.Enum = WK3Enum; o.qpro = true; d.l = 0; }\n\t\telse throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\tlotushopper(d, function(val, Rn, RT) {\n\t\t\tif(d[2] == 0x02) switch(RT) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\t\tif(!o.qpro) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || SSF._table[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); }\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tbreak;\n\t\t\t} else switch(RT) {\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tval[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t}, o);\n\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[n] = s;\n\t\treturn { SheetNames: snames, Sheets:sheets };\n\t}\n\n\tfunction parse_RANGE(blob) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_cell_3(blob) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\t/* TODO: figure out all of the corner cases */\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t\tdefault: throw \"unknown NUMBER_18 encoding \" + (v & 0x07);\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) { o[1].v = 0; return o; }\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (s*2 - 1) * ((e > 0 ? (v2 << e) : (v2 >>> -e)) + (e > -32 ? (v1 << (e + 32)) : (v1 >>> -(e + 32))));\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 14);\n\t\tblob.l += length - 10; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tvar WK1Enum = {\n0x0000: { n:\"BOF\", f:parseuint16 },\n0x0001: { n:\"EOF\" },\n0x0002: { n:\"CALCMODE\" },\n0x0003: { n:\"CALCORDER\" },\n0x0004: { n:\"SPLIT\" },\n0x0005: { n:\"SYNC\" },\n0x0006: { n:\"RANGE\", f:parse_RANGE },\n0x0007: { n:\"WINDOW1\" },\n0x0008: { n:\"COLW1\" },\n0x0009: { n:\"WINTWO\" },\n0x000A: { n:\"COLW2\" },\n0x000B: { n:\"NAME\" },\n0x000C: { n:\"BLANK\" },\n0x000D: { n:\"INTEGER\", f:parse_INTEGER },\n0x000E: { n:\"NUMBER\", f:parse_NUMBER },\n0x000F: { n:\"LABEL\", f:parse_LABEL },\n0x0010: { n:\"FORMULA\", f:parse_FORMULA },\n0x0018: { n:\"TABLE\" },\n0x0019: { n:\"ORANGE\" },\n0x001A: { n:\"PRANGE\" },\n0x001B: { n:\"SRANGE\" },\n0x001C: { n:\"FRANGE\" },\n0x001D: { n:\"KRANGE1\" },\n0x0020: { n:\"HRANGE\" },\n0x0023: { n:\"KRANGE2\" },\n0x0024: { n:\"PROTEC\" },\n0x0025: { n:\"FOOTER\" },\n0x0026: { n:\"HEADER\" },\n0x0027: { n:\"SETUP\" },\n0x0028: { n:\"MARGINS\" },\n0x0029: { n:\"LABELFMT\" },\n0x002A: { n:\"TITLES\" },\n0x002B: { n:\"SHEETJS\" },\n0x002D: { n:\"GRAPH\" },\n0x002E: { n:\"NGRAPH\" },\n0x002F: { n:\"CALCCOUNT\" },\n0x0030: { n:\"UNFORMATTED\" },\n0x0031: { n:\"CURSORW12\" },\n0x0032: { n:\"WINDOW\" },\n0x0033: { n:\"STRING\", f:parse_LABEL },\n0x0037: { n:\"PASSWORD\" },\n0x0038: { n:\"LOCKED\" },\n0x003C: { n:\"QUERY\" },\n0x003D: { n:\"QUERYNAME\" },\n0x003E: { n:\"PRINT\" },\n0x003F: { n:\"PRINTNAME\" },\n0x0040: { n:\"GRAPH2\" },\n0x0041: { n:\"GRAPHNAME\" },\n0x0042: { n:\"ZOOM\" },\n0x0043: { n:\"SYMSPLIT\" },\n0x0044: { n:\"NSROWS\" },\n0x0045: { n:\"NSCOLS\" },\n0x0046: { n:\"RULER\" },\n0x0047: { n:\"NNAME\" },\n0x0048: { n:\"ACOMM\" },\n0x0049: { n:\"AMACRO\" },\n0x004A: { n:\"PARSE\" },\n0x00FF: { n:\"\", f:parsenoop }\n\t};\n\n\tvar WK3Enum = {\n0x0000: { n:\"BOF\" },\n0x0001: { n:\"EOF\" },\n0x0003: { n:\"??\" },\n0x0004: { n:\"??\" },\n0x0005: { n:\"??\" },\n0x0006: { n:\"??\" },\n0x0007: { n:\"??\" },\n0x0009: { n:\"??\" },\n0x000a: { n:\"??\" },\n0x000b: { n:\"??\" },\n0x000c: { n:\"??\" },\n0x000e: { n:\"??\" },\n0x000f: { n:\"??\" },\n0x0010: { n:\"??\" },\n0x0011: { n:\"??\" },\n0x0012: { n:\"??\" },\n0x0013: { n:\"??\" },\n0x0015: { n:\"??\" },\n0x0016: { n:\"LABEL16\", f:parse_LABEL_16},\n0x0017: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n0x0018: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n0x0019: { n:\"FORMULA19\", f:parse_FORMULA_19},\n0x001a: { n:\"??\" },\n0x001b: { n:\"??\" },\n0x001c: { n:\"??\" },\n0x001d: { n:\"??\" },\n0x001e: { n:\"??\" },\n0x001f: { n:\"??\" },\n0x0021: { n:\"??\" },\n0x0025: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n0x0027: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n0x0028: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n0x00FF: { n:\"\", f:parsenoop }\n\t};\n\treturn {\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/\\w*:/g,\"\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = (function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o = ({t:'s', v:unescapexml(t[1])});\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = (function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"));\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")));\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data, opts) {\n\tvar s = ([]), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nRELS.SST = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\";\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst, opts) {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS.main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts) {\n\tvar s = ([]);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* 'BrtBeginSst' */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* 'BrtSSTItem' */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* 'BrtEndSst' */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R_n.indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if(R_n.indexOf(\"End\") > 0){/* empty */}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSst\", write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, \"BrtSSTItem\", write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, \"BrtEndSst\");\n\treturn ba.end();\n}\nfunction _JS2ANSI(str) {\n\tif(typeof cptable !== 'undefined') return cptable.utils.encode(current_ansi, str);\n\tvar o = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length) {\n\tvar o = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\nif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt() { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = (function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) });\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nvar RTF = (function() {\n\tfunction rtf_to_sheet(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return rtf_to_sheet_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return rtf_to_sheet_str(d, opts);\n\t\t\tcase 'buffer': return rtf_to_sheet_str(d.toString('binary'), opts);\n\t\t\tcase 'array': return rtf_to_sheet_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\n\tfunction rtf_to_sheet_str(str, opts) {\n\t\tvar o = opts || {};\n\t\tvar ws = o.dense ? ([]) : ({});\n\t\tvar range = ({s: {c:0, r:0}, e: {c:0, r:0}});\n\n\t\t// TODO: parse\n\t\tif(!str.match(/\\\\trowd/)) throw new Error(\"RTF missing table\");\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction rtf_to_workbook(d, opts) { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); }\n\n\t/* TODO: this is a stub */\n\tfunction sheet_to_rtf(ws) {\n\t\tvar o = [\"{\\\\rtf1\\\\ansi\"];\n\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\to.push(\"\\\\trowd\\\\trautofit1\");\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) o.push(\"\\\\cellx\" + (C+1));\n\t\t\to.push(\"\\\\pard\\\\intbl\");\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || cell.v == null && (!cell.f || cell.F)) continue;\n\t\t\t\to.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n\t\t\t\to.push(\"\\\\cell\");\n\t\t\t}\n\t\t\to.push(\"\\\\pard\\\\intbl\\\\row\");\n\t\t}\n\t\treturn o.join(\"\") + \"}\";\n\t}\n\n\treturn {\n\t\tto_workbook: rtf_to_workbook,\n\t\tto_sheet: rtf_to_sheet,\n\t\tfrom_sheet: sheet_to_rtf\n\t};\n})();\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = {};\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(SSF._table));\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF.load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs) {\n\tvar o = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= (function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(//mg,\"\").replace(//gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nvar STYLES_XML_ROOT = writextag('styleSheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:vt': XMLNS.vt\n});\n\nRELS.STY = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n\nfunction write_sty_xml(wb, opts) {\n\tvar o = [XML_HEADER, STYLES_XML_ROOT], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i, f, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length, opts) {\n\tvar out = ({});\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames = (evert(XLSBFillPTNames));\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tvar fls = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]);\n\tfor(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* 'BrtFmt' */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* 'BrtFont' */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* 'BrtKnownFonts' */ break;\n\t\t\tcase 0x002D: /* 'BrtFill' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* 'BrtBorder' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* 'BrtXF' */\n\t\t\t\tif(state[state.length - 1] == \"BrtBeginCellXFs\") {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* 'BrtStyle' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x023C: /* 'BrtMRUColor' */\n\t\t\tcase 0x01DB: /* 'BrtIndexedColor': */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* 'BrtDXF14' */\n\t\t\tcase 0x0836: /* 'BrtDXF15' */\n\t\t\tcase 0x046A: /* 'BrtSlicerStyleElement' */\n\t\t\tcase 0x0200: /* 'BrtTableStyleElement' */\n\t\t\tcase 0x082F: /* 'BrtTimelineStyleElement' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\nfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFmts\", write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\nfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, \"BrtFmt\", write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, \"BrtEndFmts\");\n}\n\nfunction write_FONTS_bin(ba) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFonts\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFont\", write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, \"BrtEndFonts\");\n}\n\nfunction write_FILLS_bin(ba) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFills\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, \"BrtEndFills\");\n}\n\nfunction write_BORDERS_bin(ba) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginBorders\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtBorder\", write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, \"BrtEndBorders\");\n}\n\nfunction write_CELLSTYLEXFS_bin(ba) {\n\tvar cnt = 1;\n\twrite_record(ba, \"BrtBeginCellStyleXFs\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtXF\", write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellStyleXFs\");\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, \"BrtBeginCellXFs\", write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, \"BrtXF\", write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellXFs\");\n}\n\nfunction write_STYLES_bin(ba) {\n\tvar cnt = 1;\n\n\twrite_record(ba, \"BrtBeginStyles\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtStyle\", write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, \"BrtEndStyles\");\n}\n\nfunction write_DXFS_bin(ba) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginDXFs\", write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, \"BrtEndDXFs\");\n}\n\nfunction write_TABLESTYLES_bin(ba) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginTableStyles\", write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, \"BrtEndTableStyles\");\n}\n\nfunction write_COLORPALETTE_bin() {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginStyleSheet\");\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, \"BrtEndStyleSheet\");\n\treturn ba.end();\n}\nRELS.THEME = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme() { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme() { }\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) return parse_theme_xml(write_theme());\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts) {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles || !jszip) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = new jszip(data); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob) {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data) {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ' 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\n//function write_cc_bin(data, opts) { }\n/* 18.14 Supplementary Workbook Data */\nfunction parse_xlink_xml() {\n\t//var opts = _opts || {};\n\t//if(opts.WTF) throw \"XLSX External Link\";\n}\n\n/* [MS-XLSB] 2.1.7.25 External Link */\nfunction parse_xlink_bin(data, rel, name, _opts) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\n\tvar pass = false, end = false;\n\n\trecordhopper(data, function xlink_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0167: /* 'BrtSupTabs' */\n\t\t\tcase 0x016B: /* 'BrtExternTableStart' */\n\t\t\tcase 0x016C: /* 'BrtExternTableEnd' */\n\t\t\tcase 0x016E: /* 'BrtExternRowHdr' */\n\t\t\tcase 0x016F: /* 'BrtExternCellBlank' */\n\t\t\tcase 0x0170: /* 'BrtExternCellReal' */\n\t\t\tcase 0x0171: /* 'BrtExternCellBool' */\n\t\t\tcase 0x0172: /* 'BrtExternCellError' */\n\t\t\tcase 0x0173: /* 'BrtExternCellString' */\n\t\t\tcase 0x01D8: /* 'BrtExternValueMeta' */\n\t\t\tcase 0x0241: /* 'BrtSupNameStart' */\n\t\t\tcase 0x0242: /* 'BrtSupNameValueStart' */\n\t\t\tcase 0x0243: /* 'BrtSupNameValueEnd' */\n\t\t\tcase 0x0244: /* 'BrtSupNameNum' */\n\t\t\tcase 0x0245: /* 'BrtSupNameErr' */\n\t\t\tcase 0x0246: /* 'BrtSupNameSt' */\n\t\t\tcase 0x0247: /* 'BrtSupNameNil' */\n\t\t\tcase 0x0248: /* 'BrtSupNameBool' */\n\t\t\tcase 0x0249: /* 'BrtSupNameFmla' */\n\t\t\tcase 0x024A: /* 'BrtSupNameBits' */\n\t\t\tcase 0x024B: /* 'BrtSupNameEnd' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT.toString(16) + \" \" + R_n);\n\t\t}\n\t}, opts);\n}\n/* 20.5 DrawingML - SpreadsheetML Drawing */\nRELS.IMG = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\nRELS.DRAW = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\";\n\n/* 20.5.2.35 wsDr CT_Drawing */\nfunction parse_drawing(data, rels) {\n\tif(!data) return \"??\";\n\t/*\n\t Chartsheet Drawing:\n\t - 20.5.2.35 wsDr CT_Drawing\n\t - 20.5.2.1 absoluteAnchor CT_AbsoluteAnchor\n\t - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n\t - 20.1.2.2.16 graphic CT_GraphicalObject\n\t - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n - chart reference\n\t the actual type is based on the URI of the graphicData\n\t\tTODO: handle embedded charts and other types of graphics\n\t*/\n\tvar id = (data.match(/]*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nvar _shapeid = 1024;\nfunction write_comments_vml(rId, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"}),\n\t\twritextag(\"v:shapetype\", [\n\t\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t\t].join(\"\"), {id:\"_x0000_t202\", 'o:spt':202, coordsize:csize.join(\",\"),path:bbox})\n\t];\n\twhile(_shapeid < rId * 1000) _shapeid += 1000;\n\n\tcomments.forEach(function(x) {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = {'color2':\"#BEFF82\", 'type':\"gradient\"};\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"});\n\t++_shapeid;\n\n\to = o.concat([\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t]); });\n\to.push('');\n\treturn o.join(\"\");\n}\nRELS.CMNT = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n\nfunction sheet_insert_comments(sheet, comments) {\n\tvar dense = Array.isArray(sheet);\n\tvar cell;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[r.r]) sheet[r.r] = [];\n\t\t\tcell = sheet[r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"});\n\t\t\tif(dense) sheet[r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tif (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o = ({a: comment.author, t: comment.t, r: comment.r});\n\t\tif(comment.h) o.h = comment.h;\n\t\tcell.c.push(o);\n\t});\n}\n\n/* 18.7 Comments */\nfunction parse_comments_xml(data, opts) {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors = [];\n\tvar commentList = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid });\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = rt.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nvar CMNT_XML_ROOT = writextag('comments', null, { 'xmlns': XMLNS.main[0] });\nfunction write_comments_xml(data) {\n\tvar o = [XML_HEADER, CMNT_XML_ROOT];\n\n\tvar iauthor = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) > -1) return;\n\t\tiauthor.push(a);\n\t\to.push(\"\" + a + \"\");\n\t}); });\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\td[1].forEach(function(c) {\n\t\t\t/* 18.7.3 CT_Comment */\n\t\t\to.push('');\n\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\to.push('');\n\t\t});\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts) {\n\tvar out = [];\n\tvar authors = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data) {\n\tvar ba = buf_array();\n\tvar iauthor = [];\n\twrite_record(ba, \"BrtBeginComments\");\n\n\twrite_record(ba, \"BrtBeginCommentAuthors\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, \"BrtCommentAuthor\", write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentAuthors\");\n\n\twrite_record(ba, \"BrtBeginCommentList\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, \"BrtBeginComment\", write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, \"BrtCommentText\", write_BrtCommentText(c));\n\t\t\twrite_record(ba, \"BrtEndComment\");\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentList\");\n\n\twrite_record(ba, \"BrtEndComments\");\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n\tvar newcfb = CFB.utils.cfb_new({root:\"R\"});\n\tcfb.FullPaths.forEach(function(p, i) {\n\t\tif(p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) return;\n\t\tvar newpath = p.replace(/^[^\\/]*/,\"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n\t\tCFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n\t});\n\treturn CFB.write(newcfb);\n}\n\nfunction fill_vba_xls(cfb, vba) {\n\tvba.FullPaths.forEach(function(p, i) {\n\t\tif(i == 0) return;\n\t\tvar newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n\t\tif(newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n\t});\n}\n\nvar VBAFMTS = [ \"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\" ];\n\nRELS.DS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\";\nRELS.MS = \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\";\n\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin() { return {'!type':'dialog'}; }\nfunction parse_ds_xml() { return {'!type':'dialog'}; }\nfunction parse_ms_bin() { return {'!type':'macro'}; }\nfunction parse_ms_xml() { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = (function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase = ({r:0,c:0});\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr, base) {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc =(function(){\n\treturn function a1_to_rc(fstr, base) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = (r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : (r+1));\n\t\t\tvar C = (c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : (c+1));\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f, delta) {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f, range, cell) {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f) {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f) {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts) {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n0x01: { n:'PtgExp', f:parse_PtgExp },\n0x02: { n:'PtgTbl', f:parse_PtgTbl },\n0x03: { n:'PtgAdd', f:parseread1 },\n0x04: { n:'PtgSub', f:parseread1 },\n0x05: { n:'PtgMul', f:parseread1 },\n0x06: { n:'PtgDiv', f:parseread1 },\n0x07: { n:'PtgPower', f:parseread1 },\n0x08: { n:'PtgConcat', f:parseread1 },\n0x09: { n:'PtgLt', f:parseread1 },\n0x0A: { n:'PtgLe', f:parseread1 },\n0x0B: { n:'PtgEq', f:parseread1 },\n0x0C: { n:'PtgGe', f:parseread1 },\n0x0D: { n:'PtgGt', f:parseread1 },\n0x0E: { n:'PtgNe', f:parseread1 },\n0x0F: { n:'PtgIsect', f:parseread1 },\n0x10: { n:'PtgUnion', f:parseread1 },\n0x11: { n:'PtgRange', f:parseread1 },\n0x12: { n:'PtgUplus', f:parseread1 },\n0x13: { n:'PtgUminus', f:parseread1 },\n0x14: { n:'PtgPercent', f:parseread1 },\n0x15: { n:'PtgParen', f:parseread1 },\n0x16: { n:'PtgMissArg', f:parseread1 },\n0x17: { n:'PtgStr', f:parse_PtgStr },\n0x1A: { n:'PtgSheet', f:parse_PtgSheet },\n0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n0x1C: { n:'PtgErr', f:parse_PtgErr },\n0x1D: { n:'PtgBool', f:parse_PtgBool },\n0x1E: { n:'PtgInt', f:parse_PtgInt },\n0x1F: { n:'PtgNum', f:parse_PtgNum },\n0x20: { n:'PtgArray', f:parse_PtgArray },\n0x21: { n:'PtgFunc', f:parse_PtgFunc },\n0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n0x23: { n:'PtgName', f:parse_PtgName },\n0x24: { n:'PtgRef', f:parse_PtgRef },\n0x25: { n:'PtgArea', f:parse_PtgArea },\n0x26: { n:'PtgMemArea', f:parse_PtgMemArea },\n0x27: { n:'PtgMemErr', f:parse_PtgMemErr },\n0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },\n0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n0x2C: { n:'PtgRefN', f:parse_PtgRefN },\n0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },\n0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n0x39: { n:'PtgNameX', f:parse_PtgNameX },\n0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },\n0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },\n0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n0xFF: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n0x40: 0x20, 0x60: 0x20,\n0x41: 0x21, 0x61: 0x21,\n0x42: 0x22, 0x62: 0x22,\n0x43: 0x23, 0x63: 0x23,\n0x44: 0x24, 0x64: 0x24,\n0x45: 0x25, 0x65: 0x25,\n0x46: 0x26, 0x66: 0x26,\n0x47: 0x27, 0x67: 0x27,\n0x48: 0x28, 0x68: 0x28,\n0x49: 0x29, 0x69: 0x29,\n0x4A: 0x2A, 0x6A: 0x2A,\n0x4B: 0x2B, 0x6B: 0x2B,\n0x4C: 0x2C, 0x6C: 0x2C,\n0x4D: 0x2D, 0x6D: 0x2D,\n0x4E: 0x2E, 0x6E: 0x2E,\n0x4F: 0x2F, 0x6F: 0x2F,\n0x58: 0x22, 0x78: 0x22,\n0x59: 0x39, 0x79: 0x39,\n0x5A: 0x3A, 0x7A: 0x3A,\n0x5B: 0x3B, 0x7B: 0x3B,\n0x5C: 0x3C, 0x7C: 0x3C,\n0x5D: 0x3D, 0x7D: 0x3D\n};\n(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();\n\nvar Ptg18 = {\n0x01: { n:'PtgElfLel', f:parse_PtgElfLel },\n0x02: { n:'PtgElfRw', f:parse_PtgElfRw },\n0x03: { n:'PtgElfCol', f:parse_PtgElfCol },\n0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n0x07: { n:'PtgElfColV', f:parse_PtgElfColV },\n0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n0x0D: { n:'PtgElfColS', f:parse_PtgElfColS },\n0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n0x19: { n:'PtgList', f:parse_PtgList },\n0x1D: { n:'PtgSxName', f:parse_PtgSxName },\n0xFF: {}\n};\nvar Ptg19 = {\n0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n0xFF: {}\n};\nPtg19[0x21] = Ptg19[0x20];\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f) {\n\tvar o = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\nr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// List of invalid characters needs to be tested further\nvar quoteCharacters = new RegExp(/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/);\nfunction formula_quote_sheet_name(sname, opts) {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (quoteCharacters.test(sname)) return \"'\" + sname + \"'\";\n\treturn sname;\n}\nfunction get_ixti_raw(supbooks, ixti, opts) {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti, opts) {\n\treturn formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell, supbooks, opts) {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack = [], e1, e2, c, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\":\"+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\nc = shift_cell_xls((f[1][1]), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\nc = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\nixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc = (f[1][0]), func = (f[1][1]);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(f[1]); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(f[1]); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\nr = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\nr = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\nixti = f[1][1]; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\tif(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx = (f[1][1]); nameidx = (f[1][2]); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]),r:(f[1][0])};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r});\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(f[1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(f[1]) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell, R, C, opts, os) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLS] 2.5.198.4 */\nvar Cetab = {\n0x0000: 'BEEP',\n0x0001: 'OPEN',\n0x0002: 'OPEN.LINKS',\n0x0003: 'CLOSE.ALL',\n0x0004: 'SAVE',\n0x0005: 'SAVE.AS',\n0x0006: 'FILE.DELETE',\n0x0007: 'PAGE.SETUP',\n0x0008: 'PRINT',\n0x0009: 'PRINTER.SETUP',\n0x000A: 'QUIT',\n0x000B: 'NEW.WINDOW',\n0x000C: 'ARRANGE.ALL',\n0x000D: 'WINDOW.SIZE',\n0x000E: 'WINDOW.MOVE',\n0x000F: 'FULL',\n0x0010: 'CLOSE',\n0x0011: 'RUN',\n0x0016: 'SET.PRINT.AREA',\n0x0017: 'SET.PRINT.TITLES',\n0x0018: 'SET.PAGE.BREAK',\n0x0019: 'REMOVE.PAGE.BREAK',\n0x001A: 'FONT',\n0x001B: 'DISPLAY',\n0x001C: 'PROTECT.DOCUMENT',\n0x001D: 'PRECISION',\n0x001E: 'A1.R1C1',\n0x001F: 'CALCULATE.NOW',\n0x0020: 'CALCULATION',\n0x0022: 'DATA.FIND',\n0x0023: 'EXTRACT',\n0x0024: 'DATA.DELETE',\n0x0025: 'SET.DATABASE',\n0x0026: 'SET.CRITERIA',\n0x0027: 'SORT',\n0x0028: 'DATA.SERIES',\n0x0029: 'TABLE',\n0x002A: 'FORMAT.NUMBER',\n0x002B: 'ALIGNMENT',\n0x002C: 'STYLE',\n0x002D: 'BORDER',\n0x002E: 'CELL.PROTECTION',\n0x002F: 'COLUMN.WIDTH',\n0x0030: 'UNDO',\n0x0031: 'CUT',\n0x0032: 'COPY',\n0x0033: 'PASTE',\n0x0034: 'CLEAR',\n0x0035: 'PASTE.SPECIAL',\n0x0036: 'EDIT.DELETE',\n0x0037: 'INSERT',\n0x0038: 'FILL.RIGHT',\n0x0039: 'FILL.DOWN',\n0x003D: 'DEFINE.NAME',\n0x003E: 'CREATE.NAMES',\n0x003F: 'FORMULA.GOTO',\n0x0040: 'FORMULA.FIND',\n0x0041: 'SELECT.LAST.CELL',\n0x0042: 'SHOW.ACTIVE.CELL',\n0x0043: 'GALLERY.AREA',\n0x0044: 'GALLERY.BAR',\n0x0045: 'GALLERY.COLUMN',\n0x0046: 'GALLERY.LINE',\n0x0047: 'GALLERY.PIE',\n0x0048: 'GALLERY.SCATTER',\n0x0049: 'COMBINATION',\n0x004A: 'PREFERRED',\n0x004B: 'ADD.OVERLAY',\n0x004C: 'GRIDLINES',\n0x004D: 'SET.PREFERRED',\n0x004E: 'AXES',\n0x004F: 'LEGEND',\n0x0050: 'ATTACH.TEXT',\n0x0051: 'ADD.ARROW',\n0x0052: 'SELECT.CHART',\n0x0053: 'SELECT.PLOT.AREA',\n0x0054: 'PATTERNS',\n0x0055: 'MAIN.CHART',\n0x0056: 'OVERLAY',\n0x0057: 'SCALE',\n0x0058: 'FORMAT.LEGEND',\n0x0059: 'FORMAT.TEXT',\n0x005A: 'EDIT.REPEAT',\n0x005B: 'PARSE',\n0x005C: 'JUSTIFY',\n0x005D: 'HIDE',\n0x005E: 'UNHIDE',\n0x005F: 'WORKSPACE',\n0x0060: 'FORMULA',\n0x0061: 'FORMULA.FILL',\n0x0062: 'FORMULA.ARRAY',\n0x0063: 'DATA.FIND.NEXT',\n0x0064: 'DATA.FIND.PREV',\n0x0065: 'FORMULA.FIND.NEXT',\n0x0066: 'FORMULA.FIND.PREV',\n0x0067: 'ACTIVATE',\n0x0068: 'ACTIVATE.NEXT',\n0x0069: 'ACTIVATE.PREV',\n0x006A: 'UNLOCKED.NEXT',\n0x006B: 'UNLOCKED.PREV',\n0x006C: 'COPY.PICTURE',\n0x006D: 'SELECT',\n0x006E: 'DELETE.NAME',\n0x006F: 'DELETE.FORMAT',\n0x0070: 'VLINE',\n0x0071: 'HLINE',\n0x0072: 'VPAGE',\n0x0073: 'HPAGE',\n0x0074: 'VSCROLL',\n0x0075: 'HSCROLL',\n0x0076: 'ALERT',\n0x0077: 'NEW',\n0x0078: 'CANCEL.COPY',\n0x0079: 'SHOW.CLIPBOARD',\n0x007A: 'MESSAGE',\n0x007C: 'PASTE.LINK',\n0x007D: 'APP.ACTIVATE',\n0x007E: 'DELETE.ARROW',\n0x007F: 'ROW.HEIGHT',\n0x0080: 'FORMAT.MOVE',\n0x0081: 'FORMAT.SIZE',\n0x0082: 'FORMULA.REPLACE',\n0x0083: 'SEND.KEYS',\n0x0084: 'SELECT.SPECIAL',\n0x0085: 'APPLY.NAMES',\n0x0086: 'REPLACE.FONT',\n0x0087: 'FREEZE.PANES',\n0x0088: 'SHOW.INFO',\n0x0089: 'SPLIT',\n0x008A: 'ON.WINDOW',\n0x008B: 'ON.DATA',\n0x008C: 'DISABLE.INPUT',\n0x008E: 'OUTLINE',\n0x008F: 'LIST.NAMES',\n0x0090: 'FILE.CLOSE',\n0x0091: 'SAVE.WORKBOOK',\n0x0092: 'DATA.FORM',\n0x0093: 'COPY.CHART',\n0x0094: 'ON.TIME',\n0x0095: 'WAIT',\n0x0096: 'FORMAT.FONT',\n0x0097: 'FILL.UP',\n0x0098: 'FILL.LEFT',\n0x0099: 'DELETE.OVERLAY',\n0x009B: 'SHORT.MENUS',\n0x009F: 'SET.UPDATE.STATUS',\n0x00A1: 'COLOR.PALETTE',\n0x00A2: 'DELETE.STYLE',\n0x00A3: 'WINDOW.RESTORE',\n0x00A4: 'WINDOW.MAXIMIZE',\n0x00A6: 'CHANGE.LINK',\n0x00A7: 'CALCULATE.DOCUMENT',\n0x00A8: 'ON.KEY',\n0x00A9: 'APP.RESTORE',\n0x00AA: 'APP.MOVE',\n0x00AB: 'APP.SIZE',\n0x00AC: 'APP.MINIMIZE',\n0x00AD: 'APP.MAXIMIZE',\n0x00AE: 'BRING.TO.FRONT',\n0x00AF: 'SEND.TO.BACK',\n0x00B9: 'MAIN.CHART.TYPE',\n0x00BA: 'OVERLAY.CHART.TYPE',\n0x00BB: 'SELECT.END',\n0x00BC: 'OPEN.MAIL',\n0x00BD: 'SEND.MAIL',\n0x00BE: 'STANDARD.FONT',\n0x00BF: 'CONSOLIDATE',\n0x00C0: 'SORT.SPECIAL',\n0x00C1: 'GALLERY.3D.AREA',\n0x00C2: 'GALLERY.3D.COLUMN',\n0x00C3: 'GALLERY.3D.LINE',\n0x00C4: 'GALLERY.3D.PIE',\n0x00C5: 'VIEW.3D',\n0x00C6: 'GOAL.SEEK',\n0x00C7: 'WORKGROUP',\n0x00C8: 'FILL.GROUP',\n0x00C9: 'UPDATE.LINK',\n0x00CA: 'PROMOTE',\n0x00CB: 'DEMOTE',\n0x00CC: 'SHOW.DETAIL',\n0x00CE: 'UNGROUP',\n0x00CF: 'OBJECT.PROPERTIES',\n0x00D0: 'SAVE.NEW.OBJECT',\n0x00D1: 'SHARE',\n0x00D2: 'SHARE.NAME',\n0x00D3: 'DUPLICATE',\n0x00D4: 'APPLY.STYLE',\n0x00D5: 'ASSIGN.TO.OBJECT',\n0x00D6: 'OBJECT.PROTECTION',\n0x00D7: 'HIDE.OBJECT',\n0x00D8: 'SET.EXTRACT',\n0x00D9: 'CREATE.PUBLISHER',\n0x00DA: 'SUBSCRIBE.TO',\n0x00DB: 'ATTRIBUTES',\n0x00DC: 'SHOW.TOOLBAR',\n0x00DE: 'PRINT.PREVIEW',\n0x00DF: 'EDIT.COLOR',\n0x00E0: 'SHOW.LEVELS',\n0x00E1: 'FORMAT.MAIN',\n0x00E2: 'FORMAT.OVERLAY',\n0x00E3: 'ON.RECALC',\n0x00E4: 'EDIT.SERIES',\n0x00E5: 'DEFINE.STYLE',\n0x00F0: 'LINE.PRINT',\n0x00F3: 'ENTER.DATA',\n0x00F9: 'GALLERY.RADAR',\n0x00FA: 'MERGE.STYLES',\n0x00FB: 'EDITION.OPTIONS',\n0x00FC: 'PASTE.PICTURE',\n0x00FD: 'PASTE.PICTURE.LINK',\n0x00FE: 'SPELLING',\n0x0100: 'ZOOM',\n0x0103: 'INSERT.OBJECT',\n0x0104: 'WINDOW.MINIMIZE',\n0x0109: 'SOUND.NOTE',\n0x010A: 'SOUND.PLAY',\n0x010B: 'FORMAT.SHAPE',\n0x010C: 'EXTEND.POLYGON',\n0x010D: 'FORMAT.AUTO',\n0x0110: 'GALLERY.3D.BAR',\n0x0111: 'GALLERY.3D.SURFACE',\n0x0112: 'FILL.AUTO',\n0x0114: 'CUSTOMIZE.TOOLBAR',\n0x0115: 'ADD.TOOL',\n0x0116: 'EDIT.OBJECT',\n0x0117: 'ON.DOUBLECLICK',\n0x0118: 'ON.ENTRY',\n0x0119: 'WORKBOOK.ADD',\n0x011A: 'WORKBOOK.MOVE',\n0x011B: 'WORKBOOK.COPY',\n0x011C: 'WORKBOOK.OPTIONS',\n0x011D: 'SAVE.WORKSPACE',\n0x0120: 'CHART.WIZARD',\n0x0121: 'DELETE.TOOL',\n0x0122: 'MOVE.TOOL',\n0x0123: 'WORKBOOK.SELECT',\n0x0124: 'WORKBOOK.ACTIVATE',\n0x0125: 'ASSIGN.TO.TOOL',\n0x0127: 'COPY.TOOL',\n0x0128: 'RESET.TOOL',\n0x0129: 'CONSTRAIN.NUMERIC',\n0x012A: 'PASTE.TOOL',\n0x012E: 'WORKBOOK.NEW',\n0x0131: 'SCENARIO.CELLS',\n0x0132: 'SCENARIO.DELETE',\n0x0133: 'SCENARIO.ADD',\n0x0134: 'SCENARIO.EDIT',\n0x0135: 'SCENARIO.SHOW',\n0x0136: 'SCENARIO.SHOW.NEXT',\n0x0137: 'SCENARIO.SUMMARY',\n0x0138: 'PIVOT.TABLE.WIZARD',\n0x0139: 'PIVOT.FIELD.PROPERTIES',\n0x013A: 'PIVOT.FIELD',\n0x013B: 'PIVOT.ITEM',\n0x013C: 'PIVOT.ADD.FIELDS',\n0x013E: 'OPTIONS.CALCULATION',\n0x013F: 'OPTIONS.EDIT',\n0x0140: 'OPTIONS.VIEW',\n0x0141: 'ADDIN.MANAGER',\n0x0142: 'MENU.EDITOR',\n0x0143: 'ATTACH.TOOLBARS',\n0x0144: 'VBAActivate',\n0x0145: 'OPTIONS.CHART',\n0x0148: 'VBA.INSERT.FILE',\n0x014A: 'VBA.PROCEDURE.DEFINITION',\n0x0150: 'ROUTING.SLIP',\n0x0152: 'ROUTE.DOCUMENT',\n0x0153: 'MAIL.LOGON',\n0x0156: 'INSERT.PICTURE',\n0x0157: 'EDIT.TOOL',\n0x0158: 'GALLERY.DOUGHNUT',\n0x015E: 'CHART.TREND',\n0x0160: 'PIVOT.ITEM.PROPERTIES',\n0x0162: 'WORKBOOK.INSERT',\n0x0163: 'OPTIONS.TRANSITION',\n0x0164: 'OPTIONS.GENERAL',\n0x0172: 'FILTER.ADVANCED',\n0x0175: 'MAIL.ADD.MAILER',\n0x0176: 'MAIL.DELETE.MAILER',\n0x0177: 'MAIL.REPLY',\n0x0178: 'MAIL.REPLY.ALL',\n0x0179: 'MAIL.FORWARD',\n0x017A: 'MAIL.NEXT.LETTER',\n0x017B: 'DATA.LABEL',\n0x017C: 'INSERT.TITLE',\n0x017D: 'FONT.PROPERTIES',\n0x017E: 'MACRO.OPTIONS',\n0x017F: 'WORKBOOK.HIDE',\n0x0180: 'WORKBOOK.UNHIDE',\n0x0181: 'WORKBOOK.DELETE',\n0x0182: 'WORKBOOK.NAME',\n0x0184: 'GALLERY.CUSTOM',\n0x0186: 'ADD.CHART.AUTOFORMAT',\n0x0187: 'DELETE.CHART.AUTOFORMAT',\n0x0188: 'CHART.ADD.DATA',\n0x0189: 'AUTO.OUTLINE',\n0x018A: 'TAB.ORDER',\n0x018B: 'SHOW.DIALOG',\n0x018C: 'SELECT.ALL',\n0x018D: 'UNGROUP.SHEETS',\n0x018E: 'SUBTOTAL.CREATE',\n0x018F: 'SUBTOTAL.REMOVE',\n0x0190: 'RENAME.OBJECT',\n0x019C: 'WORKBOOK.SCROLL',\n0x019D: 'WORKBOOK.NEXT',\n0x019E: 'WORKBOOK.PREV',\n0x019F: 'WORKBOOK.TAB.SPLIT',\n0x01A0: 'FULL.SCREEN',\n0x01A1: 'WORKBOOK.PROTECT',\n0x01A4: 'SCROLLBAR.PROPERTIES',\n0x01A5: 'PIVOT.SHOW.PAGES',\n0x01A6: 'TEXT.TO.COLUMNS',\n0x01A7: 'FORMAT.CHARTTYPE',\n0x01A8: 'LINK.FORMAT',\n0x01A9: 'TRACER.DISPLAY',\n0x01AE: 'TRACER.NAVIGATE',\n0x01AF: 'TRACER.CLEAR',\n0x01B0: 'TRACER.ERROR',\n0x01B1: 'PIVOT.FIELD.GROUP',\n0x01B2: 'PIVOT.FIELD.UNGROUP',\n0x01B3: 'CHECKBOX.PROPERTIES',\n0x01B4: 'LABEL.PROPERTIES',\n0x01B5: 'LISTBOX.PROPERTIES',\n0x01B6: 'EDITBOX.PROPERTIES',\n0x01B7: 'PIVOT.REFRESH',\n0x01B8: 'LINK.COMBO',\n0x01B9: 'OPEN.TEXT',\n0x01BA: 'HIDE.DIALOG',\n0x01BB: 'SET.DIALOG.FOCUS',\n0x01BC: 'ENABLE.OBJECT',\n0x01BD: 'PUSHBUTTON.PROPERTIES',\n0x01BE: 'SET.DIALOG.DEFAULT',\n0x01BF: 'FILTER',\n0x01C0: 'FILTER.SHOW.ALL',\n0x01C1: 'CLEAR.OUTLINE',\n0x01C2: 'FUNCTION.WIZARD',\n0x01C3: 'ADD.LIST.ITEM',\n0x01C4: 'SET.LIST.ITEM',\n0x01C5: 'REMOVE.LIST.ITEM',\n0x01C6: 'SELECT.LIST.ITEM',\n0x01C7: 'SET.CONTROL.VALUE',\n0x01C8: 'SAVE.COPY.AS',\n0x01CA: 'OPTIONS.LISTS.ADD',\n0x01CB: 'OPTIONS.LISTS.DELETE',\n0x01CC: 'SERIES.AXES',\n0x01CD: 'SERIES.X',\n0x01CE: 'SERIES.Y',\n0x01CF: 'ERRORBAR.X',\n0x01D0: 'ERRORBAR.Y',\n0x01D1: 'FORMAT.CHART',\n0x01D2: 'SERIES.ORDER',\n0x01D3: 'MAIL.LOGOFF',\n0x01D4: 'CLEAR.ROUTING.SLIP',\n0x01D5: 'APP.ACTIVATE.MICROSOFT',\n0x01D6: 'MAIL.EDIT.MAILER',\n0x01D7: 'ON.SHEET',\n0x01D8: 'STANDARD.WIDTH',\n0x01D9: 'SCENARIO.MERGE',\n0x01DA: 'SUMMARY.INFO',\n0x01DB: 'FIND.FILE',\n0x01DC: 'ACTIVE.CELL.FONT',\n0x01DD: 'ENABLE.TIPWIZARD',\n0x01DE: 'VBA.MAKE.ADDIN',\n0x01E0: 'INSERTDATATABLE',\n0x01E1: 'WORKGROUP.OPTIONS',\n0x01E2: 'MAIL.SEND.MAILER',\n0x01E5: 'AUTOCORRECT',\n0x01E9: 'POST.DOCUMENT',\n0x01EB: 'PICKLIST',\n0x01ED: 'VIEW.SHOW',\n0x01EE: 'VIEW.DEFINE',\n0x01EF: 'VIEW.DELETE',\n0x01FD: 'SHEET.BACKGROUND',\n0x01FE: 'INSERT.MAP.OBJECT',\n0x01FF: 'OPTIONS.MENONO',\n0x0205: 'MSOCHECKS',\n0x0206: 'NORMAL',\n0x0207: 'LAYOUT',\n0x0208: 'RM.PRINT.AREA',\n0x0209: 'CLEAR.PRINT.AREA',\n0x020A: 'ADD.PRINT.AREA',\n0x020B: 'MOVE.BRK',\n0x0221: 'HIDECURR.NOTE',\n0x0222: 'HIDEALL.NOTES',\n0x0223: 'DELETE.NOTE',\n0x0224: 'TRAVERSE.NOTES',\n0x0225: 'ACTIVATE.NOTES',\n0x026C: 'PROTECT.REVISIONS',\n0x026D: 'UNPROTECT.REVISIONS',\n0x0287: 'OPTIONS.ME',\n0x028D: 'WEB.PUBLISH',\n0x029B: 'NEWWEBQUERY',\n0x02A1: 'PIVOT.TABLE.CHART',\n0x02F1: 'OPTIONS.SAVE',\n0x02F3: 'OPTIONS.SPELL',\n0x0328: 'HIDEALL.INKANNOTS'\n};\n\n/* [MS-XLS] 2.5.198.17 */\n/* [MS-XLSB] 2.5.97.10 */\nvar Ftab = {\n0x0000: 'COUNT',\n0x0001: 'IF',\n0x0002: 'ISNA',\n0x0003: 'ISERROR',\n0x0004: 'SUM',\n0x0005: 'AVERAGE',\n0x0006: 'MIN',\n0x0007: 'MAX',\n0x0008: 'ROW',\n0x0009: 'COLUMN',\n0x000A: 'NA',\n0x000B: 'NPV',\n0x000C: 'STDEV',\n0x000D: 'DOLLAR',\n0x000E: 'FIXED',\n0x000F: 'SIN',\n0x0010: 'COS',\n0x0011: 'TAN',\n0x0012: 'ATAN',\n0x0013: 'PI',\n0x0014: 'SQRT',\n0x0015: 'EXP',\n0x0016: 'LN',\n0x0017: 'LOG10',\n0x0018: 'ABS',\n0x0019: 'INT',\n0x001A: 'SIGN',\n0x001B: 'ROUND',\n0x001C: 'LOOKUP',\n0x001D: 'INDEX',\n0x001E: 'REPT',\n0x001F: 'MID',\n0x0020: 'LEN',\n0x0021: 'VALUE',\n0x0022: 'TRUE',\n0x0023: 'FALSE',\n0x0024: 'AND',\n0x0025: 'OR',\n0x0026: 'NOT',\n0x0027: 'MOD',\n0x0028: 'DCOUNT',\n0x0029: 'DSUM',\n0x002A: 'DAVERAGE',\n0x002B: 'DMIN',\n0x002C: 'DMAX',\n0x002D: 'DSTDEV',\n0x002E: 'VAR',\n0x002F: 'DVAR',\n0x0030: 'TEXT',\n0x0031: 'LINEST',\n0x0032: 'TREND',\n0x0033: 'LOGEST',\n0x0034: 'GROWTH',\n0x0035: 'GOTO',\n0x0036: 'HALT',\n0x0037: 'RETURN',\n0x0038: 'PV',\n0x0039: 'FV',\n0x003A: 'NPER',\n0x003B: 'PMT',\n0x003C: 'RATE',\n0x003D: 'MIRR',\n0x003E: 'IRR',\n0x003F: 'RAND',\n0x0040: 'MATCH',\n0x0041: 'DATE',\n0x0042: 'TIME',\n0x0043: 'DAY',\n0x0044: 'MONTH',\n0x0045: 'YEAR',\n0x0046: 'WEEKDAY',\n0x0047: 'HOUR',\n0x0048: 'MINUTE',\n0x0049: 'SECOND',\n0x004A: 'NOW',\n0x004B: 'AREAS',\n0x004C: 'ROWS',\n0x004D: 'COLUMNS',\n0x004E: 'OFFSET',\n0x004F: 'ABSREF',\n0x0050: 'RELREF',\n0x0051: 'ARGUMENT',\n0x0052: 'SEARCH',\n0x0053: 'TRANSPOSE',\n0x0054: 'ERROR',\n0x0055: 'STEP',\n0x0056: 'TYPE',\n0x0057: 'ECHO',\n0x0058: 'SET.NAME',\n0x0059: 'CALLER',\n0x005A: 'DEREF',\n0x005B: 'WINDOWS',\n0x005C: 'SERIES',\n0x005D: 'DOCUMENTS',\n0x005E: 'ACTIVE.CELL',\n0x005F: 'SELECTION',\n0x0060: 'RESULT',\n0x0061: 'ATAN2',\n0x0062: 'ASIN',\n0x0063: 'ACOS',\n0x0064: 'CHOOSE',\n0x0065: 'HLOOKUP',\n0x0066: 'VLOOKUP',\n0x0067: 'LINKS',\n0x0068: 'INPUT',\n0x0069: 'ISREF',\n0x006A: 'GET.FORMULA',\n0x006B: 'GET.NAME',\n0x006C: 'SET.VALUE',\n0x006D: 'LOG',\n0x006E: 'EXEC',\n0x006F: 'CHAR',\n0x0070: 'LOWER',\n0x0071: 'UPPER',\n0x0072: 'PROPER',\n0x0073: 'LEFT',\n0x0074: 'RIGHT',\n0x0075: 'EXACT',\n0x0076: 'TRIM',\n0x0077: 'REPLACE',\n0x0078: 'SUBSTITUTE',\n0x0079: 'CODE',\n0x007A: 'NAMES',\n0x007B: 'DIRECTORY',\n0x007C: 'FIND',\n0x007D: 'CELL',\n0x007E: 'ISERR',\n0x007F: 'ISTEXT',\n0x0080: 'ISNUMBER',\n0x0081: 'ISBLANK',\n0x0082: 'T',\n0x0083: 'N',\n0x0084: 'FOPEN',\n0x0085: 'FCLOSE',\n0x0086: 'FSIZE',\n0x0087: 'FREADLN',\n0x0088: 'FREAD',\n0x0089: 'FWRITELN',\n0x008A: 'FWRITE',\n0x008B: 'FPOS',\n0x008C: 'DATEVALUE',\n0x008D: 'TIMEVALUE',\n0x008E: 'SLN',\n0x008F: 'SYD',\n0x0090: 'DDB',\n0x0091: 'GET.DEF',\n0x0092: 'REFTEXT',\n0x0093: 'TEXTREF',\n0x0094: 'INDIRECT',\n0x0095: 'REGISTER',\n0x0096: 'CALL',\n0x0097: 'ADD.BAR',\n0x0098: 'ADD.MENU',\n0x0099: 'ADD.COMMAND',\n0x009A: 'ENABLE.COMMAND',\n0x009B: 'CHECK.COMMAND',\n0x009C: 'RENAME.COMMAND',\n0x009D: 'SHOW.BAR',\n0x009E: 'DELETE.MENU',\n0x009F: 'DELETE.COMMAND',\n0x00A0: 'GET.CHART.ITEM',\n0x00A1: 'DIALOG.BOX',\n0x00A2: 'CLEAN',\n0x00A3: 'MDETERM',\n0x00A4: 'MINVERSE',\n0x00A5: 'MMULT',\n0x00A6: 'FILES',\n0x00A7: 'IPMT',\n0x00A8: 'PPMT',\n0x00A9: 'COUNTA',\n0x00AA: 'CANCEL.KEY',\n0x00AB: 'FOR',\n0x00AC: 'WHILE',\n0x00AD: 'BREAK',\n0x00AE: 'NEXT',\n0x00AF: 'INITIATE',\n0x00B0: 'REQUEST',\n0x00B1: 'POKE',\n0x00B2: 'EXECUTE',\n0x00B3: 'TERMINATE',\n0x00B4: 'RESTART',\n0x00B5: 'HELP',\n0x00B6: 'GET.BAR',\n0x00B7: 'PRODUCT',\n0x00B8: 'FACT',\n0x00B9: 'GET.CELL',\n0x00BA: 'GET.WORKSPACE',\n0x00BB: 'GET.WINDOW',\n0x00BC: 'GET.DOCUMENT',\n0x00BD: 'DPRODUCT',\n0x00BE: 'ISNONTEXT',\n0x00BF: 'GET.NOTE',\n0x00C0: 'NOTE',\n0x00C1: 'STDEVP',\n0x00C2: 'VARP',\n0x00C3: 'DSTDEVP',\n0x00C4: 'DVARP',\n0x00C5: 'TRUNC',\n0x00C6: 'ISLOGICAL',\n0x00C7: 'DCOUNTA',\n0x00C8: 'DELETE.BAR',\n0x00C9: 'UNREGISTER',\n0x00CC: 'USDOLLAR',\n0x00CD: 'FINDB',\n0x00CE: 'SEARCHB',\n0x00CF: 'REPLACEB',\n0x00D0: 'LEFTB',\n0x00D1: 'RIGHTB',\n0x00D2: 'MIDB',\n0x00D3: 'LENB',\n0x00D4: 'ROUNDUP',\n0x00D5: 'ROUNDDOWN',\n0x00D6: 'ASC',\n0x00D7: 'DBCS',\n0x00D8: 'RANK',\n0x00DB: 'ADDRESS',\n0x00DC: 'DAYS360',\n0x00DD: 'TODAY',\n0x00DE: 'VDB',\n0x00DF: 'ELSE',\n0x00E0: 'ELSE.IF',\n0x00E1: 'END.IF',\n0x00E2: 'FOR.CELL',\n0x00E3: 'MEDIAN',\n0x00E4: 'SUMPRODUCT',\n0x00E5: 'SINH',\n0x00E6: 'COSH',\n0x00E7: 'TANH',\n0x00E8: 'ASINH',\n0x00E9: 'ACOSH',\n0x00EA: 'ATANH',\n0x00EB: 'DGET',\n0x00EC: 'CREATE.OBJECT',\n0x00ED: 'VOLATILE',\n0x00EE: 'LAST.ERROR',\n0x00EF: 'CUSTOM.UNDO',\n0x00F0: 'CUSTOM.REPEAT',\n0x00F1: 'FORMULA.CONVERT',\n0x00F2: 'GET.LINK.INFO',\n0x00F3: 'TEXT.BOX',\n0x00F4: 'INFO',\n0x00F5: 'GROUP',\n0x00F6: 'GET.OBJECT',\n0x00F7: 'DB',\n0x00F8: 'PAUSE',\n0x00FB: 'RESUME',\n0x00FC: 'FREQUENCY',\n0x00FD: 'ADD.TOOLBAR',\n0x00FE: 'DELETE.TOOLBAR',\n0x00FF: 'User',\n0x0100: 'RESET.TOOLBAR',\n0x0101: 'EVALUATE',\n0x0102: 'GET.TOOLBAR',\n0x0103: 'GET.TOOL',\n0x0104: 'SPELLING.CHECK',\n0x0105: 'ERROR.TYPE',\n0x0106: 'APP.TITLE',\n0x0107: 'WINDOW.TITLE',\n0x0108: 'SAVE.TOOLBAR',\n0x0109: 'ENABLE.TOOL',\n0x010A: 'PRESS.TOOL',\n0x010B: 'REGISTER.ID',\n0x010C: 'GET.WORKBOOK',\n0x010D: 'AVEDEV',\n0x010E: 'BETADIST',\n0x010F: 'GAMMALN',\n0x0110: 'BETAINV',\n0x0111: 'BINOMDIST',\n0x0112: 'CHIDIST',\n0x0113: 'CHIINV',\n0x0114: 'COMBIN',\n0x0115: 'CONFIDENCE',\n0x0116: 'CRITBINOM',\n0x0117: 'EVEN',\n0x0118: 'EXPONDIST',\n0x0119: 'FDIST',\n0x011A: 'FINV',\n0x011B: 'FISHER',\n0x011C: 'FISHERINV',\n0x011D: 'FLOOR',\n0x011E: 'GAMMADIST',\n0x011F: 'GAMMAINV',\n0x0120: 'CEILING',\n0x0121: 'HYPGEOMDIST',\n0x0122: 'LOGNORMDIST',\n0x0123: 'LOGINV',\n0x0124: 'NEGBINOMDIST',\n0x0125: 'NORMDIST',\n0x0126: 'NORMSDIST',\n0x0127: 'NORMINV',\n0x0128: 'NORMSINV',\n0x0129: 'STANDARDIZE',\n0x012A: 'ODD',\n0x012B: 'PERMUT',\n0x012C: 'POISSON',\n0x012D: 'TDIST',\n0x012E: 'WEIBULL',\n0x012F: 'SUMXMY2',\n0x0130: 'SUMX2MY2',\n0x0131: 'SUMX2PY2',\n0x0132: 'CHITEST',\n0x0133: 'CORREL',\n0x0134: 'COVAR',\n0x0135: 'FORECAST',\n0x0136: 'FTEST',\n0x0137: 'INTERCEPT',\n0x0138: 'PEARSON',\n0x0139: 'RSQ',\n0x013A: 'STEYX',\n0x013B: 'SLOPE',\n0x013C: 'TTEST',\n0x013D: 'PROB',\n0x013E: 'DEVSQ',\n0x013F: 'GEOMEAN',\n0x0140: 'HARMEAN',\n0x0141: 'SUMSQ',\n0x0142: 'KURT',\n0x0143: 'SKEW',\n0x0144: 'ZTEST',\n0x0145: 'LARGE',\n0x0146: 'SMALL',\n0x0147: 'QUARTILE',\n0x0148: 'PERCENTILE',\n0x0149: 'PERCENTRANK',\n0x014A: 'MODE',\n0x014B: 'TRIMMEAN',\n0x014C: 'TINV',\n0x014E: 'MOVIE.COMMAND',\n0x014F: 'GET.MOVIE',\n0x0150: 'CONCATENATE',\n0x0151: 'POWER',\n0x0152: 'PIVOT.ADD.DATA',\n0x0153: 'GET.PIVOT.TABLE',\n0x0154: 'GET.PIVOT.FIELD',\n0x0155: 'GET.PIVOT.ITEM',\n0x0156: 'RADIANS',\n0x0157: 'DEGREES',\n0x0158: 'SUBTOTAL',\n0x0159: 'SUMIF',\n0x015A: 'COUNTIF',\n0x015B: 'COUNTBLANK',\n0x015C: 'SCENARIO.GET',\n0x015D: 'OPTIONS.LISTS.GET',\n0x015E: 'ISPMT',\n0x015F: 'DATEDIF',\n0x0160: 'DATESTRING',\n0x0161: 'NUMBERSTRING',\n0x0162: 'ROMAN',\n0x0163: 'OPEN.DIALOG',\n0x0164: 'SAVE.DIALOG',\n0x0165: 'VIEW.GET',\n0x0166: 'GETPIVOTDATA',\n0x0167: 'HYPERLINK',\n0x0168: 'PHONETIC',\n0x0169: 'AVERAGEA',\n0x016A: 'MAXA',\n0x016B: 'MINA',\n0x016C: 'STDEVPA',\n0x016D: 'VARPA',\n0x016E: 'STDEVA',\n0x016F: 'VARA',\n0x0170: 'BAHTTEXT',\n0x0171: 'THAIDAYOFWEEK',\n0x0172: 'THAIDIGIT',\n0x0173: 'THAIMONTHOFYEAR',\n0x0174: 'THAINUMSOUND',\n0x0175: 'THAINUMSTRING',\n0x0176: 'THAISTRINGLENGTH',\n0x0177: 'ISTHAIDIGIT',\n0x0178: 'ROUNDBAHTDOWN',\n0x0179: 'ROUNDBAHTUP',\n0x017A: 'THAIYEAR',\n0x017B: 'RTD',\n\n0x017C: 'CUBEVALUE',\n0x017D: 'CUBEMEMBER',\n0x017E: 'CUBEMEMBERPROPERTY',\n0x017F: 'CUBERANKEDMEMBER',\n0x0180: 'HEX2BIN',\n0x0181: 'HEX2DEC',\n0x0182: 'HEX2OCT',\n0x0183: 'DEC2BIN',\n0x0184: 'DEC2HEX',\n0x0185: 'DEC2OCT',\n0x0186: 'OCT2BIN',\n0x0187: 'OCT2HEX',\n0x0188: 'OCT2DEC',\n0x0189: 'BIN2DEC',\n0x018A: 'BIN2OCT',\n0x018B: 'BIN2HEX',\n0x018C: 'IMSUB',\n0x018D: 'IMDIV',\n0x018E: 'IMPOWER',\n0x018F: 'IMABS',\n0x0190: 'IMSQRT',\n0x0191: 'IMLN',\n0x0192: 'IMLOG2',\n0x0193: 'IMLOG10',\n0x0194: 'IMSIN',\n0x0195: 'IMCOS',\n0x0196: 'IMEXP',\n0x0197: 'IMARGUMENT',\n0x0198: 'IMCONJUGATE',\n0x0199: 'IMAGINARY',\n0x019A: 'IMREAL',\n0x019B: 'COMPLEX',\n0x019C: 'IMSUM',\n0x019D: 'IMPRODUCT',\n0x019E: 'SERIESSUM',\n0x019F: 'FACTDOUBLE',\n0x01A0: 'SQRTPI',\n0x01A1: 'QUOTIENT',\n0x01A2: 'DELTA',\n0x01A3: 'GESTEP',\n0x01A4: 'ISEVEN',\n0x01A5: 'ISODD',\n0x01A6: 'MROUND',\n0x01A7: 'ERF',\n0x01A8: 'ERFC',\n0x01A9: 'BESSELJ',\n0x01AA: 'BESSELK',\n0x01AB: 'BESSELY',\n0x01AC: 'BESSELI',\n0x01AD: 'XIRR',\n0x01AE: 'XNPV',\n0x01AF: 'PRICEMAT',\n0x01B0: 'YIELDMAT',\n0x01B1: 'INTRATE',\n0x01B2: 'RECEIVED',\n0x01B3: 'DISC',\n0x01B4: 'PRICEDISC',\n0x01B5: 'YIELDDISC',\n0x01B6: 'TBILLEQ',\n0x01B7: 'TBILLPRICE',\n0x01B8: 'TBILLYIELD',\n0x01B9: 'PRICE',\n0x01BA: 'YIELD',\n0x01BB: 'DOLLARDE',\n0x01BC: 'DOLLARFR',\n0x01BD: 'NOMINAL',\n0x01BE: 'EFFECT',\n0x01BF: 'CUMPRINC',\n0x01C0: 'CUMIPMT',\n0x01C1: 'EDATE',\n0x01C2: 'EOMONTH',\n0x01C3: 'YEARFRAC',\n0x01C4: 'COUPDAYBS',\n0x01C5: 'COUPDAYS',\n0x01C6: 'COUPDAYSNC',\n0x01C7: 'COUPNCD',\n0x01C8: 'COUPNUM',\n0x01C9: 'COUPPCD',\n0x01CA: 'DURATION',\n0x01CB: 'MDURATION',\n0x01CC: 'ODDLPRICE',\n0x01CD: 'ODDLYIELD',\n0x01CE: 'ODDFPRICE',\n0x01CF: 'ODDFYIELD',\n0x01D0: 'RANDBETWEEN',\n0x01D1: 'WEEKNUM',\n0x01D2: 'AMORDEGRC',\n0x01D3: 'AMORLINC',\n0x01D4: 'CONVERT',\n0x02D4: 'SHEETJS',\n0x01D5: 'ACCRINT',\n0x01D6: 'ACCRINTM',\n0x01D7: 'WORKDAY',\n0x01D8: 'NETWORKDAYS',\n0x01D9: 'GCD',\n0x01DA: 'MULTINOMIAL',\n0x01DB: 'LCM',\n0x01DC: 'FVSCHEDULE',\n0x01DD: 'CUBEKPIMEMBER',\n0x01DE: 'CUBESET',\n0x01DF: 'CUBESETCOUNT',\n0x01E0: 'IFERROR',\n0x01E1: 'COUNTIFS',\n0x01E2: 'SUMIFS',\n0x01E3: 'AVERAGEIF',\n0x01E4: 'AVERAGEIFS'\n};\nvar FtabArgc = {\n0x0002: 1, /* ISNA */\n0x0003: 1, /* ISERROR */\n0x000A: 0, /* NA */\n0x000F: 1, /* SIN */\n0x0010: 1, /* COS */\n0x0011: 1, /* TAN */\n0x0012: 1, /* ATAN */\n0x0013: 0, /* PI */\n0x0014: 1, /* SQRT */\n0x0015: 1, /* EXP */\n0x0016: 1, /* LN */\n0x0017: 1, /* LOG10 */\n0x0018: 1, /* ABS */\n0x0019: 1, /* INT */\n0x001A: 1, /* SIGN */\n0x001B: 2, /* ROUND */\n0x001E: 2, /* REPT */\n0x001F: 3, /* MID */\n0x0020: 1, /* LEN */\n0x0021: 1, /* VALUE */\n0x0022: 0, /* TRUE */\n0x0023: 0, /* FALSE */\n0x0026: 1, /* NOT */\n0x0027: 2, /* MOD */\n0x0028: 3, /* DCOUNT */\n0x0029: 3, /* DSUM */\n0x002A: 3, /* DAVERAGE */\n0x002B: 3, /* DMIN */\n0x002C: 3, /* DMAX */\n0x002D: 3, /* DSTDEV */\n0x002F: 3, /* DVAR */\n0x0030: 2, /* TEXT */\n0x0035: 1, /* GOTO */\n0x003D: 3, /* MIRR */\n0x003F: 0, /* RAND */\n0x0041: 3, /* DATE */\n0x0042: 3, /* TIME */\n0x0043: 1, /* DAY */\n0x0044: 1, /* MONTH */\n0x0045: 1, /* YEAR */\n0x0046: 1, /* WEEKDAY */\n0x0047: 1, /* HOUR */\n0x0048: 1, /* MINUTE */\n0x0049: 1, /* SECOND */\n0x004A: 0, /* NOW */\n0x004B: 1, /* AREAS */\n0x004C: 1, /* ROWS */\n0x004D: 1, /* COLUMNS */\n0x004F: 2, /* ABSREF */\n0x0050: 2, /* RELREF */\n0x0053: 1, /* TRANSPOSE */\n0x0055: 0, /* STEP */\n0x0056: 1, /* TYPE */\n0x0059: 0, /* CALLER */\n0x005A: 1, /* DEREF */\n0x005E: 0, /* ACTIVE.CELL */\n0x005F: 0, /* SELECTION */\n0x0061: 2, /* ATAN2 */\n0x0062: 1, /* ASIN */\n0x0063: 1, /* ACOS */\n0x0065: 3, /* HLOOKUP */\n0x0066: 3, /* VLOOKUP */\n0x0069: 1, /* ISREF */\n0x006A: 1, /* GET.FORMULA */\n0x006C: 2, /* SET.VALUE */\n0x006F: 1, /* CHAR */\n0x0070: 1, /* LOWER */\n0x0071: 1, /* UPPER */\n0x0072: 1, /* PROPER */\n0x0075: 2, /* EXACT */\n0x0076: 1, /* TRIM */\n0x0077: 4, /* REPLACE */\n0x0079: 1, /* CODE */\n0x007E: 1, /* ISERR */\n0x007F: 1, /* ISTEXT */\n0x0080: 1, /* ISNUMBER */\n0x0081: 1, /* ISBLANK */\n0x0082: 1, /* T */\n0x0083: 1, /* N */\n0x0085: 1, /* FCLOSE */\n0x0086: 1, /* FSIZE */\n0x0087: 1, /* FREADLN */\n0x0088: 2, /* FREAD */\n0x0089: 2, /* FWRITELN */\n0x008A: 2, /* FWRITE */\n0x008C: 1, /* DATEVALUE */\n0x008D: 1, /* TIMEVALUE */\n0x008E: 3, /* SLN */\n0x008F: 4, /* SYD */\n0x0090: 4, /* DDB */\n0x00A1: 1, /* DIALOG.BOX */\n0x00A2: 1, /* CLEAN */\n0x00A3: 1, /* MDETERM */\n0x00A4: 1, /* MINVERSE */\n0x00A5: 2, /* MMULT */\n0x00AC: 1, /* WHILE */\n0x00AF: 2, /* INITIATE */\n0x00B0: 2, /* REQUEST */\n0x00B1: 3, /* POKE */\n0x00B2: 2, /* EXECUTE */\n0x00B3: 1, /* TERMINATE */\n0x00B8: 1, /* FACT */\n0x00BA: 1, /* GET.WORKSPACE */\n0x00BD: 3, /* DPRODUCT */\n0x00BE: 1, /* ISNONTEXT */\n0x00C3: 3, /* DSTDEVP */\n0x00C4: 3, /* DVARP */\n0x00C5: 1, /* TRUNC */\n0x00C6: 1, /* ISLOGICAL */\n0x00C7: 3, /* DCOUNTA */\n0x00C9: 1, /* UNREGISTER */\n0x00CF: 4, /* REPLACEB */\n0x00D2: 3, /* MIDB */\n0x00D3: 1, /* LENB */\n0x00D4: 2, /* ROUNDUP */\n0x00D5: 2, /* ROUNDDOWN */\n0x00D6: 1, /* ASC */\n0x00D7: 1, /* DBCS */\n0x00E1: 0, /* END.IF */\n0x00E5: 1, /* SINH */\n0x00E6: 1, /* COSH */\n0x00E7: 1, /* TANH */\n0x00E8: 1, /* ASINH */\n0x00E9: 1, /* ACOSH */\n0x00EA: 1, /* ATANH */\n0x00EB: 3, /* DGET */\n0x00F4: 1, /* INFO */\n0x00F7: 4, /* DB */\n0x00FC: 2, /* FREQUENCY */\n0x0101: 1, /* EVALUATE */\n0x0105: 1, /* ERROR.TYPE */\n0x010F: 1, /* GAMMALN */\n0x0111: 4, /* BINOMDIST */\n0x0112: 2, /* CHIDIST */\n0x0113: 2, /* CHIINV */\n0x0114: 2, /* COMBIN */\n0x0115: 3, /* CONFIDENCE */\n0x0116: 3, /* CRITBINOM */\n0x0117: 1, /* EVEN */\n0x0118: 3, /* EXPONDIST */\n0x0119: 3, /* FDIST */\n0x011A: 3, /* FINV */\n0x011B: 1, /* FISHER */\n0x011C: 1, /* FISHERINV */\n0x011D: 2, /* FLOOR */\n0x011E: 4, /* GAMMADIST */\n0x011F: 3, /* GAMMAINV */\n0x0120: 2, /* CEILING */\n0x0121: 4, /* HYPGEOMDIST */\n0x0122: 3, /* LOGNORMDIST */\n0x0123: 3, /* LOGINV */\n0x0124: 3, /* NEGBINOMDIST */\n0x0125: 4, /* NORMDIST */\n0x0126: 1, /* NORMSDIST */\n0x0127: 3, /* NORMINV */\n0x0128: 1, /* NORMSINV */\n0x0129: 3, /* STANDARDIZE */\n0x012A: 1, /* ODD */\n0x012B: 2, /* PERMUT */\n0x012C: 3, /* POISSON */\n0x012D: 3, /* TDIST */\n0x012E: 4, /* WEIBULL */\n0x012F: 2, /* SUMXMY2 */\n0x0130: 2, /* SUMX2MY2 */\n0x0131: 2, /* SUMX2PY2 */\n0x0132: 2, /* CHITEST */\n0x0133: 2, /* CORREL */\n0x0134: 2, /* COVAR */\n0x0135: 3, /* FORECAST */\n0x0136: 2, /* FTEST */\n0x0137: 2, /* INTERCEPT */\n0x0138: 2, /* PEARSON */\n0x0139: 2, /* RSQ */\n0x013A: 2, /* STEYX */\n0x013B: 2, /* SLOPE */\n0x013C: 4, /* TTEST */\n0x0145: 2, /* LARGE */\n0x0146: 2, /* SMALL */\n0x0147: 2, /* QUARTILE */\n0x0148: 2, /* PERCENTILE */\n0x014B: 2, /* TRIMMEAN */\n0x014C: 2, /* TINV */\n0x0151: 2, /* POWER */\n0x0156: 1, /* RADIANS */\n0x0157: 1, /* DEGREES */\n0x015A: 2, /* COUNTIF */\n0x015B: 1, /* COUNTBLANK */\n0x015E: 4, /* ISPMT */\n0x015F: 3, /* DATEDIF */\n0x0160: 1, /* DATESTRING */\n0x0161: 2, /* NUMBERSTRING */\n0x0168: 1, /* PHONETIC */\n0x0170: 1, /* BAHTTEXT */\n0x0171: 1, /* THAIDAYOFWEEK */\n0x0172: 1, /* THAIDIGIT */\n0x0173: 1, /* THAIMONTHOFYEAR */\n0x0174: 1, /* THAINUMSOUND */\n0x0175: 1, /* THAINUMSTRING */\n0x0176: 1, /* THAISTRINGLENGTH */\n0x0177: 1, /* ISTHAIDIGIT */\n0x0178: 1, /* ROUNDBAHTDOWN */\n0x0179: 1, /* ROUNDBAHTUP */\n0x017A: 1, /* THAIYEAR */\n0x017E: 3, /* CUBEMEMBERPROPERTY */\n0x0181: 1, /* HEX2DEC */\n0x0188: 1, /* OCT2DEC */\n0x0189: 1, /* BIN2DEC */\n0x018C: 2, /* IMSUB */\n0x018D: 2, /* IMDIV */\n0x018E: 2, /* IMPOWER */\n0x018F: 1, /* IMABS */\n0x0190: 1, /* IMSQRT */\n0x0191: 1, /* IMLN */\n0x0192: 1, /* IMLOG2 */\n0x0193: 1, /* IMLOG10 */\n0x0194: 1, /* IMSIN */\n0x0195: 1, /* IMCOS */\n0x0196: 1, /* IMEXP */\n0x0197: 1, /* IMARGUMENT */\n0x0198: 1, /* IMCONJUGATE */\n0x0199: 1, /* IMAGINARY */\n0x019A: 1, /* IMREAL */\n0x019E: 4, /* SERIESSUM */\n0x019F: 1, /* FACTDOUBLE */\n0x01A0: 1, /* SQRTPI */\n0x01A1: 2, /* QUOTIENT */\n0x01A4: 1, /* ISEVEN */\n0x01A5: 1, /* ISODD */\n0x01A6: 2, /* MROUND */\n0x01A8: 1, /* ERFC */\n0x01A9: 2, /* BESSELJ */\n0x01AA: 2, /* BESSELK */\n0x01AB: 2, /* BESSELY */\n0x01AC: 2, /* BESSELI */\n0x01AE: 3, /* XNPV */\n0x01B6: 3, /* TBILLEQ */\n0x01B7: 3, /* TBILLPRICE */\n0x01B8: 3, /* TBILLYIELD */\n0x01BB: 2, /* DOLLARDE */\n0x01BC: 2, /* DOLLARFR */\n0x01BD: 2, /* NOMINAL */\n0x01BE: 2, /* EFFECT */\n0x01BF: 6, /* CUMPRINC */\n0x01C0: 6, /* CUMIPMT */\n0x01C1: 2, /* EDATE */\n0x01C2: 2, /* EOMONTH */\n0x01D0: 2, /* RANDBETWEEN */\n0x01D4: 3, /* CONVERT */\n0x01DC: 2, /* FVSCHEDULE */\n0x01DF: 1, /* CUBESETCOUNT */\n0x01E0: 2, /* IFERROR */\n0xFFFF: 0\n};\n/* [MS-XLSX] 2.2.3 Functions */\n/* [MS-XLSB] 2.5.97.10 Ftab */\nvar XLSXFutureFunctions = {\n\t\"_xlfn.ACOT\": \"ACOT\",\n\t\"_xlfn.ACOTH\": \"ACOTH\",\n\t\"_xlfn.AGGREGATE\": \"AGGREGATE\",\n\t\"_xlfn.ARABIC\": \"ARABIC\",\n\t\"_xlfn.AVERAGEIF\": \"AVERAGEIF\",\n\t\"_xlfn.AVERAGEIFS\": \"AVERAGEIFS\",\n\t\"_xlfn.BASE\": \"BASE\",\n\t\"_xlfn.BETA.DIST\": \"BETA.DIST\",\n\t\"_xlfn.BETA.INV\": \"BETA.INV\",\n\t\"_xlfn.BINOM.DIST\": \"BINOM.DIST\",\n\t\"_xlfn.BINOM.DIST.RANGE\": \"BINOM.DIST.RANGE\",\n\t\"_xlfn.BINOM.INV\": \"BINOM.INV\",\n\t\"_xlfn.BITAND\": \"BITAND\",\n\t\"_xlfn.BITLSHIFT\": \"BITLSHIFT\",\n\t\"_xlfn.BITOR\": \"BITOR\",\n\t\"_xlfn.BITRSHIFT\": \"BITRSHIFT\",\n\t\"_xlfn.BITXOR\": \"BITXOR\",\n\t\"_xlfn.CEILING.MATH\": \"CEILING.MATH\",\n\t\"_xlfn.CEILING.PRECISE\": \"CEILING.PRECISE\",\n\t\"_xlfn.CHISQ.DIST\": \"CHISQ.DIST\",\n\t\"_xlfn.CHISQ.DIST.RT\": \"CHISQ.DIST.RT\",\n\t\"_xlfn.CHISQ.INV\": \"CHISQ.INV\",\n\t\"_xlfn.CHISQ.INV.RT\": \"CHISQ.INV.RT\",\n\t\"_xlfn.CHISQ.TEST\": \"CHISQ.TEST\",\n\t\"_xlfn.COMBINA\": \"COMBINA\",\n\t\"_xlfn.CONCAT\": \"CONCAT\",\n\t\"_xlfn.CONFIDENCE.NORM\": \"CONFIDENCE.NORM\",\n\t\"_xlfn.CONFIDENCE.T\": \"CONFIDENCE.T\",\n\t\"_xlfn.COT\": \"COT\",\n\t\"_xlfn.COTH\": \"COTH\",\n\t\"_xlfn.COUNTIFS\": \"COUNTIFS\",\n\t\"_xlfn.COVARIANCE.P\": \"COVARIANCE.P\",\n\t\"_xlfn.COVARIANCE.S\": \"COVARIANCE.S\",\n\t\"_xlfn.CSC\": \"CSC\",\n\t\"_xlfn.CSCH\": \"CSCH\",\n\t\"_xlfn.DAYS\": \"DAYS\",\n\t\"_xlfn.DECIMAL\": \"DECIMAL\",\n\t\"_xlfn.ECMA.CEILING\": \"ECMA.CEILING\",\n\t\"_xlfn.ERF.PRECISE\": \"ERF.PRECISE\",\n\t\"_xlfn.ERFC.PRECISE\": \"ERFC.PRECISE\",\n\t\"_xlfn.EXPON.DIST\": \"EXPON.DIST\",\n\t\"_xlfn.F.DIST\": \"F.DIST\",\n\t\"_xlfn.F.DIST.RT\": \"F.DIST.RT\",\n\t\"_xlfn.F.INV\": \"F.INV\",\n\t\"_xlfn.F.INV.RT\": \"F.INV.RT\",\n\t\"_xlfn.F.TEST\": \"F.TEST\",\n\t\"_xlfn.FILTERXML\": \"FILTERXML\",\n\t\"_xlfn.FLOOR.MATH\": \"FLOOR.MATH\",\n\t\"_xlfn.FLOOR.PRECISE\": \"FLOOR.PRECISE\",\n\t\"_xlfn.FORECAST.ETS\": \"FORECAST.ETS\",\n\t\"_xlfn.FORECAST.ETS.CONFINT\": \"FORECAST.ETS.CONFINT\",\n\t\"_xlfn.FORECAST.ETS.SEASONALITY\": \"FORECAST.ETS.SEASONALITY\",\n\t\"_xlfn.FORECAST.ETS.STAT\": \"FORECAST.ETS.STAT\",\n\t\"_xlfn.FORECAST.LINEAR\": \"FORECAST.LINEAR\",\n\t\"_xlfn.FORMULATEXT\": \"FORMULATEXT\",\n\t\"_xlfn.GAMMA\": \"GAMMA\",\n\t\"_xlfn.GAMMA.DIST\": \"GAMMA.DIST\",\n\t\"_xlfn.GAMMA.INV\": \"GAMMA.INV\",\n\t\"_xlfn.GAMMALN.PRECISE\": \"GAMMALN.PRECISE\",\n\t\"_xlfn.GAUSS\": \"GAUSS\",\n\t\"_xlfn.HYPGEOM.DIST\": \"HYPGEOM.DIST\",\n\t\"_xlfn.IFERROR\": \"IFERROR\",\n\t\"_xlfn.IFNA\": \"IFNA\",\n\t\"_xlfn.IFS\": \"IFS\",\n\t\"_xlfn.IMCOSH\": \"IMCOSH\",\n\t\"_xlfn.IMCOT\": \"IMCOT\",\n\t\"_xlfn.IMCSC\": \"IMCSC\",\n\t\"_xlfn.IMCSCH\": \"IMCSCH\",\n\t\"_xlfn.IMSEC\": \"IMSEC\",\n\t\"_xlfn.IMSECH\": \"IMSECH\",\n\t\"_xlfn.IMSINH\": \"IMSINH\",\n\t\"_xlfn.IMTAN\": \"IMTAN\",\n\t\"_xlfn.ISFORMULA\": \"ISFORMULA\",\n\t\"_xlfn.ISO.CEILING\": \"ISO.CEILING\",\n\t\"_xlfn.ISOWEEKNUM\": \"ISOWEEKNUM\",\n\t\"_xlfn.LOGNORM.DIST\": \"LOGNORM.DIST\",\n\t\"_xlfn.LOGNORM.INV\": \"LOGNORM.INV\",\n\t\"_xlfn.MAXIFS\": \"MAXIFS\",\n\t\"_xlfn.MINIFS\": \"MINIFS\",\n\t\"_xlfn.MODE.MULT\": \"MODE.MULT\",\n\t\"_xlfn.MODE.SNGL\": \"MODE.SNGL\",\n\t\"_xlfn.MUNIT\": \"MUNIT\",\n\t\"_xlfn.NEGBINOM.DIST\": \"NEGBINOM.DIST\",\n\t\"_xlfn.NETWORKDAYS.INTL\": \"NETWORKDAYS.INTL\",\n\t\"_xlfn.NIGBINOM\": \"NIGBINOM\",\n\t\"_xlfn.NORM.DIST\": \"NORM.DIST\",\n\t\"_xlfn.NORM.INV\": \"NORM.INV\",\n\t\"_xlfn.NORM.S.DIST\": \"NORM.S.DIST\",\n\t\"_xlfn.NORM.S.INV\": \"NORM.S.INV\",\n\t\"_xlfn.NUMBERVALUE\": \"NUMBERVALUE\",\n\t\"_xlfn.PDURATION\": \"PDURATION\",\n\t\"_xlfn.PERCENTILE.EXC\": \"PERCENTILE.EXC\",\n\t\"_xlfn.PERCENTILE.INC\": \"PERCENTILE.INC\",\n\t\"_xlfn.PERCENTRANK.EXC\": \"PERCENTRANK.EXC\",\n\t\"_xlfn.PERCENTRANK.INC\": \"PERCENTRANK.INC\",\n\t\"_xlfn.PERMUTATIONA\": \"PERMUTATIONA\",\n\t\"_xlfn.PHI\": \"PHI\",\n\t\"_xlfn.POISSON.DIST\": \"POISSON.DIST\",\n\t\"_xlfn.QUARTILE.EXC\": \"QUARTILE.EXC\",\n\t\"_xlfn.QUARTILE.INC\": \"QUARTILE.INC\",\n\t\"_xlfn.QUERYSTRING\": \"QUERYSTRING\",\n\t\"_xlfn.RANK.AVG\": \"RANK.AVG\",\n\t\"_xlfn.RANK.EQ\": \"RANK.EQ\",\n\t\"_xlfn.RRI\": \"RRI\",\n\t\"_xlfn.SEC\": \"SEC\",\n\t\"_xlfn.SECH\": \"SECH\",\n\t\"_xlfn.SHEET\": \"SHEET\",\n\t\"_xlfn.SHEETS\": \"SHEETS\",\n\t\"_xlfn.SKEW.P\": \"SKEW.P\",\n\t\"_xlfn.STDEV.P\": \"STDEV.P\",\n\t\"_xlfn.STDEV.S\": \"STDEV.S\",\n\t\"_xlfn.SUMIFS\": \"SUMIFS\",\n\t\"_xlfn.SWITCH\": \"SWITCH\",\n\t\"_xlfn.T.DIST\": \"T.DIST\",\n\t\"_xlfn.T.DIST.2T\": \"T.DIST.2T\",\n\t\"_xlfn.T.DIST.RT\": \"T.DIST.RT\",\n\t\"_xlfn.T.INV\": \"T.INV\",\n\t\"_xlfn.T.INV.2T\": \"T.INV.2T\",\n\t\"_xlfn.T.TEST\": \"T.TEST\",\n\t\"_xlfn.TEXTJOIN\": \"TEXTJOIN\",\n\t\"_xlfn.UNICHAR\": \"UNICHAR\",\n\t\"_xlfn.UNICODE\": \"UNICODE\",\n\t\"_xlfn.VAR.P\": \"VAR.P\",\n\t\"_xlfn.VAR.S\": \"VAR.S\",\n\t\"_xlfn.WEBSERVICE\": \"WEBSERVICE\",\n\t\"_xlfn.WEIBULL.DIST\": \"WEIBULL.DIST\",\n\t\"_xlfn.WORKDAY.INTL\": \"WORKDAY.INTL\",\n\t\"_xlfn.XOR\": \"XOR\",\n\t\"_xlfn.Z.TEST\": \"Z.TEST\"\n};\n\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f) {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f) {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r) {\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r) {\n\treturn r.replace(/\\./,\"!\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\nRELS.WS = [\n\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n];\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst, str, rev) {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C, col) {\n\tvar p = ({min:C+1,max:C+1});\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\treturn p;\n}\n\nfunction default_margins(margins, mode) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles, cell, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF.load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p, fmtid, fillid, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z') return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = SSF._general_int(dd);\n\t\t\t\telse p.w = SSF._general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF._general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF.format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws, sname, i) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws, s) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = opts.dense ? ([]) : ({});\n\tvar refguess = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} });\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges) {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr, s, wb, idx) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = data.codeName;\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = escapexml(cname);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp) {\n\t// algorithmName, hashValue, saltValue, spinCountpassword\n\tvar o = ({sheet:1});\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data, rels) {\n\tvar dense = Array.isArray(s);\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+val.location;\n\t\t} else {\n\t\t\tval.Target = \"#\" + val.location;\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_cell({c:C,r:R});\n\t\t\tif(dense) {\n\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\tif(!s[R][C]) s[R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin) {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols) {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx) {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]});\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\nfunction parse_ws_xml_sheetviews(data, wb) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r, i) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb) {\n\tvar sview = ({workbookViewId:\"0\"});\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell, ref, ws, opts) {\n\tif(cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z') return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = SSF._table[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = writetag('v', escapexml(vv)), o = ({r:ref});\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\to.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) ws['!links'].push([ref, cell.l]);\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = (function() {\n\tvar cellregex = /<(?:\\w+:)?c[ >]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {\n\tvar ri = 0, x = \"\", cells = [], cref = [], idx=0, i=0, cc=0, d=\"\", p;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf = [];\n\tvar sharedf = [];\n\tvar dense = Array.isArray(s);\n\tvar rows = [], rowobj = {}, rowrite = false;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tfor(ri = 0; ri < xlen; ++ri) if(x.charCodeAt(ri) === 62) break; ++ri;\n\t\ttag = parsexmltag(x.slice(0,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"});\n\n\t\t\tif((cref=d.match(match_v))!= null && cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1]));\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!opts.sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!opts.sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!opts.sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? utf8read(p.v) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[_r.r]) s[_r.r] = [];\n\t\t\t\ts[_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws, opts, idx, wb) {\n\tvar o = [], r = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = Array.isArray(ws);\n\tvar params = ({r:rr}), row, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr});\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1});\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nvar WS_XML_ROOT = writextag('worksheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\nfunction write_ws_xml(idx, opts, wb, rels) {\n\tvar o = [XML_HEADER, WS_XML_ROOT];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect'] != null) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(ws['!links'].length > 0) {\n\t\to[o.length] = \"\";\nws['!links'].forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]});\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({});\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = Array.isArray(ws) ? (ws[caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 'BrtRowHdr', o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo() {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\t/* TODO: pull flags */\n\tdata.l += 19;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tfor(var i = 0; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\n\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display});\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data) {\n\tvar margins = ({});\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\nif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb, themes, styles) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s = (opts.dense ? [] : {});\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell;\n\tvar merges = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || wb.supbooks || ([[]]);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo = [], rowinfo = [];\n\tvar seencol = false;\n\n\trecordhopper(data, function ws_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\t\tp = ({t:val[2]});\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && SSF.is_date(SSF._table[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:undefined});\n\t\t\t\tC = val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\t\t\tif(!s[R][C]) s[R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_cell({c:C,r:R});\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr]));\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x0031: /* 'BrtCellMeta' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba, cell, R, C, opts, ws) {\n\tif(cell.v === undefined) return;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || SSF._table[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar o = ({r:R, c:C});\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\twrite_record(ba, \"BrtCellIsst\", write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\twrite_record(ba, \"BrtCellSt\", write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) write_record(ba, \"BrtCellRk\", write_BrtCellRk(cell, o));\n\t\t\telse write_record(ba, \"BrtCellReal\", write_BrtCellReal(cell, o));\n\t\t\treturn;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\twrite_record(ba, \"BrtCellBool\", write_BrtCellBool(cell, o));\n\t\t\treturn;\n\t\tcase 'e': /* TODO: error */ o.t = \"e\"; break;\n\t}\n\twrite_record(ba, \"BrtCellBlank\", write_BrtCellBlank(cell, o));\n}\n\nfunction write_CELLTABLE(ba, ws, idx, opts) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols = [];\n\twrite_record(ba, 'BrtBeginSheetData');\n\tvar dense = Array.isArray(ws);\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_bin_cell(ba, cell, R, C, opts, ws);\n\t\t}\n\t}\n\twrite_record(ba, 'BrtEndSheetData');\n}\n\nfunction write_MERGECELLS(ba, ws) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 'BrtBeginMergeCells', write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 'BrtMergeCell', write_BrtMergeCell(m)); });\n\twrite_record(ba, 'BrtEndMergeCells');\n}\n\nfunction write_COLINFOS(ba, ws) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 'BrtBeginColInfos');\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 'BrtColInfo', write_BrtColInfo(i, m)); });\n\twrite_record(ba, 'BrtEndColInfos');\n}\n\nfunction write_IGNOREECS(ba, ws) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 'BrtBeginCellIgnoreECs');\n\twrite_record(ba, 'BrtCellIgnoreEC', write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 'BrtEndCellIgnoreECs');\n}\n\nfunction write_HLINKS(ba, ws, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, \"BrtHLink\", write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws, idx, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, \"BrtLegacyDrawing\", write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]});\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\n\twrite_record(ba, \"BrtBeginAFilter\", write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, \"BrtEndAFilter\");\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, \"BrtBeginWsViews\");\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, \"BrtBeginWsView\", write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, \"BrtEndWsView\");\n\t}\n\t/* *FRT */\n\twrite_record(ba, \"BrtEndWsViews\");\n}\n\nfunction write_WSFMTINFO() {\n\t/* [ACWSFMTINFO] */\n\t//write_record(ba, \"BrtWsFmtInfo\", write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, \"BrtSheetProtection\", write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx, opts, wb, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, \"BrtBeginSheet\");\n\tif(wb.vbaraw) write_record(ba, \"BrtWsProp\", write_BrtWsProp(c));\n\twrite_record(ba, \"BrtWsDim\", write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, \"BrtMargins\", write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\nRELS.CHART = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\";\nRELS.CHARTEX = \"http://schemas.microsoft.com/office/2014/relationships/chartEx\";\n\nfunction parse_Cache(data) {\n\tvar col = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data, name, opts, rels, wb, csheet) {\n\tvar cs = ((csheet || {\"!type\":\"chart\"}));\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tcs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\nRELS.CS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\";\n\nvar CS_XML_ROOT = writextag('chartsheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data, opts, idx, rels, wb) {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"});\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_xml(idx, opts, wb, rels) {\n\tvar o = [XML_HEADER, CS_XML_ROOT];\n\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx, rels, wb) {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R_n, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_bin() {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSheet\");\n\t/* [BrtCsProp] */\n\t/* CSVIEWS */\n\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n\t/* [USERCSVIEWS] */\n\t/* [BrtMargins] */\n\t/* [BrtCsPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* BrtDrawing */\n\t/* [BrtLegacyDrawing] */\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [WEBPUBITEMS] */\n\t/* FRTCHARTSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb) {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = \"][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n, safe) {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts) {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" };\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr = ({codeName:\"ThisWorkbook\"});\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\nif((wb.Workbook.WBProps[x[0]]) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]);\n\t\t});\nif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))});\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length) {\n\tvar o = ({});\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tdata.l += 4; //var flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula});\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts) {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\trecordhopper(data, function hopper_wb(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\" && state[state.length-1] != \"BrtFRTBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb) {\n\twrite_record(ba, \"BrtBeginBundleShs\");\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, \"BrtBundleSh\", write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, \"BrtEndBundleShs\");\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\to.length = o.l;\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, \"BrtBeginBookViews\");\n\twrite_record(ba, \"BrtBookView\", write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, \"BrtEndBookViews\");\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginBook\");\n\twrite_record(ba, \"BrtFileVersion\", write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, \"BrtWbProp\", write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\t/* [EXTERNALS] */\n\t/* *BrtName */\n\t/* write_record(ba, \"BrtCalcProp\", write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, \"BrtFileRecover\", write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, \"BrtEndBook\");\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data), opts);\n\treturn parse_wb_xml((data), opts);\n}\n\nfunction parse_ws(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data), themes, opts);\n\treturn parse_sty_xml((data), themes, opts);\n}\n\nfunction parse_theme(data, name, opts) {\n\treturn parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data), opts);\n\treturn parse_sst_xml((data), opts);\n}\n\nfunction parse_cmnt(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data), opts);\n\treturn parse_comments_xml((data), opts);\n}\n\nfunction parse_cc(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data), name, opts);\n\treturn parse_cc_xml((data), name, opts);\n}\n\nfunction parse_xlink(data, rel, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data), rel, name, opts);\n\treturn parse_xlink_xml((data), rel, name, opts);\n}\n\nfunction write_wb(wb, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data, name, opts, wb, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction write_cs(data, name, opts, wb, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag, skip_root) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = ([]); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\nif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\nif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\nfunction xlml_format(format, value) {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF._general(value);\n\treturn SSF.format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val) {\n\tvar oval = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);\n\t\t\t\telse cell.w = SSF._general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF._general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && SSF.is_date(z)) {\n\t\t\tvar _d = SSF.parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\nfunction xlml_normalize(d) {\n\tif(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n\n/* TODO: Everything */\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\nfunction parse_xlml_xml(d, _opts) {\n\tvar opts = _opts || {};\n\tmake_ssf(SSF);\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return HTML_.to_workbook(str, opts);\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames = [], cursheet = (opts.dense ? [] : {}), sheetname = \"\";\n\tvar table = {}, cell = ({}), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments = [], comment = ({});\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf = [];\n\tvar rowinfo = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook = ({ Sheets:[], WBProps:{date1904:false} }), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[r]) cursheet[r] = [];\n\t\t\t\t\t\tcursheet[r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:cell.HRef});\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tmerges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\nfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[cmd]) cursheet[cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = (opts.dense ? [] : {});\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\ttable = xlml_parsexmltag(Rn[0]);\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == null) { SSF.load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName = ({\n\t\t\t\tName: _NamedRange.Name,\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t});\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\nWorkbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author});\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\nWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].header = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].footer = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(pagemargins.Top) cursheet['!margins'].top = pagemargins.Top;\n\t\t\t\t\t\tif(pagemargins.Left) cursheet['!margins'].left = pagemargins.Left;\n\t\t\t\t\t\tif(pagemargins.Right) cursheet['!margins'].right = pagemargins.Right;\n\t\t\t\t\t\tif(pagemargins.Bottom) cursheet['!margins'].bottom = pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/: break;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/: break;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({});\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = SSF.get_table();\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\treturn out;\n}\n\nfunction parse_xlml(data, opts) {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64.decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n}\n\n/* TODO */\nfunction write_props_xlml(wb, opts) {\n\tvar o = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml() {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts) {\n\t/* Styles */\n\tvar styles = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(SSF._table[xf.numFmtId])}));\n\n\t\tvar o = {\"ss:ID\": \"s\" + (21+id)};\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb) {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tvar o = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments) {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr){\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || SSF._table[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R, row) {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws, opts, idx, wb) {\n\tif(!ws['!ref']) return \"\";\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar marr = ws['!merges'] || [], mi = 0;\n\tvar o = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx, opts, wb) {\n\tvar o = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"
\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts) {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = SSF.get_table();\n\tif(wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj) {\n\tvar v = {};\n\tvar o = obj.content;\n/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue\n\t- 2.4.59 ContinueBigName\n\t- 2.4.60 ContinueFrt\n\t- 2.4.61 ContinueFrt11\n\t- 2.4.62 ContinueFrt12\n*/\nfunction slurp(R, blob, length, opts) {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu) switch(R.n) {\n\tcase 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;\n\tdefault:\n\t\tif(d.length === 0) break;\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);\n\tvar start = 0;\n\twhile(next != null && next.n.slice(0,8) === 'Continue') {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(next.n == 'ContinueFrt') start += 4;\n\t\telse if(next.n.slice(0,11) == 'ContinueFrt') start += 12;\n\t\tbufs.push(blob.slice(start,blob.l+4+l));\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs));\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p, opts, date1904) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF._general(p.v);\n\t\t}\n\t\telse p.w = SSF.format(fmtid,p.v, {date1904:!!date1904});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t) {\n\treturn ({v:val, ixfe:ixfe, t:t});\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options) {\n\tvar wb = ({opts:{}});\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out = ((options.dense ? [] : {}));\n\tvar Directory = {};\n\tvar range = ({});\n\tvar last_formula = null;\n\tvar sst = ([]);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf = [];\n\tvar temp_val;\n\tvar country;\n\tvar cell_valid = true;\n\tvar XFs = []; /* XF records */\n\tvar palette = [];\n\tvar Workbook = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }), wsprops = {};\n\tvar get_rgb = function getrgb(icv) {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({});\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell, line, options) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) cell_valid = false;\n\t\tif(!cell_valid) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t});\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges = [];\n\tvar objects = [];\n\tvar colinfo = [], rowinfo = [];\n\t// eslint-disable-next-line no-unused-vars\n\tvar defwidth = 0, defheight = 0; // twips / MDW respectively\n\tvar seencol = false;\n\tvar supbooks = ([]); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_Rn = '';\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_Rn === 'EOF') break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\n\t\t\t}\n\t\t\tlast_Rn = R.n;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val = ({});\n\t\t\tif(R.n === 'EOF') val = R.f(blob, length, opts);\n\t\t\telse val = slurp(R, blob, length, opts);\n\t\t\tvar Rn = R.n;\nif(file_depth == 0 && Rn != 'BOF') continue;\n\t\t\t/* nested switch statements to workaround V8 128 limit */\n\t\t\tswitch(Rn) {\n\t\t\t\t/* Workbook Options */\n\t\t\t\tcase 'Date1904':\nwb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 'WriteProtect': wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 'FilePass':\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'WriteAccess': opts.lastuser = val; break;\n\t\t\t\tcase 'FileSharing': break; //TODO\n\t\t\t\tcase 'CodePage':\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'RRTabId': opts.rrtabid = val; break;\n\t\t\t\tcase 'WinProtect': opts.winlocked = val; break;\n\t\t\t\tcase 'Template': break; // TODO\n\t\t\t\tcase 'BookBool': break; // TODO\n\t\t\t\tcase 'UsesELFs': break;\n\t\t\t\tcase 'MTRSettings': break;\n\t\t\t\tcase 'RefreshAll':\n\t\t\t\tcase 'CalcCount':\n\t\t\t\tcase 'CalcDelta':\n\t\t\t\tcase 'CalcIter':\n\t\t\t\tcase 'CalcMode':\n\t\t\t\tcase 'CalcPrecision':\n\t\t\t\tcase 'CalcSaveRecalc':\n\t\t\t\t\twb.opts[Rn] = val; break;\n\t\t\t\tcase 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 'Uncalced': break;\n\t\t\t\tcase 'ForceFullCalculation': wb.opts.FullCalc = val; break;\n\t\t\t\tcase 'WsBool':\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 'XF':\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 'ExtSST': break; // TODO\n\t\t\t\tcase 'BookExt': break; // TODO\n\t\t\t\tcase 'RichTextStream': break;\n\t\t\t\tcase 'BkHim': break;\n\n\t\t\t\tcase 'SupBook':\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternName':\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Index': break; // TODO\n\t\t\t\tcase 'Lbl':\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t});\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternCount': opts.ExternCount = val; break;\n\t\t\t\tcase 'ExternSheet':\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 'NameCmt':\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Protect': out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 'Password': if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/\n\n\t\t\t\tcase 'BoundSheet8': {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 'EOF': {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\t\t\t\t} break;\n\t\t\t\tcase 'BOF': {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n0x0009:2,\n0x0209:3,\n0x0409:4\n\t\t\t\t\t}[RecordType] || {\n0x0200:2,\n0x0300:3,\n0x0400:4,\n0x0500:5,\n0x0600:8,\n0x0002:2,\n0x0007:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tcell_valid = true;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\t\t\t\t\tif(opts.biff < 5) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tdefwidth = defheight = 0;\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\n\t\t\t\tcase 'Number': case 'BIFF2NUM': case 'BIFF2INT': {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'BoolErr': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'RK': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulRk': {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Formula': {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'String': {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 'Array': {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'ShrFmla': {\n\t\t\t\t\tif(!cell_valid) break;\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'LabelSst':\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Blank': if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulBlank': if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'RString':\n\t\t\t\tcase 'Label': case 'BIFF2STR':\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Dimensions': {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 'SST': {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'Format': { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(SSF._table[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF.load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 'BIFF2FORMAT': {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(SSF._table[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF.load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 'MergeCells': merges = merges.concat(val); break;\n\n\t\t\t\tcase 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 'TxO': opts.lastobj.TxO = val; break;\n\t\t\t\tcase 'ImData': opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 'HLink': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'HLinkTooltip': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* Comments */\n\t\t\t\tcase 'Note': {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[val[0].r]) out[val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[val[0].r][val[0].c] = ({t:\"z\"});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"});\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\tcase 'ClrtClient': break;\n\t\t\t\tcase 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;\n\n\t\t\t\tcase 'DefColWidth': defwidth = val; break;\n\t\t\t\tcase 'DefaultRowHeight': defheight = val[1]; break; // TODO: flags\n\n\t\t\t\tcase 'ColInfo': {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256 };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Row': {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 'LeftMargin':\n\t\t\t\tcase 'RightMargin':\n\t\t\t\tcase 'TopMargin':\n\t\t\t\tcase 'BottomMargin':\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][Rn.slice(0,-6).toLowerCase()] = val;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Setup': // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Window2': // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Header': break; // TODO\n\t\t\t\tcase 'Footer': break; // TODO\n\t\t\t\tcase 'HCenter': break; // TODO\n\t\t\t\tcase 'VCenter': break; // TODO\n\t\t\t\tcase 'Pls': break; // TODO\n\t\t\t\tcase 'GCW': break;\n\t\t\t\tcase 'LHRecord': break;\n\t\t\t\tcase 'DBCell': break; // TODO\n\t\t\t\tcase 'EntExU2': break; // TODO\n\t\t\t\tcase 'SxView': break; // TODO\n\t\t\t\tcase 'Sxvd': break; // TODO\n\t\t\t\tcase 'SXVI': break; // TODO\n\t\t\t\tcase 'SXVDEx': break; // TODO\n\t\t\t\tcase 'SxIvd': break; // TODO\n\t\t\t\tcase 'SXString': break; // TODO\n\t\t\t\tcase 'Sync': break;\n\t\t\t\tcase 'Addin': break;\n\t\t\t\tcase 'SXDI': break; // TODO\n\t\t\t\tcase 'SXLI': break; // TODO\n\t\t\t\tcase 'SXEx': break; // TODO\n\t\t\t\tcase 'QsiSXTag': break; // TODO\n\t\t\t\tcase 'Selection': break;\n\t\t\t\tcase 'Feat': break;\n\t\t\t\tcase 'FeatHdr': case 'FeatHdr11': break;\n\t\t\t\tcase 'Feature11': case 'Feature12': case 'List12': break;\n\t\t\t\tcase 'Country': country = val; break;\n\t\t\t\tcase 'RecalcId': break;\n\t\t\t\tcase 'DxGCol': break; // TODO: htmlify\n\t\t\t\tcase 'Fbi': case 'Fbi2': case 'GelFrame': break;\n\t\t\t\tcase 'Font': break; // TODO\n\t\t\t\tcase 'XFCRC': break; // TODO\n\t\t\t\tcase 'Style': break; // TODO\n\t\t\t\tcase 'StyleExt': break; // TODO\n\t\t\t\tcase 'Palette': palette = val; break;\n\t\t\t\tcase 'Theme': themes = val; break;\n\t\t\t\t/* Protection */\n\t\t\t\tcase 'ScenarioProtect': break;\n\t\t\t\tcase 'ObjProtect': break;\n\n\t\t\t\t/* Conditional Formatting */\n\t\t\t\tcase 'CondFmt12': break;\n\n\t\t\t\t/* Table */\n\t\t\t\tcase 'Table': break; // TODO\n\t\t\t\tcase 'TableStyles': break; // TODO\n\t\t\t\tcase 'TableStyle': break; // TODO\n\t\t\t\tcase 'TableStyleElement': break; // TODO\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'SXStreamID': break; // TODO\n\t\t\t\tcase 'SXVS': break; // TODO\n\t\t\t\tcase 'DConRef': break; // TODO\n\t\t\t\tcase 'SXAddl': break; // TODO\n\t\t\t\tcase 'DConBin': break; // TODO\n\t\t\t\tcase 'DConName': break; // TODO\n\t\t\t\tcase 'SXPI': break; // TODO\n\t\t\t\tcase 'SxFormat': break; // TODO\n\t\t\t\tcase 'SxSelect': break; // TODO\n\t\t\t\tcase 'SxRule': break; // TODO\n\t\t\t\tcase 'SxFilt': break; // TODO\n\t\t\t\tcase 'SxItm': break; // TODO\n\t\t\t\tcase 'SxDXF': break; // TODO\n\n\t\t\t\t/* Scenario Manager */\n\t\t\t\tcase 'ScenMan': break;\n\n\t\t\t\t/* Data Consolidation */\n\t\t\t\tcase 'DCon': break;\n\n\t\t\t\t/* Watched Cell */\n\t\t\t\tcase 'CellWatch': break;\n\n\t\t\t\t/* Print Settings */\n\t\t\t\tcase 'PrintRowCol': break;\n\t\t\t\tcase 'PrintGrid': break;\n\t\t\t\tcase 'PrintSize': break;\n\n\t\t\t\tcase 'XCT': break;\n\t\t\t\tcase 'CRN': break;\n\n\t\t\t\tcase 'Scl': {\n\t\t\t\t\t//console.log(\"Zoom Level:\", val[0]/val[1],val);\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExt': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExtOptional': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\t/* VBA */\n\t\t\t\tcase 'ObNoMacros': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'ObProj': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'CodeName': {\nif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t\tcase 'GUIDTypeLib': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\tcase 'WOpt': break; // TODO: WTF?\n\t\t\t\tcase 'PhoneticInfo': break;\n\n\t\t\t\tcase 'OleObjectSize': break;\n\n\t\t\t\t/* Differential Formatting */\n\t\t\t\tcase 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;\n\n\t\t\t\t/* Data Validation */\n\t\t\t\tcase 'Dv': case 'DVal': break;\n\n\t\t\t\t/* Data Series */\n\t\t\t\tcase 'BRAI': case 'Series': case 'SeriesText': break;\n\n\t\t\t\t/* Data Connection */\n\t\t\t\tcase 'DConn': break;\n\t\t\t\tcase 'DbOrParamQry': break;\n\t\t\t\tcase 'DBQueryExt': break;\n\n\t\t\t\tcase 'OleDbConn': break;\n\t\t\t\tcase 'ExtString': break;\n\n\t\t\t\t/* Formatting */\n\t\t\t\tcase 'IFmtRecord': break;\n\t\t\t\tcase 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;\n\n\t\t\t\t/* Explicitly Ignored */\n\t\t\t\tcase 'Excel9File': break;\n\t\t\t\tcase 'Units': break;\n\t\t\t\tcase 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': break;\n\t\t\t\tcase 'BuiltInFnGroupCount': /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ break;\n\t\t\t\t/* View Stuff */\n\t\t\t\tcase 'Window1': case 'HideObj': case 'GridSet': case 'Guts':\n\t\t\t\tcase 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd': break;\n\t\t\t\tcase 'Pane': break;\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* Chart */\n\t\t\t\tcase 'Dat':\n\t\t\t\tcase 'Begin': case 'End':\n\t\t\t\tcase 'StartBlock': case 'EndBlock':\n\t\t\t\tcase 'Frame': case 'Area':\n\t\t\t\tcase 'Axis': case 'AxisLine': case 'Tick': break;\n\t\t\t\tcase 'AxesUsed':\n\t\t\t\tcase 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;\n\t\t\t\tcase 'LineFormat': case 'AreaFormat':\n\t\t\t\tcase 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;\n\t\t\t\tcase 'PlotArea': case 'PlotGrowth': break;\n\t\t\t\tcase 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;\n\t\t\t\tcase 'DataFormat': case 'SerToCrt': case 'FontX': break;\n\t\t\t\tcase 'CatSerRange': case 'AxcExt': case 'SerFmt': break;\n\t\t\t\tcase 'ShtProps': break;\n\t\t\t\tcase 'DefaultText': case 'Text': case 'CatLab': break;\n\t\t\t\tcase 'DataLabExtContents': break;\n\t\t\t\tcase 'Legend': case 'LegendException': break;\n\t\t\t\tcase 'Pie': case 'Scatter': break;\n\t\t\t\tcase 'PieFormat': case 'MarkerFormat': break;\n\t\t\t\tcase 'StartObject': case 'EndObject': break;\n\t\t\t\tcase 'AlRuns': case 'ObjectLink': break;\n\t\t\t\tcase 'SIIndex': break;\n\t\t\t\tcase 'AttachedLabel': case 'YMult': break;\n\n\t\t\t\t/* Chart Group */\n\t\t\t\tcase 'Line': case 'Bar': break;\n\t\t\t\tcase 'Surf': break;\n\n\t\t\t\t/* Axis Group */\n\t\t\t\tcase 'AxisParent': break;\n\t\t\t\tcase 'Pos': break;\n\t\t\t\tcase 'ValueRange': break;\n\n\t\t\t\t/* Pivot Chart */\n\t\t\t\tcase 'SXViewEx9': break; // TODO\n\t\t\t\tcase 'SXViewLink': break;\n\t\t\t\tcase 'PivotChartBits': break;\n\t\t\t\tcase 'SBaseRef': break;\n\t\t\t\tcase 'TextPropsStream': break;\n\n\t\t\t\t/* Chart Misc */\n\t\t\t\tcase 'LnExt': break;\n\t\t\t\tcase 'MkrExt': break;\n\t\t\t\tcase 'CrtCoopt': break;\n\n\t\t\t\t/* Query Table */\n\t\t\t\tcase 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;\n\t\t\t\tcase 'TxtQry': break;\n\n\t\t\t\t/* Filter */\n\t\t\t\tcase 'FilterMode': break;\n\t\t\t\tcase 'AutoFilter': case 'AutoFilterInfo': break;\n\t\t\t\tcase 'AutoFilter12': break;\n\t\t\t\tcase 'DropDownObjIds': break;\n\t\t\t\tcase 'Sort': break;\n\t\t\t\tcase 'SortData': break;\n\n\t\t\t\t/* Drawing */\n\t\t\t\tcase 'ShapePropsStream': break;\n\t\t\t\tcase 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;\n\t\t\t\t/* Pub Stuff */\n\t\t\t\tcase 'WebPub': case 'AutoWebPub': break;\n\n\t\t\t\t/* Print Stuff */\n\t\t\t\tcase 'HeaderFooter': case 'HFPicture': case 'PLV':\n\t\t\t\tcase 'HorizontalPageBreaks': case 'VerticalPageBreaks': break;\n\t\t\t\t/* Behavioral */\n\t\t\t\tcase 'Backup': case 'CompressPictures': case 'Compat12': break;\n\n\t\t\t\t/* Should not Happen */\n\t\t\t\tcase 'Continue': case 'ContinueFrt12': break;\n\n\t\t\t\t/* Future Records */\n\t\t\t\tcase 'FrtFontList': case 'FrtWrapper': break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* BIFF5 records */\n\t\t\t\tcase 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;\n\n\t\t\t\t/* BIFF2-4 records */\n\t\t\t\tcase 'BIFF2FONTCLR': case 'BIFF2FMTCNT': case 'BIFF2FONTXTRA': break;\n\t\t\t\tcase 'BIFF2XF': case 'BIFF3XF': case 'BIFF4XF': break;\n\t\t\t\tcase 'BIFF4FMTCNT': case 'BIFF2ROW': case 'BIFF2WINDOW2': break;\n\n\t\t\t\t/* Miscellaneous */\n\t\t\t\tcase 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':\n\t\t\t\tcase 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':\n\t\t\t\tcase 'Name': break;\n\t\t\t\tcase 'LHNGraph': case 'FnGroupName': case 'AddMenu': case 'LPr': break;\n\t\t\t\tcase 'ListObj': case 'ListField': break;\n\t\t\t\tcase 'RRSort': break;\n\t\t\t\tcase 'BigName': break;\n\t\t\t\tcase 'ToolbarHdr': case 'ToolbarEnd': break;\n\t\t\t\tcase 'DDEObjName': break;\n\t\t\t\tcase 'FRTArchId$': break;\n\t\t\t\tdefault: if(options.WTF) throw 'Unrecognized Record ' + R.n;\n\t\t\t}}}}\n\t\t} else blob.l += length;\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Preamble=Preamble;\n\twb.Strings = sst;\n\twb.SSF = SSF.get_table();\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb, cfb) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb, options) {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj, WB;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64.decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb});\n}\nvar WorkbookP;\n\nvar _data;\nif(CompObj) parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({});\nelse {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(cfb, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb, opts) {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n0x0000: { n:\"BrtRowHdr\", f:parse_BrtRowHdr },\n0x0001: { n:\"BrtCellBlank\", f:parse_BrtCellBlank },\n0x0002: { n:\"BrtCellRk\", f:parse_BrtCellRk },\n0x0003: { n:\"BrtCellError\", f:parse_BrtCellError },\n0x0004: { n:\"BrtCellBool\", f:parse_BrtCellBool },\n0x0005: { n:\"BrtCellReal\", f:parse_BrtCellReal },\n0x0006: { n:\"BrtCellSt\", f:parse_BrtCellSt },\n0x0007: { n:\"BrtCellIsst\", f:parse_BrtCellIsst },\n0x0008: { n:\"BrtFmlaString\", f:parse_BrtFmlaString },\n0x0009: { n:\"BrtFmlaNum\", f:parse_BrtFmlaNum },\n0x000A: { n:\"BrtFmlaBool\", f:parse_BrtFmlaBool },\n0x000B: { n:\"BrtFmlaError\", f:parse_BrtFmlaError },\n0x0010: { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ },\n0x0013: { n:\"BrtSSTItem\", f:parse_RichStr },\n0x0014: { n:\"BrtPCDIMissing\" },\n0x0015: { n:\"BrtPCDINumber\" },\n0x0016: { n:\"BrtPCDIBoolean\" },\n0x0017: { n:\"BrtPCDIError\" },\n0x0018: { n:\"BrtPCDIString\" },\n0x0019: { n:\"BrtPCDIDatetime\" },\n0x001A: { n:\"BrtPCDIIndex\" },\n0x001B: { n:\"BrtPCDIAMissing\" },\n0x001C: { n:\"BrtPCDIANumber\" },\n0x001D: { n:\"BrtPCDIABoolean\" },\n0x001E: { n:\"BrtPCDIAError\" },\n0x001F: { n:\"BrtPCDIAString\" },\n0x0020: { n:\"BrtPCDIADatetime\" },\n0x0021: { n:\"BrtPCRRecord\" },\n0x0022: { n:\"BrtPCRRecordDt\" },\n0x0023: { n:\"BrtFRTBegin\" },\n0x0024: { n:\"BrtFRTEnd\" },\n0x0025: { n:\"BrtACBegin\" },\n0x0026: { n:\"BrtACEnd\" },\n0x0027: { n:\"BrtName\", f:parse_BrtName },\n0x0028: { n:\"BrtIndexRowBlock\" },\n0x002A: { n:\"BrtIndexBlock\" },\n0x002B: { n:\"BrtFont\", f:parse_BrtFont },\n0x002C: { n:\"BrtFmt\", f:parse_BrtFmt },\n0x002D: { n:\"BrtFill\", f:parse_BrtFill },\n0x002E: { n:\"BrtBorder\", f:parse_BrtBorder },\n0x002F: { n:\"BrtXF\", f:parse_BrtXF },\n0x0030: { n:\"BrtStyle\" },\n0x0031: { n:\"BrtCellMeta\" },\n0x0032: { n:\"BrtValueMeta\" },\n0x0033: { n:\"BrtMdb\" },\n0x0034: { n:\"BrtBeginFmd\" },\n0x0035: { n:\"BrtEndFmd\" },\n0x0036: { n:\"BrtBeginMdx\" },\n0x0037: { n:\"BrtEndMdx\" },\n0x0038: { n:\"BrtBeginMdxTuple\" },\n0x0039: { n:\"BrtEndMdxTuple\" },\n0x003A: { n:\"BrtMdxMbrIstr\" },\n0x003B: { n:\"BrtStr\" },\n0x003C: { n:\"BrtColInfo\", f:parse_ColInfo },\n0x003E: { n:\"BrtCellRString\" },\n0x003F: { n:\"BrtCalcChainItem$\", f:parse_BrtCalcChainItem$ },\n0x0040: { n:\"BrtDVal\", f:parse_BrtDVal },\n0x0041: { n:\"BrtSxvcellNum\" },\n0x0042: { n:\"BrtSxvcellStr\" },\n0x0043: { n:\"BrtSxvcellBool\" },\n0x0044: { n:\"BrtSxvcellErr\" },\n0x0045: { n:\"BrtSxvcellDate\" },\n0x0046: { n:\"BrtSxvcellNil\" },\n0x0080: { n:\"BrtFileVersion\" },\n0x0081: { n:\"BrtBeginSheet\" },\n0x0082: { n:\"BrtEndSheet\" },\n0x0083: { n:\"BrtBeginBook\", f:parsenoop, p:0 },\n0x0084: { n:\"BrtEndBook\" },\n0x0085: { n:\"BrtBeginWsViews\" },\n0x0086: { n:\"BrtEndWsViews\" },\n0x0087: { n:\"BrtBeginBookViews\" },\n0x0088: { n:\"BrtEndBookViews\" },\n0x0089: { n:\"BrtBeginWsView\", f:parse_BrtBeginWsView },\n0x008A: { n:\"BrtEndWsView\" },\n0x008B: { n:\"BrtBeginCsViews\" },\n0x008C: { n:\"BrtEndCsViews\" },\n0x008D: { n:\"BrtBeginCsView\" },\n0x008E: { n:\"BrtEndCsView\" },\n0x008F: { n:\"BrtBeginBundleShs\" },\n0x0090: { n:\"BrtEndBundleShs\" },\n0x0091: { n:\"BrtBeginSheetData\" },\n0x0092: { n:\"BrtEndSheetData\" },\n0x0093: { n:\"BrtWsProp\", f:parse_BrtWsProp },\n0x0094: { n:\"BrtWsDim\", f:parse_BrtWsDim, p:16 },\n0x0097: { n:\"BrtPane\", f:parse_BrtPane },\n0x0098: { n:\"BrtSel\" },\n0x0099: { n:\"BrtWbProp\", f:parse_BrtWbProp },\n0x009A: { n:\"BrtWbFactoid\" },\n0x009B: { n:\"BrtFileRecover\" },\n0x009C: { n:\"BrtBundleSh\", f:parse_BrtBundleSh },\n0x009D: { n:\"BrtCalcProp\" },\n0x009E: { n:\"BrtBookView\" },\n0x009F: { n:\"BrtBeginSst\", f:parse_BrtBeginSst },\n0x00A0: { n:\"BrtEndSst\" },\n0x00A1: { n:\"BrtBeginAFilter\", f:parse_UncheckedRfX },\n0x00A2: { n:\"BrtEndAFilter\" },\n0x00A3: { n:\"BrtBeginFilterColumn\" },\n0x00A4: { n:\"BrtEndFilterColumn\" },\n0x00A5: { n:\"BrtBeginFilters\" },\n0x00A6: { n:\"BrtEndFilters\" },\n0x00A7: { n:\"BrtFilter\" },\n0x00A8: { n:\"BrtColorFilter\" },\n0x00A9: { n:\"BrtIconFilter\" },\n0x00AA: { n:\"BrtTop10Filter\" },\n0x00AB: { n:\"BrtDynamicFilter\" },\n0x00AC: { n:\"BrtBeginCustomFilters\" },\n0x00AD: { n:\"BrtEndCustomFilters\" },\n0x00AE: { n:\"BrtCustomFilter\" },\n0x00AF: { n:\"BrtAFilterDateGroupItem\" },\n0x00B0: { n:\"BrtMergeCell\", f:parse_BrtMergeCell },\n0x00B1: { n:\"BrtBeginMergeCells\" },\n0x00B2: { n:\"BrtEndMergeCells\" },\n0x00B3: { n:\"BrtBeginPivotCacheDef\" },\n0x00B4: { n:\"BrtEndPivotCacheDef\" },\n0x00B5: { n:\"BrtBeginPCDFields\" },\n0x00B6: { n:\"BrtEndPCDFields\" },\n0x00B7: { n:\"BrtBeginPCDField\" },\n0x00B8: { n:\"BrtEndPCDField\" },\n0x00B9: { n:\"BrtBeginPCDSource\" },\n0x00BA: { n:\"BrtEndPCDSource\" },\n0x00BB: { n:\"BrtBeginPCDSRange\" },\n0x00BC: { n:\"BrtEndPCDSRange\" },\n0x00BD: { n:\"BrtBeginPCDFAtbl\" },\n0x00BE: { n:\"BrtEndPCDFAtbl\" },\n0x00BF: { n:\"BrtBeginPCDIRun\" },\n0x00C0: { n:\"BrtEndPCDIRun\" },\n0x00C1: { n:\"BrtBeginPivotCacheRecords\" },\n0x00C2: { n:\"BrtEndPivotCacheRecords\" },\n0x00C3: { n:\"BrtBeginPCDHierarchies\" },\n0x00C4: { n:\"BrtEndPCDHierarchies\" },\n0x00C5: { n:\"BrtBeginPCDHierarchy\" },\n0x00C6: { n:\"BrtEndPCDHierarchy\" },\n0x00C7: { n:\"BrtBeginPCDHFieldsUsage\" },\n0x00C8: { n:\"BrtEndPCDHFieldsUsage\" },\n0x00C9: { n:\"BrtBeginExtConnection\" },\n0x00CA: { n:\"BrtEndExtConnection\" },\n0x00CB: { n:\"BrtBeginECDbProps\" },\n0x00CC: { n:\"BrtEndECDbProps\" },\n0x00CD: { n:\"BrtBeginECOlapProps\" },\n0x00CE: { n:\"BrtEndECOlapProps\" },\n0x00CF: { n:\"BrtBeginPCDSConsol\" },\n0x00D0: { n:\"BrtEndPCDSConsol\" },\n0x00D1: { n:\"BrtBeginPCDSCPages\" },\n0x00D2: { n:\"BrtEndPCDSCPages\" },\n0x00D3: { n:\"BrtBeginPCDSCPage\" },\n0x00D4: { n:\"BrtEndPCDSCPage\" },\n0x00D5: { n:\"BrtBeginPCDSCPItem\" },\n0x00D6: { n:\"BrtEndPCDSCPItem\" },\n0x00D7: { n:\"BrtBeginPCDSCSets\" },\n0x00D8: { n:\"BrtEndPCDSCSets\" },\n0x00D9: { n:\"BrtBeginPCDSCSet\" },\n0x00DA: { n:\"BrtEndPCDSCSet\" },\n0x00DB: { n:\"BrtBeginPCDFGroup\" },\n0x00DC: { n:\"BrtEndPCDFGroup\" },\n0x00DD: { n:\"BrtBeginPCDFGItems\" },\n0x00DE: { n:\"BrtEndPCDFGItems\" },\n0x00DF: { n:\"BrtBeginPCDFGRange\" },\n0x00E0: { n:\"BrtEndPCDFGRange\" },\n0x00E1: { n:\"BrtBeginPCDFGDiscrete\" },\n0x00E2: { n:\"BrtEndPCDFGDiscrete\" },\n0x00E3: { n:\"BrtBeginPCDSDTupleCache\" },\n0x00E4: { n:\"BrtEndPCDSDTupleCache\" },\n0x00E5: { n:\"BrtBeginPCDSDTCEntries\" },\n0x00E6: { n:\"BrtEndPCDSDTCEntries\" },\n0x00E7: { n:\"BrtBeginPCDSDTCEMembers\" },\n0x00E8: { n:\"BrtEndPCDSDTCEMembers\" },\n0x00E9: { n:\"BrtBeginPCDSDTCEMember\" },\n0x00EA: { n:\"BrtEndPCDSDTCEMember\" },\n0x00EB: { n:\"BrtBeginPCDSDTCQueries\" },\n0x00EC: { n:\"BrtEndPCDSDTCQueries\" },\n0x00ED: { n:\"BrtBeginPCDSDTCQuery\" },\n0x00EE: { n:\"BrtEndPCDSDTCQuery\" },\n0x00EF: { n:\"BrtBeginPCDSDTCSets\" },\n0x00F0: { n:\"BrtEndPCDSDTCSets\" },\n0x00F1: { n:\"BrtBeginPCDSDTCSet\" },\n0x00F2: { n:\"BrtEndPCDSDTCSet\" },\n0x00F3: { n:\"BrtBeginPCDCalcItems\" },\n0x00F4: { n:\"BrtEndPCDCalcItems\" },\n0x00F5: { n:\"BrtBeginPCDCalcItem\" },\n0x00F6: { n:\"BrtEndPCDCalcItem\" },\n0x00F7: { n:\"BrtBeginPRule\" },\n0x00F8: { n:\"BrtEndPRule\" },\n0x00F9: { n:\"BrtBeginPRFilters\" },\n0x00FA: { n:\"BrtEndPRFilters\" },\n0x00FB: { n:\"BrtBeginPRFilter\" },\n0x00FC: { n:\"BrtEndPRFilter\" },\n0x00FD: { n:\"BrtBeginPNames\" },\n0x00FE: { n:\"BrtEndPNames\" },\n0x00FF: { n:\"BrtBeginPName\" },\n0x0100: { n:\"BrtEndPName\" },\n0x0101: { n:\"BrtBeginPNPairs\" },\n0x0102: { n:\"BrtEndPNPairs\" },\n0x0103: { n:\"BrtBeginPNPair\" },\n0x0104: { n:\"BrtEndPNPair\" },\n0x0105: { n:\"BrtBeginECWebProps\" },\n0x0106: { n:\"BrtEndECWebProps\" },\n0x0107: { n:\"BrtBeginEcWpTables\" },\n0x0108: { n:\"BrtEndECWPTables\" },\n0x0109: { n:\"BrtBeginECParams\" },\n0x010A: { n:\"BrtEndECParams\" },\n0x010B: { n:\"BrtBeginECParam\" },\n0x010C: { n:\"BrtEndECParam\" },\n0x010D: { n:\"BrtBeginPCDKPIs\" },\n0x010E: { n:\"BrtEndPCDKPIs\" },\n0x010F: { n:\"BrtBeginPCDKPI\" },\n0x0110: { n:\"BrtEndPCDKPI\" },\n0x0111: { n:\"BrtBeginDims\" },\n0x0112: { n:\"BrtEndDims\" },\n0x0113: { n:\"BrtBeginDim\" },\n0x0114: { n:\"BrtEndDim\" },\n0x0115: { n:\"BrtIndexPartEnd\" },\n0x0116: { n:\"BrtBeginStyleSheet\" },\n0x0117: { n:\"BrtEndStyleSheet\" },\n0x0118: { n:\"BrtBeginSXView\" },\n0x0119: { n:\"BrtEndSXVI\" },\n0x011A: { n:\"BrtBeginSXVI\" },\n0x011B: { n:\"BrtBeginSXVIs\" },\n0x011C: { n:\"BrtEndSXVIs\" },\n0x011D: { n:\"BrtBeginSXVD\" },\n0x011E: { n:\"BrtEndSXVD\" },\n0x011F: { n:\"BrtBeginSXVDs\" },\n0x0120: { n:\"BrtEndSXVDs\" },\n0x0121: { n:\"BrtBeginSXPI\" },\n0x0122: { n:\"BrtEndSXPI\" },\n0x0123: { n:\"BrtBeginSXPIs\" },\n0x0124: { n:\"BrtEndSXPIs\" },\n0x0125: { n:\"BrtBeginSXDI\" },\n0x0126: { n:\"BrtEndSXDI\" },\n0x0127: { n:\"BrtBeginSXDIs\" },\n0x0128: { n:\"BrtEndSXDIs\" },\n0x0129: { n:\"BrtBeginSXLI\" },\n0x012A: { n:\"BrtEndSXLI\" },\n0x012B: { n:\"BrtBeginSXLIRws\" },\n0x012C: { n:\"BrtEndSXLIRws\" },\n0x012D: { n:\"BrtBeginSXLICols\" },\n0x012E: { n:\"BrtEndSXLICols\" },\n0x012F: { n:\"BrtBeginSXFormat\" },\n0x0130: { n:\"BrtEndSXFormat\" },\n0x0131: { n:\"BrtBeginSXFormats\" },\n0x0132: { n:\"BrtEndSxFormats\" },\n0x0133: { n:\"BrtBeginSxSelect\" },\n0x0134: { n:\"BrtEndSxSelect\" },\n0x0135: { n:\"BrtBeginISXVDRws\" },\n0x0136: { n:\"BrtEndISXVDRws\" },\n0x0137: { n:\"BrtBeginISXVDCols\" },\n0x0138: { n:\"BrtEndISXVDCols\" },\n0x0139: { n:\"BrtEndSXLocation\" },\n0x013A: { n:\"BrtBeginSXLocation\" },\n0x013B: { n:\"BrtEndSXView\" },\n0x013C: { n:\"BrtBeginSXTHs\" },\n0x013D: { n:\"BrtEndSXTHs\" },\n0x013E: { n:\"BrtBeginSXTH\" },\n0x013F: { n:\"BrtEndSXTH\" },\n0x0140: { n:\"BrtBeginISXTHRws\" },\n0x0141: { n:\"BrtEndISXTHRws\" },\n0x0142: { n:\"BrtBeginISXTHCols\" },\n0x0143: { n:\"BrtEndISXTHCols\" },\n0x0144: { n:\"BrtBeginSXTDMPS\" },\n0x0145: { n:\"BrtEndSXTDMPs\" },\n0x0146: { n:\"BrtBeginSXTDMP\" },\n0x0147: { n:\"BrtEndSXTDMP\" },\n0x0148: { n:\"BrtBeginSXTHItems\" },\n0x0149: { n:\"BrtEndSXTHItems\" },\n0x014A: { n:\"BrtBeginSXTHItem\" },\n0x014B: { n:\"BrtEndSXTHItem\" },\n0x014C: { n:\"BrtBeginMetadata\" },\n0x014D: { n:\"BrtEndMetadata\" },\n0x014E: { n:\"BrtBeginEsmdtinfo\" },\n0x014F: { n:\"BrtMdtinfo\" },\n0x0150: { n:\"BrtEndEsmdtinfo\" },\n0x0151: { n:\"BrtBeginEsmdb\" },\n0x0152: { n:\"BrtEndEsmdb\" },\n0x0153: { n:\"BrtBeginEsfmd\" },\n0x0154: { n:\"BrtEndEsfmd\" },\n0x0155: { n:\"BrtBeginSingleCells\" },\n0x0156: { n:\"BrtEndSingleCells\" },\n0x0157: { n:\"BrtBeginList\" },\n0x0158: { n:\"BrtEndList\" },\n0x0159: { n:\"BrtBeginListCols\" },\n0x015A: { n:\"BrtEndListCols\" },\n0x015B: { n:\"BrtBeginListCol\" },\n0x015C: { n:\"BrtEndListCol\" },\n0x015D: { n:\"BrtBeginListXmlCPr\" },\n0x015E: { n:\"BrtEndListXmlCPr\" },\n0x015F: { n:\"BrtListCCFmla\" },\n0x0160: { n:\"BrtListTrFmla\" },\n0x0161: { n:\"BrtBeginExternals\" },\n0x0162: { n:\"BrtEndExternals\" },\n0x0163: { n:\"BrtSupBookSrc\", f:parse_RelID},\n0x0165: { n:\"BrtSupSelf\" },\n0x0166: { n:\"BrtSupSame\" },\n0x0167: { n:\"BrtSupTabs\" },\n0x0168: { n:\"BrtBeginSupBook\" },\n0x0169: { n:\"BrtPlaceholderName\" },\n0x016A: { n:\"BrtExternSheet\", f:parse_ExternSheet },\n0x016B: { n:\"BrtExternTableStart\" },\n0x016C: { n:\"BrtExternTableEnd\" },\n0x016E: { n:\"BrtExternRowHdr\" },\n0x016F: { n:\"BrtExternCellBlank\" },\n0x0170: { n:\"BrtExternCellReal\" },\n0x0171: { n:\"BrtExternCellBool\" },\n0x0172: { n:\"BrtExternCellError\" },\n0x0173: { n:\"BrtExternCellString\" },\n0x0174: { n:\"BrtBeginEsmdx\" },\n0x0175: { n:\"BrtEndEsmdx\" },\n0x0176: { n:\"BrtBeginMdxSet\" },\n0x0177: { n:\"BrtEndMdxSet\" },\n0x0178: { n:\"BrtBeginMdxMbrProp\" },\n0x0179: { n:\"BrtEndMdxMbrProp\" },\n0x017A: { n:\"BrtBeginMdxKPI\" },\n0x017B: { n:\"BrtEndMdxKPI\" },\n0x017C: { n:\"BrtBeginEsstr\" },\n0x017D: { n:\"BrtEndEsstr\" },\n0x017E: { n:\"BrtBeginPRFItem\" },\n0x017F: { n:\"BrtEndPRFItem\" },\n0x0180: { n:\"BrtBeginPivotCacheIDs\" },\n0x0181: { n:\"BrtEndPivotCacheIDs\" },\n0x0182: { n:\"BrtBeginPivotCacheID\" },\n0x0183: { n:\"BrtEndPivotCacheID\" },\n0x0184: { n:\"BrtBeginISXVIs\" },\n0x0185: { n:\"BrtEndISXVIs\" },\n0x0186: { n:\"BrtBeginColInfos\" },\n0x0187: { n:\"BrtEndColInfos\" },\n0x0188: { n:\"BrtBeginRwBrk\" },\n0x0189: { n:\"BrtEndRwBrk\" },\n0x018A: { n:\"BrtBeginColBrk\" },\n0x018B: { n:\"BrtEndColBrk\" },\n0x018C: { n:\"BrtBrk\" },\n0x018D: { n:\"BrtUserBookView\" },\n0x018E: { n:\"BrtInfo\" },\n0x018F: { n:\"BrtCUsr\" },\n0x0190: { n:\"BrtUsr\" },\n0x0191: { n:\"BrtBeginUsers\" },\n0x0193: { n:\"BrtEOF\" },\n0x0194: { n:\"BrtUCR\" },\n0x0195: { n:\"BrtRRInsDel\" },\n0x0196: { n:\"BrtRREndInsDel\" },\n0x0197: { n:\"BrtRRMove\" },\n0x0198: { n:\"BrtRREndMove\" },\n0x0199: { n:\"BrtRRChgCell\" },\n0x019A: { n:\"BrtRREndChgCell\" },\n0x019B: { n:\"BrtRRHeader\" },\n0x019C: { n:\"BrtRRUserView\" },\n0x019D: { n:\"BrtRRRenSheet\" },\n0x019E: { n:\"BrtRRInsertSh\" },\n0x019F: { n:\"BrtRRDefName\" },\n0x01A0: { n:\"BrtRRNote\" },\n0x01A1: { n:\"BrtRRConflict\" },\n0x01A2: { n:\"BrtRRTQSIF\" },\n0x01A3: { n:\"BrtRRFormat\" },\n0x01A4: { n:\"BrtRREndFormat\" },\n0x01A5: { n:\"BrtRRAutoFmt\" },\n0x01A6: { n:\"BrtBeginUserShViews\" },\n0x01A7: { n:\"BrtBeginUserShView\" },\n0x01A8: { n:\"BrtEndUserShView\" },\n0x01A9: { n:\"BrtEndUserShViews\" },\n0x01AA: { n:\"BrtArrFmla\", f:parse_BrtArrFmla },\n0x01AB: { n:\"BrtShrFmla\", f:parse_BrtShrFmla },\n0x01AC: { n:\"BrtTable\" },\n0x01AD: { n:\"BrtBeginExtConnections\" },\n0x01AE: { n:\"BrtEndExtConnections\" },\n0x01AF: { n:\"BrtBeginPCDCalcMems\" },\n0x01B0: { n:\"BrtEndPCDCalcMems\" },\n0x01B1: { n:\"BrtBeginPCDCalcMem\" },\n0x01B2: { n:\"BrtEndPCDCalcMem\" },\n0x01B3: { n:\"BrtBeginPCDHGLevels\" },\n0x01B4: { n:\"BrtEndPCDHGLevels\" },\n0x01B5: { n:\"BrtBeginPCDHGLevel\" },\n0x01B6: { n:\"BrtEndPCDHGLevel\" },\n0x01B7: { n:\"BrtBeginPCDHGLGroups\" },\n0x01B8: { n:\"BrtEndPCDHGLGroups\" },\n0x01B9: { n:\"BrtBeginPCDHGLGroup\" },\n0x01BA: { n:\"BrtEndPCDHGLGroup\" },\n0x01BB: { n:\"BrtBeginPCDHGLGMembers\" },\n0x01BC: { n:\"BrtEndPCDHGLGMembers\" },\n0x01BD: { n:\"BrtBeginPCDHGLGMember\" },\n0x01BE: { n:\"BrtEndPCDHGLGMember\" },\n0x01BF: { n:\"BrtBeginQSI\" },\n0x01C0: { n:\"BrtEndQSI\" },\n0x01C1: { n:\"BrtBeginQSIR\" },\n0x01C2: { n:\"BrtEndQSIR\" },\n0x01C3: { n:\"BrtBeginDeletedNames\" },\n0x01C4: { n:\"BrtEndDeletedNames\" },\n0x01C5: { n:\"BrtBeginDeletedName\" },\n0x01C6: { n:\"BrtEndDeletedName\" },\n0x01C7: { n:\"BrtBeginQSIFs\" },\n0x01C8: { n:\"BrtEndQSIFs\" },\n0x01C9: { n:\"BrtBeginQSIF\" },\n0x01CA: { n:\"BrtEndQSIF\" },\n0x01CB: { n:\"BrtBeginAutoSortScope\" },\n0x01CC: { n:\"BrtEndAutoSortScope\" },\n0x01CD: { n:\"BrtBeginConditionalFormatting\" },\n0x01CE: { n:\"BrtEndConditionalFormatting\" },\n0x01CF: { n:\"BrtBeginCFRule\" },\n0x01D0: { n:\"BrtEndCFRule\" },\n0x01D1: { n:\"BrtBeginIconSet\" },\n0x01D2: { n:\"BrtEndIconSet\" },\n0x01D3: { n:\"BrtBeginDatabar\" },\n0x01D4: { n:\"BrtEndDatabar\" },\n0x01D5: { n:\"BrtBeginColorScale\" },\n0x01D6: { n:\"BrtEndColorScale\" },\n0x01D7: { n:\"BrtCFVO\" },\n0x01D8: { n:\"BrtExternValueMeta\" },\n0x01D9: { n:\"BrtBeginColorPalette\" },\n0x01DA: { n:\"BrtEndColorPalette\" },\n0x01DB: { n:\"BrtIndexedColor\" },\n0x01DC: { n:\"BrtMargins\", f:parse_BrtMargins },\n0x01DD: { n:\"BrtPrintOptions\" },\n0x01DE: { n:\"BrtPageSetup\" },\n0x01DF: { n:\"BrtBeginHeaderFooter\" },\n0x01E0: { n:\"BrtEndHeaderFooter\" },\n0x01E1: { n:\"BrtBeginSXCrtFormat\" },\n0x01E2: { n:\"BrtEndSXCrtFormat\" },\n0x01E3: { n:\"BrtBeginSXCrtFormats\" },\n0x01E4: { n:\"BrtEndSXCrtFormats\" },\n0x01E5: { n:\"BrtWsFmtInfo\", f:parse_BrtWsFmtInfo },\n0x01E6: { n:\"BrtBeginMgs\" },\n0x01E7: { n:\"BrtEndMGs\" },\n0x01E8: { n:\"BrtBeginMGMaps\" },\n0x01E9: { n:\"BrtEndMGMaps\" },\n0x01EA: { n:\"BrtBeginMG\" },\n0x01EB: { n:\"BrtEndMG\" },\n0x01EC: { n:\"BrtBeginMap\" },\n0x01ED: { n:\"BrtEndMap\" },\n0x01EE: { n:\"BrtHLink\", f:parse_BrtHLink },\n0x01EF: { n:\"BrtBeginDCon\" },\n0x01F0: { n:\"BrtEndDCon\" },\n0x01F1: { n:\"BrtBeginDRefs\" },\n0x01F2: { n:\"BrtEndDRefs\" },\n0x01F3: { n:\"BrtDRef\" },\n0x01F4: { n:\"BrtBeginScenMan\" },\n0x01F5: { n:\"BrtEndScenMan\" },\n0x01F6: { n:\"BrtBeginSct\" },\n0x01F7: { n:\"BrtEndSct\" },\n0x01F8: { n:\"BrtSlc\" },\n0x01F9: { n:\"BrtBeginDXFs\" },\n0x01FA: { n:\"BrtEndDXFs\" },\n0x01FB: { n:\"BrtDXF\" },\n0x01FC: { n:\"BrtBeginTableStyles\" },\n0x01FD: { n:\"BrtEndTableStyles\" },\n0x01FE: { n:\"BrtBeginTableStyle\" },\n0x01FF: { n:\"BrtEndTableStyle\" },\n0x0200: { n:\"BrtTableStyleElement\" },\n0x0201: { n:\"BrtTableStyleClient\" },\n0x0202: { n:\"BrtBeginVolDeps\" },\n0x0203: { n:\"BrtEndVolDeps\" },\n0x0204: { n:\"BrtBeginVolType\" },\n0x0205: { n:\"BrtEndVolType\" },\n0x0206: { n:\"BrtBeginVolMain\" },\n0x0207: { n:\"BrtEndVolMain\" },\n0x0208: { n:\"BrtBeginVolTopic\" },\n0x0209: { n:\"BrtEndVolTopic\" },\n0x020A: { n:\"BrtVolSubtopic\" },\n0x020B: { n:\"BrtVolRef\" },\n0x020C: { n:\"BrtVolNum\" },\n0x020D: { n:\"BrtVolErr\" },\n0x020E: { n:\"BrtVolStr\" },\n0x020F: { n:\"BrtVolBool\" },\n0x0210: { n:\"BrtBeginCalcChain$\" },\n0x0211: { n:\"BrtEndCalcChain$\" },\n0x0212: { n:\"BrtBeginSortState\" },\n0x0213: { n:\"BrtEndSortState\" },\n0x0214: { n:\"BrtBeginSortCond\" },\n0x0215: { n:\"BrtEndSortCond\" },\n0x0216: { n:\"BrtBookProtection\" },\n0x0217: { n:\"BrtSheetProtection\" },\n0x0218: { n:\"BrtRangeProtection\" },\n0x0219: { n:\"BrtPhoneticInfo\" },\n0x021A: { n:\"BrtBeginECTxtWiz\" },\n0x021B: { n:\"BrtEndECTxtWiz\" },\n0x021C: { n:\"BrtBeginECTWFldInfoLst\" },\n0x021D: { n:\"BrtEndECTWFldInfoLst\" },\n0x021E: { n:\"BrtBeginECTwFldInfo\" },\n0x0224: { n:\"BrtFileSharing\" },\n0x0225: { n:\"BrtOleSize\" },\n0x0226: { n:\"BrtDrawing\", f:parse_RelID },\n0x0227: { n:\"BrtLegacyDrawing\" },\n0x0228: { n:\"BrtLegacyDrawingHF\" },\n0x0229: { n:\"BrtWebOpt\" },\n0x022A: { n:\"BrtBeginWebPubItems\" },\n0x022B: { n:\"BrtEndWebPubItems\" },\n0x022C: { n:\"BrtBeginWebPubItem\" },\n0x022D: { n:\"BrtEndWebPubItem\" },\n0x022E: { n:\"BrtBeginSXCondFmt\" },\n0x022F: { n:\"BrtEndSXCondFmt\" },\n0x0230: { n:\"BrtBeginSXCondFmts\" },\n0x0231: { n:\"BrtEndSXCondFmts\" },\n0x0232: { n:\"BrtBkHim\" },\n0x0234: { n:\"BrtColor\" },\n0x0235: { n:\"BrtBeginIndexedColors\" },\n0x0236: { n:\"BrtEndIndexedColors\" },\n0x0239: { n:\"BrtBeginMRUColors\" },\n0x023A: { n:\"BrtEndMRUColors\" },\n0x023C: { n:\"BrtMRUColor\" },\n0x023D: { n:\"BrtBeginDVals\" },\n0x023E: { n:\"BrtEndDVals\" },\n0x0241: { n:\"BrtSupNameStart\" },\n0x0242: { n:\"BrtSupNameValueStart\" },\n0x0243: { n:\"BrtSupNameValueEnd\" },\n0x0244: { n:\"BrtSupNameNum\" },\n0x0245: { n:\"BrtSupNameErr\" },\n0x0246: { n:\"BrtSupNameSt\" },\n0x0247: { n:\"BrtSupNameNil\" },\n0x0248: { n:\"BrtSupNameBool\" },\n0x0249: { n:\"BrtSupNameFmla\" },\n0x024A: { n:\"BrtSupNameBits\" },\n0x024B: { n:\"BrtSupNameEnd\" },\n0x024C: { n:\"BrtEndSupBook\" },\n0x024D: { n:\"BrtCellSmartTagProperty\" },\n0x024E: { n:\"BrtBeginCellSmartTag\" },\n0x024F: { n:\"BrtEndCellSmartTag\" },\n0x0250: { n:\"BrtBeginCellSmartTags\" },\n0x0251: { n:\"BrtEndCellSmartTags\" },\n0x0252: { n:\"BrtBeginSmartTags\" },\n0x0253: { n:\"BrtEndSmartTags\" },\n0x0254: { n:\"BrtSmartTagType\" },\n0x0255: { n:\"BrtBeginSmartTagTypes\" },\n0x0256: { n:\"BrtEndSmartTagTypes\" },\n0x0257: { n:\"BrtBeginSXFilters\" },\n0x0258: { n:\"BrtEndSXFilters\" },\n0x0259: { n:\"BrtBeginSXFILTER\" },\n0x025A: { n:\"BrtEndSXFilter\" },\n0x025B: { n:\"BrtBeginFills\" },\n0x025C: { n:\"BrtEndFills\" },\n0x025D: { n:\"BrtBeginCellWatches\" },\n0x025E: { n:\"BrtEndCellWatches\" },\n0x025F: { n:\"BrtCellWatch\" },\n0x0260: { n:\"BrtBeginCRErrs\" },\n0x0261: { n:\"BrtEndCRErrs\" },\n0x0262: { n:\"BrtCrashRecErr\" },\n0x0263: { n:\"BrtBeginFonts\" },\n0x0264: { n:\"BrtEndFonts\" },\n0x0265: { n:\"BrtBeginBorders\" },\n0x0266: { n:\"BrtEndBorders\" },\n0x0267: { n:\"BrtBeginFmts\" },\n0x0268: { n:\"BrtEndFmts\" },\n0x0269: { n:\"BrtBeginCellXFs\" },\n0x026A: { n:\"BrtEndCellXFs\" },\n0x026B: { n:\"BrtBeginStyles\" },\n0x026C: { n:\"BrtEndStyles\" },\n0x0271: { n:\"BrtBigName\" },\n0x0272: { n:\"BrtBeginCellStyleXFs\" },\n0x0273: { n:\"BrtEndCellStyleXFs\" },\n0x0274: { n:\"BrtBeginComments\" },\n0x0275: { n:\"BrtEndComments\" },\n0x0276: { n:\"BrtBeginCommentAuthors\" },\n0x0277: { n:\"BrtEndCommentAuthors\" },\n0x0278: { n:\"BrtCommentAuthor\", f:parse_BrtCommentAuthor },\n0x0279: { n:\"BrtBeginCommentList\" },\n0x027A: { n:\"BrtEndCommentList\" },\n0x027B: { n:\"BrtBeginComment\", f:parse_BrtBeginComment},\n0x027C: { n:\"BrtEndComment\" },\n0x027D: { n:\"BrtCommentText\", f:parse_BrtCommentText },\n0x027E: { n:\"BrtBeginOleObjects\" },\n0x027F: { n:\"BrtOleObject\" },\n0x0280: { n:\"BrtEndOleObjects\" },\n0x0281: { n:\"BrtBeginSxrules\" },\n0x0282: { n:\"BrtEndSxRules\" },\n0x0283: { n:\"BrtBeginActiveXControls\" },\n0x0284: { n:\"BrtActiveX\" },\n0x0285: { n:\"BrtEndActiveXControls\" },\n0x0286: { n:\"BrtBeginPCDSDTCEMembersSortBy\" },\n0x0288: { n:\"BrtBeginCellIgnoreECs\" },\n0x0289: { n:\"BrtCellIgnoreEC\" },\n0x028A: { n:\"BrtEndCellIgnoreECs\" },\n0x028B: { n:\"BrtCsProp\", f:parse_BrtCsProp },\n0x028C: { n:\"BrtCsPageSetup\" },\n0x028D: { n:\"BrtBeginUserCsViews\" },\n0x028E: { n:\"BrtEndUserCsViews\" },\n0x028F: { n:\"BrtBeginUserCsView\" },\n0x0290: { n:\"BrtEndUserCsView\" },\n0x0291: { n:\"BrtBeginPcdSFCIEntries\" },\n0x0292: { n:\"BrtEndPCDSFCIEntries\" },\n0x0293: { n:\"BrtPCDSFCIEntry\" },\n0x0294: { n:\"BrtBeginListParts\" },\n0x0295: { n:\"BrtListPart\" },\n0x0296: { n:\"BrtEndListParts\" },\n0x0297: { n:\"BrtSheetCalcProp\" },\n0x0298: { n:\"BrtBeginFnGroup\" },\n0x0299: { n:\"BrtFnGroup\" },\n0x029A: { n:\"BrtEndFnGroup\" },\n0x029B: { n:\"BrtSupAddin\" },\n0x029C: { n:\"BrtSXTDMPOrder\" },\n0x029D: { n:\"BrtCsProtection\" },\n0x029F: { n:\"BrtBeginWsSortMap\" },\n0x02A0: { n:\"BrtEndWsSortMap\" },\n0x02A1: { n:\"BrtBeginRRSort\" },\n0x02A2: { n:\"BrtEndRRSort\" },\n0x02A3: { n:\"BrtRRSortItem\" },\n0x02A4: { n:\"BrtFileSharingIso\" },\n0x02A5: { n:\"BrtBookProtectionIso\" },\n0x02A6: { n:\"BrtSheetProtectionIso\" },\n0x02A7: { n:\"BrtCsProtectionIso\" },\n0x02A8: { n:\"BrtRangeProtectionIso\" },\n0x02A9: { n:\"BrtDValList\" },\n0x0400: { n:\"BrtRwDescent\" },\n0x0401: { n:\"BrtKnownFonts\" },\n0x0402: { n:\"BrtBeginSXTupleSet\" },\n0x0403: { n:\"BrtEndSXTupleSet\" },\n0x0404: { n:\"BrtBeginSXTupleSetHeader\" },\n0x0405: { n:\"BrtEndSXTupleSetHeader\" },\n0x0406: { n:\"BrtSXTupleSetHeaderItem\" },\n0x0407: { n:\"BrtBeginSXTupleSetData\" },\n0x0408: { n:\"BrtEndSXTupleSetData\" },\n0x0409: { n:\"BrtBeginSXTupleSetRow\" },\n0x040A: { n:\"BrtEndSXTupleSetRow\" },\n0x040B: { n:\"BrtSXTupleSetRowItem\" },\n0x040C: { n:\"BrtNameExt\" },\n0x040D: { n:\"BrtPCDH14\" },\n0x040E: { n:\"BrtBeginPCDCalcMem14\" },\n0x040F: { n:\"BrtEndPCDCalcMem14\" },\n0x0410: { n:\"BrtSXTH14\" },\n0x0411: { n:\"BrtBeginSparklineGroup\" },\n0x0412: { n:\"BrtEndSparklineGroup\" },\n0x0413: { n:\"BrtSparkline\" },\n0x0414: { n:\"BrtSXDI14\" },\n0x0415: { n:\"BrtWsFmtInfoEx14\" },\n0x0416: { n:\"BrtBeginConditionalFormatting14\" },\n0x0417: { n:\"BrtEndConditionalFormatting14\" },\n0x0418: { n:\"BrtBeginCFRule14\" },\n0x0419: { n:\"BrtEndCFRule14\" },\n0x041A: { n:\"BrtCFVO14\" },\n0x041B: { n:\"BrtBeginDatabar14\" },\n0x041C: { n:\"BrtBeginIconSet14\" },\n0x041D: { n:\"BrtDVal14\", f: parse_BrtDVal14 },\n0x041E: { n:\"BrtBeginDVals14\" },\n0x041F: { n:\"BrtColor14\" },\n0x0420: { n:\"BrtBeginSparklines\" },\n0x0421: { n:\"BrtEndSparklines\" },\n0x0422: { n:\"BrtBeginSparklineGroups\" },\n0x0423: { n:\"BrtEndSparklineGroups\" },\n0x0425: { n:\"BrtSXVD14\" },\n0x0426: { n:\"BrtBeginSXView14\" },\n0x0427: { n:\"BrtEndSXView14\" },\n0x0428: { n:\"BrtBeginSXView16\" },\n0x0429: { n:\"BrtEndSXView16\" },\n0x042A: { n:\"BrtBeginPCD14\" },\n0x042B: { n:\"BrtEndPCD14\" },\n0x042C: { n:\"BrtBeginExtConn14\" },\n0x042D: { n:\"BrtEndExtConn14\" },\n0x042E: { n:\"BrtBeginSlicerCacheIDs\" },\n0x042F: { n:\"BrtEndSlicerCacheIDs\" },\n0x0430: { n:\"BrtBeginSlicerCacheID\" },\n0x0431: { n:\"BrtEndSlicerCacheID\" },\n0x0433: { n:\"BrtBeginSlicerCache\" },\n0x0434: { n:\"BrtEndSlicerCache\" },\n0x0435: { n:\"BrtBeginSlicerCacheDef\" },\n0x0436: { n:\"BrtEndSlicerCacheDef\" },\n0x0437: { n:\"BrtBeginSlicersEx\" },\n0x0438: { n:\"BrtEndSlicersEx\" },\n0x0439: { n:\"BrtBeginSlicerEx\" },\n0x043A: { n:\"BrtEndSlicerEx\" },\n0x043B: { n:\"BrtBeginSlicer\" },\n0x043C: { n:\"BrtEndSlicer\" },\n0x043D: { n:\"BrtSlicerCachePivotTables\" },\n0x043E: { n:\"BrtBeginSlicerCacheOlapImpl\" },\n0x043F: { n:\"BrtEndSlicerCacheOlapImpl\" },\n0x0440: { n:\"BrtBeginSlicerCacheLevelsData\" },\n0x0441: { n:\"BrtEndSlicerCacheLevelsData\" },\n0x0442: { n:\"BrtBeginSlicerCacheLevelData\" },\n0x0443: { n:\"BrtEndSlicerCacheLevelData\" },\n0x0444: { n:\"BrtBeginSlicerCacheSiRanges\" },\n0x0445: { n:\"BrtEndSlicerCacheSiRanges\" },\n0x0446: { n:\"BrtBeginSlicerCacheSiRange\" },\n0x0447: { n:\"BrtEndSlicerCacheSiRange\" },\n0x0448: { n:\"BrtSlicerCacheOlapItem\" },\n0x0449: { n:\"BrtBeginSlicerCacheSelections\" },\n0x044A: { n:\"BrtSlicerCacheSelection\" },\n0x044B: { n:\"BrtEndSlicerCacheSelections\" },\n0x044C: { n:\"BrtBeginSlicerCacheNative\" },\n0x044D: { n:\"BrtEndSlicerCacheNative\" },\n0x044E: { n:\"BrtSlicerCacheNativeItem\" },\n0x044F: { n:\"BrtRangeProtection14\" },\n0x0450: { n:\"BrtRangeProtectionIso14\" },\n0x0451: { n:\"BrtCellIgnoreEC14\" },\n0x0457: { n:\"BrtList14\" },\n0x0458: { n:\"BrtCFIcon\" },\n0x0459: { n:\"BrtBeginSlicerCachesPivotCacheIDs\" },\n0x045A: { n:\"BrtEndSlicerCachesPivotCacheIDs\" },\n0x045B: { n:\"BrtBeginSlicers\" },\n0x045C: { n:\"BrtEndSlicers\" },\n0x045D: { n:\"BrtWbProp14\" },\n0x045E: { n:\"BrtBeginSXEdit\" },\n0x045F: { n:\"BrtEndSXEdit\" },\n0x0460: { n:\"BrtBeginSXEdits\" },\n0x0461: { n:\"BrtEndSXEdits\" },\n0x0462: { n:\"BrtBeginSXChange\" },\n0x0463: { n:\"BrtEndSXChange\" },\n0x0464: { n:\"BrtBeginSXChanges\" },\n0x0465: { n:\"BrtEndSXChanges\" },\n0x0466: { n:\"BrtSXTupleItems\" },\n0x0468: { n:\"BrtBeginSlicerStyle\" },\n0x0469: { n:\"BrtEndSlicerStyle\" },\n0x046A: { n:\"BrtSlicerStyleElement\" },\n0x046B: { n:\"BrtBeginStyleSheetExt14\" },\n0x046C: { n:\"BrtEndStyleSheetExt14\" },\n0x046D: { n:\"BrtBeginSlicerCachesPivotCacheID\" },\n0x046E: { n:\"BrtEndSlicerCachesPivotCacheID\" },\n0x046F: { n:\"BrtBeginConditionalFormattings\" },\n0x0470: { n:\"BrtEndConditionalFormattings\" },\n0x0471: { n:\"BrtBeginPCDCalcMemExt\" },\n0x0472: { n:\"BrtEndPCDCalcMemExt\" },\n0x0473: { n:\"BrtBeginPCDCalcMemsExt\" },\n0x0474: { n:\"BrtEndPCDCalcMemsExt\" },\n0x0475: { n:\"BrtPCDField14\" },\n0x0476: { n:\"BrtBeginSlicerStyles\" },\n0x0477: { n:\"BrtEndSlicerStyles\" },\n0x0478: { n:\"BrtBeginSlicerStyleElements\" },\n0x0479: { n:\"BrtEndSlicerStyleElements\" },\n0x047A: { n:\"BrtCFRuleExt\" },\n0x047B: { n:\"BrtBeginSXCondFmt14\" },\n0x047C: { n:\"BrtEndSXCondFmt14\" },\n0x047D: { n:\"BrtBeginSXCondFmts14\" },\n0x047E: { n:\"BrtEndSXCondFmts14\" },\n0x0480: { n:\"BrtBeginSortCond14\" },\n0x0481: { n:\"BrtEndSortCond14\" },\n0x0482: { n:\"BrtEndDVals14\" },\n0x0483: { n:\"BrtEndIconSet14\" },\n0x0484: { n:\"BrtEndDatabar14\" },\n0x0485: { n:\"BrtBeginColorScale14\" },\n0x0486: { n:\"BrtEndColorScale14\" },\n0x0487: { n:\"BrtBeginSxrules14\" },\n0x0488: { n:\"BrtEndSxrules14\" },\n0x0489: { n:\"BrtBeginPRule14\" },\n0x048A: { n:\"BrtEndPRule14\" },\n0x048B: { n:\"BrtBeginPRFilters14\" },\n0x048C: { n:\"BrtEndPRFilters14\" },\n0x048D: { n:\"BrtBeginPRFilter14\" },\n0x048E: { n:\"BrtEndPRFilter14\" },\n0x048F: { n:\"BrtBeginPRFItem14\" },\n0x0490: { n:\"BrtEndPRFItem14\" },\n0x0491: { n:\"BrtBeginCellIgnoreECs14\" },\n0x0492: { n:\"BrtEndCellIgnoreECs14\" },\n0x0493: { n:\"BrtDxf14\" },\n0x0494: { n:\"BrtBeginDxF14s\" },\n0x0495: { n:\"BrtEndDxf14s\" },\n0x0499: { n:\"BrtFilter14\" },\n0x049A: { n:\"BrtBeginCustomFilters14\" },\n0x049C: { n:\"BrtCustomFilter14\" },\n0x049D: { n:\"BrtIconFilter14\" },\n0x049E: { n:\"BrtPivotCacheConnectionName\" },\n0x0800: { n:\"BrtBeginDecoupledPivotCacheIDs\" },\n0x0801: { n:\"BrtEndDecoupledPivotCacheIDs\" },\n0x0802: { n:\"BrtDecoupledPivotCacheID\" },\n0x0803: { n:\"BrtBeginPivotTableRefs\" },\n0x0804: { n:\"BrtEndPivotTableRefs\" },\n0x0805: { n:\"BrtPivotTableRef\" },\n0x0806: { n:\"BrtSlicerCacheBookPivotTables\" },\n0x0807: { n:\"BrtBeginSxvcells\" },\n0x0808: { n:\"BrtEndSxvcells\" },\n0x0809: { n:\"BrtBeginSxRow\" },\n0x080A: { n:\"BrtEndSxRow\" },\n0x080C: { n:\"BrtPcdCalcMem15\" },\n0x0813: { n:\"BrtQsi15\" },\n0x0814: { n:\"BrtBeginWebExtensions\" },\n0x0815: { n:\"BrtEndWebExtensions\" },\n0x0816: { n:\"BrtWebExtension\" },\n0x0817: { n:\"BrtAbsPath15\" },\n0x0818: { n:\"BrtBeginPivotTableUISettings\" },\n0x0819: { n:\"BrtEndPivotTableUISettings\" },\n0x081B: { n:\"BrtTableSlicerCacheIDs\" },\n0x081C: { n:\"BrtTableSlicerCacheID\" },\n0x081D: { n:\"BrtBeginTableSlicerCache\" },\n0x081E: { n:\"BrtEndTableSlicerCache\" },\n0x081F: { n:\"BrtSxFilter15\" },\n0x0820: { n:\"BrtBeginTimelineCachePivotCacheIDs\" },\n0x0821: { n:\"BrtEndTimelineCachePivotCacheIDs\" },\n0x0822: { n:\"BrtTimelineCachePivotCacheID\" },\n0x0823: { n:\"BrtBeginTimelineCacheIDs\" },\n0x0824: { n:\"BrtEndTimelineCacheIDs\" },\n0x0825: { n:\"BrtBeginTimelineCacheID\" },\n0x0826: { n:\"BrtEndTimelineCacheID\" },\n0x0827: { n:\"BrtBeginTimelinesEx\" },\n0x0828: { n:\"BrtEndTimelinesEx\" },\n0x0829: { n:\"BrtBeginTimelineEx\" },\n0x082A: { n:\"BrtEndTimelineEx\" },\n0x082B: { n:\"BrtWorkBookPr15\" },\n0x082C: { n:\"BrtPCDH15\" },\n0x082D: { n:\"BrtBeginTimelineStyle\" },\n0x082E: { n:\"BrtEndTimelineStyle\" },\n0x082F: { n:\"BrtTimelineStyleElement\" },\n0x0830: { n:\"BrtBeginTimelineStylesheetExt15\" },\n0x0831: { n:\"BrtEndTimelineStylesheetExt15\" },\n0x0832: { n:\"BrtBeginTimelineStyles\" },\n0x0833: { n:\"BrtEndTimelineStyles\" },\n0x0834: { n:\"BrtBeginTimelineStyleElements\" },\n0x0835: { n:\"BrtEndTimelineStyleElements\" },\n0x0836: { n:\"BrtDxf15\" },\n0x0837: { n:\"BrtBeginDxfs15\" },\n0x0838: { n:\"brtEndDxfs15\" },\n0x0839: { n:\"BrtSlicerCacheHideItemsWithNoData\" },\n0x083A: { n:\"BrtBeginItemUniqueNames\" },\n0x083B: { n:\"BrtEndItemUniqueNames\" },\n0x083C: { n:\"BrtItemUniqueName\" },\n0x083D: { n:\"BrtBeginExtConn15\" },\n0x083E: { n:\"BrtEndExtConn15\" },\n0x083F: { n:\"BrtBeginOledbPr15\" },\n0x0840: { n:\"BrtEndOledbPr15\" },\n0x0841: { n:\"BrtBeginDataFeedPr15\" },\n0x0842: { n:\"BrtEndDataFeedPr15\" },\n0x0843: { n:\"BrtTextPr15\" },\n0x0844: { n:\"BrtRangePr15\" },\n0x0845: { n:\"BrtDbCommand15\" },\n0x0846: { n:\"BrtBeginDbTables15\" },\n0x0847: { n:\"BrtEndDbTables15\" },\n0x0848: { n:\"BrtDbTable15\" },\n0x0849: { n:\"BrtBeginDataModel\" },\n0x084A: { n:\"BrtEndDataModel\" },\n0x084B: { n:\"BrtBeginModelTables\" },\n0x084C: { n:\"BrtEndModelTables\" },\n0x084D: { n:\"BrtModelTable\" },\n0x084E: { n:\"BrtBeginModelRelationships\" },\n0x084F: { n:\"BrtEndModelRelationships\" },\n0x0850: { n:\"BrtModelRelationship\" },\n0x0851: { n:\"BrtBeginECTxtWiz15\" },\n0x0852: { n:\"BrtEndECTxtWiz15\" },\n0x0853: { n:\"BrtBeginECTWFldInfoLst15\" },\n0x0854: { n:\"BrtEndECTWFldInfoLst15\" },\n0x0855: { n:\"BrtBeginECTWFldInfo15\" },\n0x0856: { n:\"BrtFieldListActiveItem\" },\n0x0857: { n:\"BrtPivotCacheIdVersion\" },\n0x0858: { n:\"BrtSXDI15\" },\n0x0859: { n:\"BrtBeginModelTimeGroupings\" },\n0x085A: { n:\"BrtEndModelTimeGroupings\" },\n0x085B: { n:\"BrtBeginModelTimeGrouping\" },\n0x085C: { n:\"BrtEndModelTimeGrouping\" },\n0x085D: { n:\"BrtModelTimeGroupingCalcCol\" },\n0x0C00: { n:\"BrtUid\" },\n0x0C01: { n:\"BrtRevisionPtr\" },\n0x13e7: { n:\"BrtBeginCalcFeatures\" },\n0x13e8: { n:\"BrtEndCalcFeatures\" },\n0x13e9: { n:\"BrtCalcFeature\" },\n0xFFFF: { n:\"\" }\n};\n\nvar XLSBRE = evert_key(XLSBRecordEnum, 'n');\n\n/* [MS-XLS] 2.3 Record Enumeration */\nvar XLSRecordEnum = {\n0x0003: { n:\"BIFF2NUM\", f:parse_BIFF2NUM },\n0x0004: { n:\"BIFF2STR\", f:parse_BIFF2STR },\n0x0006: { n:\"Formula\", f:parse_Formula },\n0x0009: { n:'BOF', f:parse_BOF },\n0x000a: { n:'EOF', f:parsenoop2 },\n0x000c: { n:\"CalcCount\", f:parseuint16 },\n0x000d: { n:\"CalcMode\", f:parseuint16 },\n0x000e: { n:\"CalcPrecision\", f:parsebool },\n0x000f: { n:\"CalcRefMode\", f:parsebool },\n0x0010: { n:\"CalcDelta\", f:parse_Xnum },\n0x0011: { n:\"CalcIter\", f:parsebool },\n0x0012: { n:\"Protect\", f:parsebool },\n0x0013: { n:\"Password\", f:parseuint16 },\n0x0014: { n:\"Header\", f:parse_XLHeaderFooter },\n0x0015: { n:\"Footer\", f:parse_XLHeaderFooter },\n0x0017: { n:\"ExternSheet\", f:parse_ExternSheet },\n0x0018: { n:\"Lbl\", f:parse_Lbl },\n0x0019: { n:\"WinProtect\", f:parsebool },\n0x001a: { n:\"VerticalPageBreaks\" },\n0x001b: { n:\"HorizontalPageBreaks\" },\n0x001c: { n:\"Note\", f:parse_Note },\n0x001d: { n:\"Selection\" },\n0x0022: { n:\"Date1904\", f:parsebool },\n0x0023: { n:\"ExternName\", f:parse_ExternName },\n0x0024: { n:\"COLWIDTH\" },\n0x0026: { n:\"LeftMargin\", f:parse_Xnum },\n0x0027: { n:\"RightMargin\", f:parse_Xnum },\n0x0028: { n:\"TopMargin\", f:parse_Xnum },\n0x0029: { n:\"BottomMargin\", f:parse_Xnum },\n0x002a: { n:\"PrintRowCol\", f:parsebool },\n0x002b: { n:\"PrintGrid\", f:parsebool },\n0x002f: { n:\"FilePass\", f:parse_FilePass },\n0x0031: { n:\"Font\", f:parse_Font },\n0x0033: { n:\"PrintSize\", f:parseuint16 },\n0x003c: { n:\"Continue\" },\n0x003d: { n:\"Window1\", f:parse_Window1 },\n0x0040: { n:\"Backup\", f:parsebool },\n0x0041: { n:\"Pane\", f:parse_Pane },\n0x0042: { n:'CodePage', f:parseuint16 },\n0x004d: { n:\"Pls\" },\n0x0050: { n:\"DCon\" },\n0x0051: { n:\"DConRef\" },\n0x0052: { n:\"DConName\" },\n0x0055: { n:\"DefColWidth\", f:parseuint16 },\n0x0059: { n:\"XCT\" },\n0x005a: { n:\"CRN\" },\n0x005b: { n:\"FileSharing\" },\n0x005c: { n:'WriteAccess', f:parse_WriteAccess },\n0x005d: { n:\"Obj\", f:parse_Obj },\n0x005e: { n:\"Uncalced\" },\n0x005f: { n:\"CalcSaveRecalc\", f:parsebool },\n0x0060: { n:\"Template\" },\n0x0061: { n:\"Intl\" },\n0x0063: { n:\"ObjProtect\", f:parsebool },\n0x007d: { n:\"ColInfo\", f:parse_ColInfo },\n0x0080: { n:\"Guts\", f:parse_Guts },\n0x0081: { n:\"WsBool\", f:parse_WsBool },\n0x0082: { n:\"GridSet\", f:parseuint16 },\n0x0083: { n:\"HCenter\", f:parsebool },\n0x0084: { n:\"VCenter\", f:parsebool },\n0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },\n0x0086: { n:\"WriteProtect\" },\n0x008c: { n:\"Country\", f:parse_Country },\n0x008d: { n:\"HideObj\", f:parseuint16 },\n0x0090: { n:\"Sort\" },\n0x0092: { n:\"Palette\", f:parse_Palette },\n0x0097: { n:\"Sync\" },\n0x0098: { n:\"LPr\" },\n0x0099: { n:\"DxGCol\" },\n0x009a: { n:\"FnGroupName\" },\n0x009b: { n:\"FilterMode\" },\n0x009c: { n:\"BuiltInFnGroupCount\", f:parseuint16 },\n0x009d: { n:\"AutoFilterInfo\" },\n0x009e: { n:\"AutoFilter\" },\n0x00a0: { n:\"Scl\", f:parse_Scl },\n0x00a1: { n:\"Setup\", f:parse_Setup },\n0x00ae: { n:\"ScenMan\" },\n0x00af: { n:\"SCENARIO\" },\n0x00b0: { n:\"SxView\" },\n0x00b1: { n:\"Sxvd\" },\n0x00b2: { n:\"SXVI\" },\n0x00b4: { n:\"SxIvd\" },\n0x00b5: { n:\"SXLI\" },\n0x00b6: { n:\"SXPI\" },\n0x00b8: { n:\"DocRoute\" },\n0x00b9: { n:\"RecipName\" },\n0x00bd: { n:\"MulRk\", f:parse_MulRk },\n0x00be: { n:\"MulBlank\", f:parse_MulBlank },\n0x00c1: { n:'Mms', f:parsenoop2 },\n0x00c5: { n:\"SXDI\" },\n0x00c6: { n:\"SXDB\" },\n0x00c7: { n:\"SXFDB\" },\n0x00c8: { n:\"SXDBB\" },\n0x00c9: { n:\"SXNum\" },\n0x00ca: { n:\"SxBool\", f:parsebool },\n0x00cb: { n:\"SxErr\" },\n0x00cc: { n:\"SXInt\" },\n0x00cd: { n:\"SXString\" },\n0x00ce: { n:\"SXDtr\" },\n0x00cf: { n:\"SxNil\" },\n0x00d0: { n:\"SXTbl\" },\n0x00d1: { n:\"SXTBRGIITM\" },\n0x00d2: { n:\"SxTbpg\" },\n0x00d3: { n:\"ObProj\" },\n0x00d5: { n:\"SXStreamID\" },\n0x00d7: { n:\"DBCell\" },\n0x00d8: { n:\"SXRng\" },\n0x00d9: { n:\"SxIsxoper\" },\n0x00da: { n:\"BookBool\", f:parseuint16 },\n0x00dc: { n:\"DbOrParamQry\" },\n0x00dd: { n:\"ScenarioProtect\", f:parsebool },\n0x00de: { n:\"OleObjectSize\" },\n0x00e0: { n:\"XF\", f:parse_XF },\n0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },\n0x00e2: { n:'InterfaceEnd', f:parsenoop2 },\n0x00e3: { n:\"SXVS\" },\n0x00e5: { n:\"MergeCells\", f:parse_MergeCells },\n0x00e9: { n:\"BkHim\" },\n0x00eb: { n:\"MsoDrawingGroup\" },\n0x00ec: { n:\"MsoDrawing\" },\n0x00ed: { n:\"MsoDrawingSelection\" },\n0x00ef: { n:\"PhoneticInfo\" },\n0x00f0: { n:\"SxRule\" },\n0x00f1: { n:\"SXEx\" },\n0x00f2: { n:\"SxFilt\" },\n0x00f4: { n:\"SxDXF\" },\n0x00f5: { n:\"SxItm\" },\n0x00f6: { n:\"SxName\" },\n0x00f7: { n:\"SxSelect\" },\n0x00f8: { n:\"SXPair\" },\n0x00f9: { n:\"SxFmla\" },\n0x00fb: { n:\"SxFormat\" },\n0x00fc: { n:\"SST\", f:parse_SST },\n0x00fd: { n:\"LabelSst\", f:parse_LabelSst },\n0x00ff: { n:\"ExtSST\", f:parse_ExtSST },\n0x0100: { n:\"SXVDEx\" },\n0x0103: { n:\"SXFormula\" },\n0x0122: { n:\"SXDBEx\" },\n0x0137: { n:\"RRDInsDel\" },\n0x0138: { n:\"RRDHead\" },\n0x013b: { n:\"RRDChgCell\" },\n0x013d: { n:\"RRTabId\", f:parseuint16a },\n0x013e: { n:\"RRDRenSheet\" },\n0x013f: { n:\"RRSort\" },\n0x0140: { n:\"RRDMove\" },\n0x014a: { n:\"RRFormat\" },\n0x014b: { n:\"RRAutoFmt\" },\n0x014d: { n:\"RRInsertSh\" },\n0x014e: { n:\"RRDMoveBegin\" },\n0x014f: { n:\"RRDMoveEnd\" },\n0x0150: { n:\"RRDInsDelBegin\" },\n0x0151: { n:\"RRDInsDelEnd\" },\n0x0152: { n:\"RRDConflict\" },\n0x0153: { n:\"RRDDefName\" },\n0x0154: { n:\"RRDRstEtxp\" },\n0x015f: { n:\"LRng\" },\n0x0160: { n:\"UsesELFs\", f:parsebool },\n0x0161: { n:\"DSF\", f:parsenoop2 },\n0x0191: { n:\"CUsr\" },\n0x0192: { n:\"CbUsr\" },\n0x0193: { n:\"UsrInfo\" },\n0x0194: { n:\"UsrExcl\" },\n0x0195: { n:\"FileLock\" },\n0x0196: { n:\"RRDInfo\" },\n0x0197: { n:\"BCUsrs\" },\n0x0198: { n:\"UsrChk\" },\n0x01a9: { n:\"UserBView\" },\n0x01aa: { n:\"UserSViewBegin\" },\n0x01ab: { n:\"UserSViewEnd\" },\n0x01ac: { n:\"RRDUserView\" },\n0x01ad: { n:\"Qsi\" },\n0x01ae: { n:\"SupBook\", f:parse_SupBook },\n0x01af: { n:\"Prot4Rev\", f:parsebool },\n0x01b0: { n:\"CondFmt\" },\n0x01b1: { n:\"CF\" },\n0x01b2: { n:\"DVal\" },\n0x01b5: { n:\"DConBin\" },\n0x01b6: { n:\"TxO\", f:parse_TxO },\n0x01b7: { n:\"RefreshAll\", f:parsebool },\n0x01b8: { n:\"HLink\", f:parse_HLink },\n0x01b9: { n:\"Lel\" },\n0x01ba: { n:\"CodeName\", f:parse_XLUnicodeString },\n0x01bb: { n:\"SXFDBType\" },\n0x01bc: { n:\"Prot4RevPass\", f:parseuint16 },\n0x01bd: { n:\"ObNoMacros\" },\n0x01be: { n:\"Dv\" },\n0x01c0: { n:\"Excel9File\", f:parsenoop2 },\n0x01c1: { n:\"RecalcId\", f:parse_RecalcId, r:2},\n0x01c2: { n:\"EntExU2\", f:parsenoop2 },\n0x0200: { n:\"Dimensions\", f:parse_Dimensions },\n0x0201: { n:\"Blank\", f:parse_Blank },\n0x0203: { n:\"Number\", f:parse_Number },\n0x0204: { n:\"Label\", f:parse_Label },\n0x0205: { n:\"BoolErr\", f:parse_BoolErr },\n0x0206: { n:\"Formula\", f:parse_Formula },\n0x0207: { n:\"String\", f:parse_String },\n0x0208: { n:'Row', f:parse_Row },\n0x020b: { n:\"Index\" },\n0x0221: { n:\"Array\", f:parse_Array },\n0x0225: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0236: { n:\"Table\" },\n0x023e: { n:\"Window2\", f:parse_Window2 },\n0x027e: { n:\"RK\", f:parse_RK },\n0x0293: { n:\"Style\" },\n0x0406: { n:\"Formula\", f:parse_Formula },\n0x0418: { n:\"BigName\" },\n0x041e: { n:\"Format\", f:parse_Format },\n0x043c: { n:\"ContinueBigName\" },\n0x04bc: { n:\"ShrFmla\", f:parse_ShrFmla },\n0x0800: { n:\"HLinkTooltip\", f:parse_HLinkTooltip },\n0x0801: { n:\"WebPub\" },\n0x0802: { n:\"QsiSXTag\" },\n0x0803: { n:\"DBQueryExt\" },\n0x0804: { n:\"ExtString\" },\n0x0805: { n:\"TxtQry\" },\n0x0806: { n:\"Qsir\" },\n0x0807: { n:\"Qsif\" },\n0x0808: { n:\"RRDTQSIF\" },\n0x0809: { n:'BOF', f:parse_BOF },\n0x080a: { n:\"OleDbConn\" },\n0x080b: { n:\"WOpt\" },\n0x080c: { n:\"SXViewEx\" },\n0x080d: { n:\"SXTH\" },\n0x080e: { n:\"SXPIEx\" },\n0x080f: { n:\"SXVDTEx\" },\n0x0810: { n:\"SXViewEx9\" },\n0x0812: { n:\"ContinueFrt\" },\n0x0813: { n:\"RealTimeData\" },\n0x0850: { n:\"ChartFrtInfo\" },\n0x0851: { n:\"FrtWrapper\" },\n0x0852: { n:\"StartBlock\" },\n0x0853: { n:\"EndBlock\" },\n0x0854: { n:\"StartObject\" },\n0x0855: { n:\"EndObject\" },\n0x0856: { n:\"CatLab\" },\n0x0857: { n:\"YMult\" },\n0x0858: { n:\"SXViewLink\" },\n0x0859: { n:\"PivotChartBits\" },\n0x085a: { n:\"FrtFontList\" },\n0x0862: { n:\"SheetExt\" },\n0x0863: { n:\"BookExt\", r:12},\n0x0864: { n:\"SXAddl\" },\n0x0865: { n:\"CrErr\" },\n0x0866: { n:\"HFPicture\" },\n0x0867: { n:'FeatHdr', f:parsenoop2 },\n0x0868: { n:\"Feat\" },\n0x086a: { n:\"DataLabExt\" },\n0x086b: { n:\"DataLabExtContents\" },\n0x086c: { n:\"CellWatch\" },\n0x0871: { n:\"FeatHdr11\" },\n0x0872: { n:\"Feature11\" },\n0x0874: { n:\"DropDownObjIds\" },\n0x0875: { n:\"ContinueFrt11\" },\n0x0876: { n:\"DConn\" },\n0x0877: { n:\"List12\" },\n0x0878: { n:\"Feature12\" },\n0x0879: { n:\"CondFmt12\" },\n0x087a: { n:\"CF12\" },\n0x087b: { n:\"CFEx\" },\n0x087c: { n:\"XFCRC\", f:parse_XFCRC, r:12 },\n0x087d: { n:\"XFExt\", f:parse_XFExt, r:12 },\n0x087e: { n:\"AutoFilter12\" },\n0x087f: { n:\"ContinueFrt12\" },\n0x0884: { n:\"MDTInfo\" },\n0x0885: { n:\"MDXStr\" },\n0x0886: { n:\"MDXTuple\" },\n0x0887: { n:\"MDXSet\" },\n0x0888: { n:\"MDXProp\" },\n0x0889: { n:\"MDXKPI\" },\n0x088a: { n:\"MDB\" },\n0x088b: { n:\"PLV\" },\n0x088c: { n:\"Compat12\", f:parsebool, r:12 },\n0x088d: { n:\"DXF\" },\n0x088e: { n:\"TableStyles\", r:12 },\n0x088f: { n:\"TableStyle\" },\n0x0890: { n:\"TableStyleElement\" },\n0x0892: { n:\"StyleExt\" },\n0x0893: { n:\"NamePublish\" },\n0x0894: { n:\"NameCmt\", f:parse_NameCmt, r:12 },\n0x0895: { n:\"SortData\" },\n0x0896: { n:\"Theme\", f:parse_Theme, r:12 },\n0x0897: { n:\"GUIDTypeLib\" },\n0x0898: { n:\"FnGrp12\" },\n0x0899: { n:\"NameFnGrp12\" },\n0x089a: { n:\"MTRSettings\", f:parse_MTRSettings, r:12 },\n0x089b: { n:\"CompressPictures\", f:parsenoop2 },\n0x089c: { n:\"HeaderFooter\" },\n0x089d: { n:\"CrtLayout12\" },\n0x089e: { n:\"CrtMlFrt\" },\n0x089f: { n:\"CrtMlFrtContinue\" },\n0x08a3: { n:\"ForceFullCalculation\", f:parse_ForceFullCalculation },\n0x08a4: { n:\"ShapePropsStream\" },\n0x08a5: { n:\"TextPropsStream\" },\n0x08a6: { n:\"RichTextStream\" },\n0x08a7: { n:\"CrtLayout12A\" },\n0x1001: { n:\"Units\" },\n0x1002: { n:\"Chart\" },\n0x1003: { n:\"Series\" },\n0x1006: { n:\"DataFormat\" },\n0x1007: { n:\"LineFormat\" },\n0x1009: { n:\"MarkerFormat\" },\n0x100a: { n:\"AreaFormat\" },\n0x100b: { n:\"PieFormat\" },\n0x100c: { n:\"AttachedLabel\" },\n0x100d: { n:\"SeriesText\" },\n0x1014: { n:\"ChartFormat\" },\n0x1015: { n:\"Legend\" },\n0x1016: { n:\"SeriesList\" },\n0x1017: { n:\"Bar\" },\n0x1018: { n:\"Line\" },\n0x1019: { n:\"Pie\" },\n0x101a: { n:\"Area\" },\n0x101b: { n:\"Scatter\" },\n0x101c: { n:\"CrtLine\" },\n0x101d: { n:\"Axis\" },\n0x101e: { n:\"Tick\" },\n0x101f: { n:\"ValueRange\" },\n0x1020: { n:\"CatSerRange\" },\n0x1021: { n:\"AxisLine\" },\n0x1022: { n:\"CrtLink\" },\n0x1024: { n:\"DefaultText\" },\n0x1025: { n:\"Text\" },\n0x1026: { n:\"FontX\", f:parseuint16 },\n0x1027: { n:\"ObjectLink\" },\n0x1032: { n:\"Frame\" },\n0x1033: { n:\"Begin\" },\n0x1034: { n:\"End\" },\n0x1035: { n:\"PlotArea\" },\n0x103a: { n:\"Chart3d\" },\n0x103c: { n:\"PicF\" },\n0x103d: { n:\"DropBar\" },\n0x103e: { n:\"Radar\" },\n0x103f: { n:\"Surf\" },\n0x1040: { n:\"RadarArea\" },\n0x1041: { n:\"AxisParent\" },\n0x1043: { n:\"LegendException\" },\n0x1044: { n:\"ShtProps\", f:parse_ShtProps },\n0x1045: { n:\"SerToCrt\" },\n0x1046: { n:\"AxesUsed\" },\n0x1048: { n:\"SBaseRef\" },\n0x104a: { n:\"SerParent\" },\n0x104b: { n:\"SerAuxTrend\" },\n0x104e: { n:\"IFmtRecord\" },\n0x104f: { n:\"Pos\" },\n0x1050: { n:\"AlRuns\" },\n0x1051: { n:\"BRAI\" },\n0x105b: { n:\"SerAuxErrBar\" },\n0x105c: { n:\"ClrtClient\", f:parse_ClrtClient },\n0x105d: { n:\"SerFmt\" },\n0x105f: { n:\"Chart3DBarShape\" },\n0x1060: { n:\"Fbi\" },\n0x1061: { n:\"BopPop\" },\n0x1062: { n:\"AxcExt\" },\n0x1063: { n:\"Dat\" },\n0x1064: { n:\"PlotGrowth\" },\n0x1065: { n:\"SIIndex\" },\n0x1066: { n:\"GelFrame\" },\n0x1067: { n:\"BopPopCustom\" },\n0x1068: { n:\"Fbi2\" },\n\n0x0000: { n:\"Dimensions\", f:parse_Dimensions },\n0x0002: { n:\"BIFF2INT\", f:parse_BIFF2INT },\n0x0005: { n:\"BoolErr\", f:parse_BoolErr },\n0x0007: { n:\"String\", f:parse_BIFF2STRING },\n0x0008: { n:\"BIFF2ROW\" },\n0x000b: { n:\"Index\" },\n0x0016: { n:\"ExternCount\", f:parseuint16 },\n0x001e: { n:\"BIFF2FORMAT\", f:parse_BIFF2Format },\n0x001f: { n:\"BIFF2FMTCNT\" }, /* 16-bit cnt of BIFF2FORMAT records */\n0x0020: { n:\"BIFF2COLINFO\" },\n0x0021: { n:\"Array\", f:parse_Array },\n0x0025: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0032: { n:\"BIFF2FONTXTRA\", f:parse_BIFF2FONTXTRA },\n0x0034: { n:\"DDEObjName\" },\n0x003e: { n:\"BIFF2WINDOW2\" },\n0x0043: { n:\"BIFF2XF\" },\n0x0045: { n:\"BIFF2FONTCLR\" },\n0x0056: { n:\"BIFF4FMTCNT\" }, /* 16-bit cnt, similar to BIFF2 */\n0x007e: { n:\"RK\" }, /* Not necessarily same as 0x027e */\n0x007f: { n:\"ImData\", f:parse_ImData },\n0x0087: { n:\"Addin\" },\n0x0088: { n:\"Edg\" },\n0x0089: { n:\"Pub\" },\n0x0091: { n:\"Sub\" },\n0x0094: { n:\"LHRecord\" },\n0x0095: { n:\"LHNGraph\" },\n0x0096: { n:\"Sound\" },\n0x00a9: { n:\"CoordList\" },\n0x00ab: { n:\"GCW\" },\n0x00bc: { n:\"ShrFmla\" }, /* Not necessarily same as 0x04bc */\n0x00bf: { n:\"ToolbarHdr\" },\n0x00c0: { n:\"ToolbarEnd\" },\n0x00c2: { n:\"AddMenu\" },\n0x00c3: { n:\"DelMenu\" },\n0x00d6: { n:\"RString\", f:parse_RString },\n0x00df: { n:\"UDDesc\" },\n0x00ea: { n:\"TabIdConf\" },\n0x0162: { n:\"XL5Modify\" },\n0x01a5: { n:\"FileSharing2\" },\n0x0209: { n:'BOF', f:parse_BOF },\n0x0218: { n:\"Lbl\", f:parse_Lbl },\n0x0223: { n:\"ExternName\", f:parse_ExternName },\n0x0231: { n:\"Font\" },\n0x0243: { n:\"BIFF3XF\" },\n0x0409: { n:'BOF', f:parse_BOF },\n0x0443: { n:\"BIFF4XF\" },\n0x086d: { n:\"FeatInfo\" },\n0x0873: { n:\"FeatInfo11\" },\n0x0881: { n:\"SXAddl12\" },\n0x08c0: { n:\"AutoWebPub\" },\n0x08c1: { n:\"ListObj\" },\n0x08c2: { n:\"ListField\" },\n0x08c3: { n:\"ListDV\" },\n0x08c4: { n:\"ListCondFmt\" },\n0x08c5: { n:\"ListCF\" },\n0x08c6: { n:\"FMQry\" },\n0x08c7: { n:\"FMSQry\" },\n0x08c8: { n:\"PLV\" },\n0x08c9: { n:\"LnExt\" },\n0x08ca: { n:\"MkrExt\" },\n0x08cb: { n:\"CrtCoopt\" },\n0x08d6: { n:\"FRTArchId$\", r:12 },\n\n0x7262: {}\n};\n\nvar XLSRE = evert_key(XLSRecordEnum, 'n');\nfunction write_biff_rec(ba, type, payload, length) {\n\tvar t = +type || +XLSRE[type];\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba, type, payload, length) {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = +type || +XLSRE[type];\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r, c) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r, c, val, t) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tif(t == 'e') { out.write_shift(1, val); out.write_shift(1, 1); }\n\telse { out.write_shift(1, val?1:0); out.write_shift(1, 0); }\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r, c, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba, cell, R, C) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba, ws, idx, opts) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb, opts) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, \"CalcMode\", writeuint16(1));\n\twrite_biff_rec(ba, \"CalcCount\", writeuint16(100));\n\twrite_biff_rec(ba, \"CalcRefMode\", writebool(true));\n\twrite_biff_rec(ba, \"CalcIter\", writebool(false));\n\twrite_biff_rec(ba, \"CalcDelta\", write_Xnum(0.001));\n\twrite_biff_rec(ba, \"CalcSaveRecalc\", writebool(true));\n\twrite_biff_rec(ba, \"PrintRowCol\", writebool(false));\n\twrite_biff_rec(ba, \"PrintGrid\", writebool(false));\n\twrite_biff_rec(ba, \"GridSet\", writeuint16(1));\n\twrite_biff_rec(ba, \"Guts\", write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, \"HCenter\", writebool(false));\n\twrite_biff_rec(ba, \"VCenter\", writebool(false));\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8 && _WB.Views) write_biff_rec(ba, \"Window2\", write_Window2(_WB.Views[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, \"MergeCells\", write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, \"EOF\");\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb, bufs, opts) {\n\tvar A = buf_array();\n\tvar _WB = ((wb||{}).Workbook||{});\n\tvar _sheets = (_WB.Sheets||[]);\n\tvar _wb = _WB.WBProps||{};\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, \"Addin\");\n\twrite_biff_rec(A, \"InterfaceHdr\", b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, \"Mms\", writezeroes(2));\n\tif(b5) write_biff_rec(A, \"ToolbarHdr\");\n\tif(b5) write_biff_rec(A, \"ToolbarEnd\");\n\twrite_biff_rec(A, \"InterfaceEnd\");\n\twrite_biff_rec(A, \"WriteAccess\", write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, \"CodePage\", writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, \"DSF\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Excel9File\");\n\twrite_biff_rec(A, \"RRTabId\", write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, \"ObProj\");\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, \"BuiltInFnGroupCount\", writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, \"WinProtect\", writebool(false));\n\twrite_biff_rec(A, \"Protect\", writebool(false));\n\twrite_biff_rec(A, \"Password\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Prot4Rev\", writebool(false));\n\tif(b8) write_biff_rec(A, \"Prot4RevPass\", writeuint16(0));\n\twrite_biff_rec(A, \"Window1\", write_Window1(opts));\n\twrite_biff_rec(A, \"Backup\", writebool(false));\n\twrite_biff_rec(A, \"HideObj\", writeuint16(0));\n\twrite_biff_rec(A, \"Date1904\", writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, \"CalcPrecision\", writebool(true));\n\tif(b8) write_biff_rec(A, \"RefreshAll\", writebool(false));\n\twrite_biff_rec(A, \"BookBool\", writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, \"UsesELFs\", writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, \"Country\", write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, \"SST\", write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, \"EOF\");\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet = _sheets[j] || ({});\n\t\twrite_biff_rec(B, \"BoundSheet8\", write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn __toBuffer([out]);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb, opts) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = []; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn __toBuffer([bufs]);\n}\n\nfunction write_biff_buf(wb, opts) {\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nvar HTML_ = (function() {\n\tfunction html_to_sheet(str, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tstr = str.replace(//g, \"\");\n\t\tvar mtch = str.match(/\");\n\t\tvar mtch2 = str.match(/<\\/table/i);\n\t\tvar i = mtch.index, j = mtch2 && mtch2.index || str.length;\n\t\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\t\tvar R = -1, C = 0, RS = 0, CS = 0;\n\t\tvar range = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\t\tvar merges = [];\n\t\tfor(i = 0; i < rows.length; ++i) {\n\t\t\tvar row = rows[i].trim();\n\t\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\t\tif(hd == \"/i);\n\t\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\t\tvar cell = cells[j].trim();\n\t\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\t\tvar _merge = merges[midx];\n\t\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t\t}\n\t\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\t\tvar _t = tag.t || \"\";\n\t\t\t\t/* TODO: generate stub cells */\n\t\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\t\tm = htmldecode(m);\n\t\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\t\tif(!m.length) continue;\n\t\t\t\tvar o = {t:'s', v:m};\n\t\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(m)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\t\tC += CS;\n\t\t\t}\n\t\t}\n\t\tws['!ref'] = encode_range(range);\n\t\tif(merges.length) ws[\"!merges\"] = merges;\n\t\treturn ws;\n\t}\n\tfunction html_to_book(str, opts) {\n\t\treturn sheet_to_workbook(html_to_sheet(str, opts), opts);\n\t}\n\tfunction make_html_row(ws, r, R, o) {\n\t\tvar M = (ws['!merges'] ||[]);\n\t\tvar oo = [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tvar RS = 0, CS = 0;\n\t\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t\t}\n\t\t\tif(RS < 0) continue;\n\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t/* TODO: html entities */\n\t\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\t\tvar sp = ({});\n\t\t\tif(RS > 1) sp.rowspan = RS;\n\t\t\tif(CS > 1) sp.colspan = CS;\n\t\t\tsp.t = cell && cell.t || 'z';\n\t\t\tif(o.editable) w = '' + w + '';\n\t\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\t\tif(sp.t != \"z\") { sp.v = cell.v; if(cell.z != null) sp.z = cell.z; }\n\t\t\too.push(writextag('td', w, sp));\n\t\t}\n\t\tvar preamble = \"\";\n\t\treturn preamble + oo.join(\"\") + \"\";\n\t}\n\tfunction make_html_preamble(ws, R, o) {\n\t\tvar out = [];\n\t\treturn out.join(\"\") + '';\n\t}\n\tvar _BEGIN = 'SheetJS Table Export';\n\tvar _END = '';\n\tfunction sheet_to_html(ws, opts/*, wb:?Workbook*/) {\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : _BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : _END;\n\t\tvar out = [header];\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tout.push(make_html_preamble(ws, r, o));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\t\tout.push(\"
\" + footer);\n\t\treturn out.join(\"\");\n\n\t}\n\treturn {\n\t\tto_workbook: html_to_book,\n\t\tto_sheet: html_to_sheet,\n\t\t_row: make_html_row,\n\t\tBEGIN: _BEGIN,\n\t\tEND: _END,\n\t\t_preamble: make_html_preamble,\n\t\tfrom_sheet: sheet_to_html\n\t};\n})();\n\nfunction sheet_add_dom(ws, table, _opts) {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\tvar rows = table.getElementsByTagName('tr');\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges = [], midx = 0;\n\tvar rowinfo = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts = (row.children);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v = elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z = elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o = {t:'s', v:v};\n\t\t\tvar _t = elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\tif(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table, _opts) {\n\tvar opts = _opts || {};\n\tvar ws = opts.dense ? ([]) : ({});\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table, opts) {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element) {\n\tvar display = '';\n\tvar get_computed_style = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element) {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nvar parse_content_xml = (function() {\n\n\tvar parse_text_p = function(text) {\n\t\t/* 6.1.2 White Space Characters */\n\t\tvar fixed = text\n\t\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t\t.replace(//g,\" \")\n\t\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t\t.replace(//g,\"\\n\");\n\t\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\t\treturn [v];\n\t};\n\n\tvar number_formats = {\n\t\t/* ods name: [short ssf fmt, long ssf fmt] */\n\t\tday: [\"d\", \"dd\"],\n\t\tmonth: [\"m\", \"mm\"],\n\t\tyear: [\"y\", \"yy\"],\n\t\thours: [\"h\", \"hh\"],\n\t\tminutes: [\"m\", \"mm\"],\n\t\tseconds: [\"s\", \"ss\"],\n\t\t\"am-pm\": [\"A/P\", \"AM/PM\"],\n\t\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\t\tera: [\"e\", \"ee\"],\n\t\t/* there is no native representation of LO \"Q\" format */\n\t\tquarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n\t};\n\n\treturn function pcx(d, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state = [], tmp;\n\t\tvar tag;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag;\n\t\tvar rowtag;\n\t\tvar Sheets = {}, SheetNames = [];\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tvar Rn, q;\n\t\tvar ctag = ({value:\"\"});\n\t\tvar textp = \"\", textpidx = 0, textptag;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({});\n\t\tvar _Ref = [\"\", \"\"];\n\t\tvar comments = [], comment = ({});\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]) : ({}); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null});\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({});\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null});\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({});\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) comment.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\t\t\tcase 'master-styles': break; // TODO: \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': // 16.2 \n\t\t\t\tbreak;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 \n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text-style': break; // 16.27.25 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]});\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': break; // 9.4.2 TODO: date1904\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = atag.href; delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ';\n\treturn function wso() {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\nvar write_content_ods = (function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text) {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar covered_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb, i) {\n\t\t/* Section 9 Tables */\n\t\tvar o = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']);\n\t\tvar marr = ws['!merges'] || [], mi = 0;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(R = 0; R < range.s.r; ++R) o.push(' \\n');\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target; _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt});\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o) {\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table */\n\t\to.push(' \\n'); // style:master-page-name=\"mp1\">\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table cells, text */\n\t\to.push(' \\n');\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") o.push('\\n');\n\t\telse o.push('\\n');\n\t\twrite_automatic_styles_ods(o);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb, opts) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\nvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest = [];\n\tvar rdf = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, write_meta_ods());\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\nfunction write_sheet_index(wb, sheet) {\n\tif(!sheet) return 0;\n\tvar idx = wb.SheetNames.indexOf(sheet);\n\tif(idx == -1) throw new Error(\"Sheet not found: \" + sheet);\n\treturn idx;\n}\n\nfunction write_obj_str(factory) {\n\treturn function write_str(wb, o) {\n\t\tvar idx = write_sheet_index(wb, o.sheet);\n\t\treturn factory.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb);\n\t};\n}\n\nvar write_htm_str = write_obj_str(HTML_);\nvar write_csv_str = write_obj_str({from_sheet:sheet_to_csv});\nvar write_slk_str = write_obj_str(typeof SYLK !== \"undefined\" ? SYLK : {});\nvar write_dif_str = write_obj_str(typeof DIF !== \"undefined\" ? DIF : {});\nvar write_prn_str = write_obj_str(typeof PRN !== \"undefined\" ? PRN : {});\nvar write_rtf_str = write_obj_str(typeof RTF !== \"undefined\" ? RTF : {});\nvar write_txt_str = write_obj_str({from_sheet:sheet_to_txt});\nvar write_dbf_buf = write_obj_str(typeof DBF !== \"undefined\" ? DBF : {});\nvar write_eth_str = write_obj_str(typeof ETH !== \"undefined\" ? ETH : {});\n\nfunction fix_opts_func(defaults) {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nvar fix_read_opts = function(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n};\n\nvar fix_write_opts = fix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n]);\nfunction get_sheet_type(n) {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments */\n\t\tvar comments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tvar dfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tcomments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments);\n\t\t\t}\n\t\t});\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x) { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip, opts) {\n\tmake_ssf(SSF);\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) throw new Error('Unsupported NUMBERS file');\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({});\n\tvar styles = ({});\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\",dir.themes[0], opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({});\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({});\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile);\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: SSF.get_table()\n\t});\n\tif(opts && opts.bookFiles) {\n\t\tout.keys = entries;\n\t\tout.files = zip.files;\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts) {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\nif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\nif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb, opts) {\n\t_shapeid = 1024;\n\tif(opts.bookType == \"ods\") return write_ods(wb, opts);\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\nvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\nf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar cf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb(wb, f, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty(wb, f, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\nfunction firstbyte(f,o) {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64.decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb, opts) {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data, opts) {\nvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data, o) {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data, o) {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64.decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data, o) {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64.decode(d);\n\td = cptable.utils.decode(1200, d.slice(2), 'str');\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data) {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data, opts) {\n\treset_cp();\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), opts);\n\tvar d = data, n = [0,0,0,0], str = false;\n\tvar o = opts||{};\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x04) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49: if(n[1] === 0x44) return read_wb_ID(d, o); break;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF: if(n[1] === 0xFE) { return read_utf16(d, o); } break;\n\t\tcase 0x00: if(n[1] === 0x00 && n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o); break;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t}\n\tif(DBF.versions.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb, o) {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\nfunction write_zip_type(wb, opts) {\n\tvar o = opts||{};\n\tvar z = write_zip(wb, o);\n\tvar oopts = {};\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = has_buf ? \"nodebuffer\" : \"string\";\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = has_buf ? \"nodebuffer\" : \"string\"; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: {\"nodebuffer\": \"buffer\", \"string\": \"binary\"}[oopts.type] || oopts.type}) : z.generate(oopts);\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(out) : out;\n}\n\nfunction write_cfb_type(wb, opts) {\n\tvar o = opts||{};\n\tvar cfb = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out, opts, bom) {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64.encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSync(wb, opts) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = opts||{};\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out = (writeSync(wb, o)); o.type = \"array\"; return s2ab(out); }\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(write_slk_str(wb, o), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(write_htm_str(wb, o), o);\n\t\tcase 'txt': return write_stxt_type(write_txt_str(wb, o), o);\n\t\tcase 'csv': return write_string_type(write_csv_str(wb, o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(write_dif_str(wb, o), o);\n\t\tcase 'dbf': return write_binary_type(write_dbf_buf(wb, o), o);\n\t\tcase 'prn': return write_string_type(write_prn_str(wb, o), o);\n\t\tcase 'rtf': return write_string_type(write_rtf_str(wb, o), o);\n\t\tcase 'eth': return write_string_type(write_eth_str(wb, o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb, filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileAsync(filename, wb, opts, cb) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\nfunction make_json_row(sheet, r, R, cols, header, hdr, dense, o) {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true;\n\tvar row = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = void 0; break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw || (o.rawNumbers && val.t == \"n\") ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet, opts) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols = [];\n\tvar out = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0, CC = 0;\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = 0;\n\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {\n\tvar isempty = true;\n\tvar row = [], txt = \"\", rr = encode_row(R);\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet, opts) {\n\tvar out = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tout.push(row + RS);\n\t}\n\tdelete o.dense;\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet, opts) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet) {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols = [], C;\n\tvar cmds = [];\n\tvar dense = Array.isArray(sheet);\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws, js, opts) {\n\tvar o = opts || {};\n\tvar offset = +!o.skipHeader;\n\tvar ws = _ws || ({});\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar cell;\n\tvar range = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}});\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr = o.header || [], C = 0;\n\n\tjs.forEach(function (JS, R) {\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = encode_cell({c:_C + C,r:_R + R + offset});\n\t\t\tcell = utils.sheet_get_cell(ws, ref);\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (o.dateNF || SSF._table[14]);\n\t\t\t\t}\n\t\t\t\tif(!cell) ws[ref] = cell = ({t:t, v:v});\n\t\t\t\telse {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js, opts) { return sheet_add_json(null, js, opts); }\n\nvar utils = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tget_formulae: sheet_to_formulae,\n\tmake_csv: sheet_to_csv,\n\tmake_json: sheet_to_json,\n\tmake_formulae: sheet_to_formulae,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: HTML_.from_sheet,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json\n};\n\n(function(utils) {\nutils.consts = utils.consts || {};\nfunction add_consts(R/*Array*/) { R.forEach(function(a){ utils.consts[a[0]] = a[1]; }); }\n\nfunction get_default(x, y, z) { return x[y] != null ? x[y] : (x[y] = z); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws, R, C) {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\t/* dense */\n\t\tif(Array.isArray(ws)) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[RC.r]) ws[RC.r] = [];\n\t\t\treturn ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_cell({r:R,c:C||0}));\n}\nutils.sheet_get_cell = ws_get_cell_stub;\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb, sh) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nutils.book_new = function() {\n\treturn { SheetNames: [], Sheets: {} };\n};\n\n/* add a worksheet to the end of a given workbook */\nutils.book_append_sheet = function(wb, ws, name) {\n\tif(!name) for(var i = 1; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n};\n\n/* set sheet visibility (visible/hidden/very hidden) */\nutils.book_set_sheet_visibility = function(wb, sh, vis) {\n\tget_default(wb,\"Workbook\",{});\n\tget_default(wb.Workbook,\"Sheets\",[]);\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tget_default(wb.Workbook.Sheets,idx, {});\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n};\nadd_consts([\n\t[\"SHEET_VISIBLE\", 0],\n\t[\"SHEET_HIDDEN\", 1],\n\t[\"SHEET_VERY_HIDDEN\", 2]\n]);\n\n/* set number format */\nutils.cell_set_number_format = function(cell, fmt) {\n\tcell.z = fmt;\n\treturn cell;\n};\n\n/* set cell hyperlink */\nutils.cell_set_hyperlink = function(cell, target, tooltip) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target });\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n};\nutils.cell_set_internal_link = function(cell, range, tooltip) { return utils.cell_set_hyperlink(cell, \"#\" + range, tooltip); };\n\n/* add to cell comments */\nutils.cell_add_comment = function(cell, text, author) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n};\n\n/* set array formula and flush related cells */\nutils.sheet_set_array_formula = function(ws, range, formula) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) cell.f = formula;\n\t}\n\treturn ws;\n};\n\nreturn utils;\n})(utils);\n\nif(has_buf && typeof require != 'undefined') (function() {\n\tvar Readable = require('stream').Readable;\n\n\tvar write_csv_stream = function(sheet, opts) {\n\t\tvar stream = Readable();\n\t\tvar o = opts == null ? {} : opts;\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\t\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\t\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\t\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\t\tvar row = \"\", cols = [];\n\t\to.dense = Array.isArray(sheet);\n\t\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\t\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\t\tvar R = r.s.r;\n\t\tvar BOM = false;\n\t\tstream._read = function() {\n\t\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t++R;\n\t\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\t\tif(row != null) {\n\t\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\t\tstream.push(row + RS);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_html_stream = function(ws, opts) {\n\t\tvar stream = Readable();\n\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : HTML_.BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : HTML_.END;\n\t\tstream.push(header);\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tstream.push(HTML_._preamble(ws, r, o));\n\t\tvar R = r.s.r;\n\t\tvar end = false;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) {\n\t\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\t\treturn stream.push(null);\n\t\t\t}\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\tstream.push(HTML_._row(ws, r, R, o));\n\t\t\t\t++R;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_json_stream = function(sheet, opts) {\n\t\tvar stream = Readable({objectMode:true});\n\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\t\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tvar o = opts || {};\n\t\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\t\tif(o.header === 1) header = 1;\n\t\telse if(o.header === \"A\") header = 2;\n\t\telse if(Array.isArray(o.header)) header = 3;\n\t\tswitch(typeof range) {\n\t\t\tcase 'string': r = safe_decode_range(range); break;\n\t\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\t\tdefault: r = range;\n\t\t}\n\t\tif(header > 0) offset = 0;\n\t\tvar rr = encode_row(r.s.r);\n\t\tvar cols = [];\n\t\tvar counter = 0;\n\t\tvar dense = Array.isArray(sheet);\n\t\tvar R = r.s.r, C = 0, CC = 0;\n\t\tif(dense && !sheet[R]) sheet[R] = [];\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tcols[C] = encode_col(C);\n\t\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\t\tswitch(header) {\n\t\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\t\tdefault:\n\t\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\t\thdr[C] = vv;\n\t\t\t}\n\t\t}\n\t\tR = r.s.r + offset;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t//if ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\t\t\t++R;\n\t\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\t\tstream.push(row.row);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tXLSX.stream = {\n\t\tto_json: write_json_stream,\n\t\tto_html: write_html_stream,\n\t\tto_csv: write_csv_stream\n\t};\n})();\n\nif(typeof parse_xlscfb !== \"undefined\") XLSX.parse_xlscfb = parse_xlscfb;\nXLSX.parse_zip = parse_zip;\nXLSX.read = readSync; //xlsread\nXLSX.readFile = readFileSync; //readFile\nXLSX.readFileSync = readFileSync;\nXLSX.write = writeSync;\nXLSX.writeFile = writeFileSync;\nXLSX.writeFileSync = writeFileSync;\nXLSX.writeFileAsync = writeFileAsync;\nXLSX.utils = utils;\nXLSX.SSF = SSF;\nif(typeof CFB !== \"undefined\") XLSX.CFB = CFB;\n}\n/*global define */\nif(typeof exports !== 'undefined') make_xlsx_lib(exports);\nelse if(typeof module !== 'undefined' && module.exports) make_xlsx_lib(module.exports);\nelse if(typeof define === 'function' && define.amd) define(function() { if(!XLSX.version) make_xlsx_lib(XLSX); return XLSX; });\nelse make_xlsx_lib(XLSX);\n/*exported XLS, ODS */\nvar XLS = XLSX, ODS = XLSX;\n","import toInteger from '../toInteger/index.js';\nimport getUTCWeekYear from '../getUTCWeekYear/index.js';\nimport startOfUTCWeek from '../startOfUTCWeek/index.js';\nimport requiredArgs from '../requiredArgs/index.js'; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import toDate from '../../toDate/index.js';\nimport startOfUTCWeek from '../startOfUTCWeek/index.js';\nimport startOfUTCWeekYear from '../startOfUTCWeekYear/index.js';\nimport requiredArgs from '../requiredArgs/index.js';\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font and svg icon.\n getDefaultData (): VNodeData {\n const data: VNodeData = {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n\n return data\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n wrapperData.class['v-icon--svg'] = true\n this.applyColors(wrapperData)\n\n const svgData: VNodeData = {\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n height: fontSize || '24',\n width: fontSize || '24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n return h(this.hasClickListener ? 'button' : 'span', wrapperData, [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data = this.getDefaultData()\n data.class['v-icon--is-component'] = true\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(component, data)\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\n","/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { empty as emptyObserver } from './Observer';\nimport { Subscription } from './Subscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nvar Subscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subscriber, _super);\n function Subscriber(destinationOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this.syncErrorValue = null;\n _this.syncErrorThrown = false;\n _this.syncErrorThrowable = false;\n _this.isStopped = false;\n switch (arguments.length) {\n case 0:\n _this.destination = emptyObserver;\n break;\n case 1:\n if (!destinationOrNext) {\n _this.destination = emptyObserver;\n break;\n }\n if (typeof destinationOrNext === 'object') {\n if (destinationOrNext instanceof Subscriber) {\n _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;\n _this.destination = destinationOrNext;\n destinationOrNext.add(_this);\n }\n else {\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext);\n }\n break;\n }\n default:\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);\n break;\n }\n return _this;\n }\n Subscriber.prototype[rxSubscriberSymbol] = function () { return this; };\n Subscriber.create = function (next, error, complete) {\n var subscriber = new Subscriber(next, error, complete);\n subscriber.syncErrorThrowable = false;\n return subscriber;\n };\n Subscriber.prototype.next = function (value) {\n if (!this.isStopped) {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (!this.isStopped) {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n this.destination.error(err);\n this.unsubscribe();\n };\n Subscriber.prototype._complete = function () {\n this.destination.complete();\n this.unsubscribe();\n };\n Subscriber.prototype._unsubscribeAndRecycle = function () {\n var _parentOrParents = this._parentOrParents;\n this._parentOrParents = null;\n this.unsubscribe();\n this.closed = false;\n this.isStopped = false;\n this._parentOrParents = _parentOrParents;\n return this;\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar SafeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SafeSubscriber, _super);\n function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this._parentSubscriber = _parentSubscriber;\n var next;\n var context = _this;\n if (isFunction(observerOrNext)) {\n next = observerOrNext;\n }\n else if (observerOrNext) {\n next = observerOrNext.next;\n error = observerOrNext.error;\n complete = observerOrNext.complete;\n if (observerOrNext !== emptyObserver) {\n context = Object.create(observerOrNext);\n if (isFunction(context.unsubscribe)) {\n _this.add(context.unsubscribe.bind(context));\n }\n context.unsubscribe = _this.unsubscribe.bind(_this);\n }\n }\n _this._context = context;\n _this._next = next;\n _this._error = error;\n _this._complete = complete;\n return _this;\n }\n SafeSubscriber.prototype.next = function (value) {\n if (!this.isStopped && this._next) {\n var _parentSubscriber = this._parentSubscriber;\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._next, value);\n }\n else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n var useDeprecatedSynchronousErrorHandling = config.useDeprecatedSynchronousErrorHandling;\n if (this._error) {\n if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._error, err);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, this._error, err);\n this.unsubscribe();\n }\n }\n else if (!_parentSubscriber.syncErrorThrowable) {\n this.unsubscribe();\n if (useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n hostReportError(err);\n }\n else {\n if (useDeprecatedSynchronousErrorHandling) {\n _parentSubscriber.syncErrorValue = err;\n _parentSubscriber.syncErrorThrown = true;\n }\n else {\n hostReportError(err);\n }\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.complete = function () {\n var _this = this;\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n if (this._complete) {\n var wrappedComplete = function () { return _this._complete.call(_this._context); };\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(wrappedComplete);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n this.unsubscribe();\n }\n }\n else {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n this.unsubscribe();\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n }\n };\n SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n if (!config.useDeprecatedSynchronousErrorHandling) {\n throw new Error('bad call');\n }\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n parent.syncErrorValue = err;\n parent.syncErrorThrown = true;\n return true;\n }\n else {\n hostReportError(err);\n return true;\n }\n }\n return false;\n };\n SafeSubscriber.prototype._unsubscribe = function () {\n var _parentSubscriber = this._parentSubscriber;\n this._context = null;\n this._parentSubscriber = null;\n _parentSubscriber.unsubscribe();\n };\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\n//# sourceMappingURL=Subscriber.js.map\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","/** PURE_IMPORTS_START _map PURE_IMPORTS_END */\nimport { map } from './map';\nexport function pluck() {\n var properties = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n properties[_i] = arguments[_i];\n }\n var length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return function (source) { return map(plucker(properties, length))(source); };\n}\nfunction plucker(props, length) {\n var mapper = function (x) {\n var currentProp = x;\n for (var i = 0; i < length; i++) {\n var p = currentProp != null ? currentProp[props[i]] : undefined;\n if (p !== void 0) {\n currentProp = p;\n }\n else {\n return undefined;\n }\n }\n return currentProp;\n };\n return mapper;\n}\n//# sourceMappingURL=pluck.js.map\n","/*\n\nJSZip - A Javascript class for generating and reading zip files\n\n\n(c) 2009-2014 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n\nNote: since JSZip 3 removed critical functionality, this version assigns to the\n`JSZipSync` variable. Another JSZip version can be loaded in parallel.\n*/\n(function(e){\n\tif(\"object\"==typeof exports&&\"undefined\"!=typeof module&&\"undefined\"==typeof DO_NOT_EXPORT_JSZIP)module.exports=e();\n\telse if(\"function\"==typeof define&&define.amd&&\"undefined\"==typeof DO_NOT_EXPORT_JSZIP){JSZipSync=e();define([],e);}\n\telse{\n\t\tvar f;\n\t\t\"undefined\"!=typeof globalThis?f=globalThis:\n\t\t\"undefined\"!=typeof window?f=window:\n\t\t\"undefined\"!=typeof global?f=global:\n\t\t\"undefined\"!=typeof $ && $.global?f=$.global:\n\t\t\"undefined\"!=typeof self&&(f=self),f.JSZipSync=e()\n\t}\n}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n }\n else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);\n\n }\n\n return output;\n};\n\n// public method for decoding\nexports.decode = function(input, utf8) {\n var output = \"\";\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n while (i < input.length) {\n\n enc1 = _keyStr.indexOf(input.charAt(i++));\n enc2 = _keyStr.indexOf(input.charAt(i++));\n enc3 = _keyStr.indexOf(input.charAt(i++));\n enc4 = _keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output = output + String.fromCharCode(chr1);\n\n if (enc3 != 64) {\n output = output + String.fromCharCode(chr2);\n }\n if (enc4 != 64) {\n output = output + String.fromCharCode(chr3);\n }\n\n }\n\n return output;\n\n};\n\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nfunction CompressedObject() {\n this.compressedSize = 0;\n this.uncompressedSize = 0;\n this.crc32 = 0;\n this.compressionMethod = null;\n this.compressedContent = null;\n}\n\nCompressedObject.prototype = {\n /**\n * Return the decompressed content in an unspecified format.\n * The format will depend on the decompressor.\n * @return {Object} the decompressed content.\n */\n getContent: function() {\n return null; // see implementation\n },\n /**\n * Return the compressed content in an unspecified format.\n * The format will depend on the compressed conten source.\n * @return {Object} the compressed content.\n */\n getCompressedContent: function() {\n return null; // see implementation\n }\n};\nmodule.exports = CompressedObject;\n\n},{}],3:[function(_dereq_,module,exports){\n'use strict';\nexports.STORE = {\n magic: \"\\x00\\x00\",\n compress: function(content) {\n return content; // no compression\n },\n uncompress: function(content) {\n return content; // no compression\n },\n compressInputType: null,\n uncompressInputType: null\n};\nexports.DEFLATE = _dereq_('./flate');\n\n},{\"./flate\":8}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\n\nvar table = [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D\n];\n\n/**\n *\n * Javascript crc32\n * http://www.webtoolkit.info/\n *\n */\nmodule.exports = function crc32(input, crc) {\n if (typeof input === \"undefined\" || !input.length) {\n return 0;\n }\n\n var isArray = utils.getTypeOf(input) !== \"string\";\n\n if (typeof(crc) == \"undefined\") {\n crc = 0;\n }\n var x = 0;\n var y = 0;\n var b = 0;\n\n crc = crc ^ (-1);\n for (var i = 0, iTop = input.length; i < iTop; i++) {\n b = isArray ? input[i] : input.charCodeAt(i);\n y = (crc ^ b) & 0xFF;\n x = table[y];\n crc = (crc >>> 8) ^ x;\n }\n\n return crc ^ (-1);\n};\n// vim: set shiftwidth=4 softtabstop=4:\n\n},{\"./utils\":21}],5:[function(_dereq_,module,exports){\n'use strict';\nvar utils = _dereq_('./utils');\n\nfunction DataReader(data) {\n this.data = null; // type : see implementation\n this.length = 0;\n this.index = 0;\n}\nDataReader.prototype = {\n /**\n * Check that the offset will not go too far.\n * @param {string} offset the additional offset to check.\n * @throws {Error} an Error if the offset is out of bounds.\n */\n checkOffset: function(offset) {\n this.checkIndex(this.index + offset);\n },\n /**\n * Check that the specifed index will not be too far.\n * @param {string} newIndex the index to check.\n * @throws {Error} an Error if the index is out of bounds.\n */\n checkIndex: function(newIndex) {\n if (this.length < newIndex || newIndex < 0) {\n throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n }\n },\n /**\n * Change the index.\n * @param {number} newIndex The new index.\n * @throws {Error} if the new index is out of the data.\n */\n setIndex: function(newIndex) {\n this.checkIndex(newIndex);\n this.index = newIndex;\n },\n /**\n * Skip the next n bytes.\n * @param {number} n the number of bytes to skip.\n * @throws {Error} if the new index is out of the data.\n */\n skip: function(n) {\n this.setIndex(this.index + n);\n },\n /**\n * Get the byte at the specified index.\n * @param {number} i the index to use.\n * @return {number} a byte.\n */\n byteAt: function(i) {\n // see implementations\n },\n /**\n * Get the next number with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {number} the corresponding number.\n */\n readInt: function(size) {\n var result = 0,\n i;\n this.checkOffset(size);\n for (i = this.index + size - 1; i >= this.index; i--) {\n result = (result << 8) + this.byteAt(i);\n }\n this.index += size;\n return result;\n },\n /**\n * Get the next string with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {string} the corresponding string.\n */\n readString: function(size) {\n return utils.transformTo(\"string\", this.readData(size));\n },\n /**\n * Get raw data without conversion, bytes.\n * @param {number} size the number of bytes to read.\n * @return {Object} the raw data, implementation specific.\n */\n readData: function(size) {\n // see implementations\n },\n /**\n * Find the last occurence of a zip signature (4 bytes).\n * @param {string} sig the signature to find.\n * @return {number} the index of the last occurence, -1 if not found.\n */\n lastIndexOfSignature: function(sig) {\n // see implementations\n },\n /**\n * Get the next date.\n * @return {Date} the date.\n */\n readDate: function() {\n var dostime = this.readInt(4);\n return new Date(\n ((dostime >> 25) & 0x7f) + 1980, // year\n ((dostime >> 21) & 0x0f) - 1, // month\n (dostime >> 16) & 0x1f, // day\n (dostime >> 11) & 0x1f, // hour\n (dostime >> 5) & 0x3f, // minute\n (dostime & 0x1f) << 1); // second\n }\n};\nmodule.exports = DataReader;\n\n},{\"./utils\":21}],6:[function(_dereq_,module,exports){\n'use strict';\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = false;\nexports.date = null;\nexports.compression = null;\nexports.comment = null;\n\n},{}],7:[function(_dereq_,module,exports){\n'use strict';\nvar utils = _dereq_('./utils');\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.string2binary = function(str) {\n return utils.string2binary(str);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.string2Uint8Array = function(str) {\n return utils.transformTo(\"uint8array\", str);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.uint8Array2String = function(array) {\n return utils.transformTo(\"string\", array);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.string2Blob = function(str) {\n var buffer = utils.transformTo(\"arraybuffer\", str);\n return utils.arrayBuffer2Blob(buffer);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.arrayBuffer2Blob = function(buffer) {\n return utils.arrayBuffer2Blob(buffer);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.transformTo = function(outputType, input) {\n return utils.transformTo(outputType, input);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.getTypeOf = function(input) {\n return utils.getTypeOf(input);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.checkSupport = function(type) {\n return utils.checkSupport(type);\n};\n\n/**\n * @deprecated\n * This value will be removed in a future version without replacement.\n */\nexports.MAX_VALUE_16BITS = utils.MAX_VALUE_16BITS;\n\n/**\n * @deprecated\n * This value will be removed in a future version without replacement.\n */\nexports.MAX_VALUE_32BITS = utils.MAX_VALUE_32BITS;\n\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.pretty = function(str) {\n return utils.pretty(str);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.findCompression = function(compressionMethod) {\n return utils.findCompression(compressionMethod);\n};\n\n/**\n * @deprecated\n * This function will be removed in a future version without replacement.\n */\nexports.isRegExp = function (object) {\n return utils.isRegExp(object);\n};\n\n\n},{\"./utils\":21}],8:[function(_dereq_,module,exports){\n'use strict';\nvar USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');\n\nvar pako = _dereq_(\"pako\");\nexports.uncompressInputType = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\nexports.compressInputType = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\nexports.compress = function(input) {\n return pako.deflateRaw(input);\n};\nexports.uncompress = function(input) {\n return pako.inflateRaw(input);\n};\n\n},{\"pako\":24}],9:[function(_dereq_,module,exports){\n'use strict';\n\nvar base64 = _dereq_('./base64');\n\n/**\nUsage:\n zip = new JSZip();\n zip.file(\"hello.txt\", \"Hello, World!\").file(\"tempfile\", \"nothing\");\n zip.folder(\"images\").file(\"smile.gif\", base64Data, {base64: true});\n zip.file(\"Xmas.txt\", \"Ho ho ho !\", {date : new Date(\"December 25, 2007 00:00:01\")});\n zip.remove(\"tempfile\");\n\n base64zip = zip.generate();\n\n**/\n\n/**\n * Representation a of zip file in js\n * @constructor\n * @param {String=|ArrayBuffer=|Uint8Array=} data the data to load, if any (optional).\n * @param {Object=} options the options for creating this objects (optional).\n */\nfunction JSZipSync(data, options) {\n // if this constructor is used without `new`, it adds `new` before itself:\n if(!(this instanceof JSZipSync)) return new JSZipSync(data, options);\n\n // object containing the files :\n // {\n // \"folder/\" : {...},\n // \"folder/data.txt\" : {...}\n // }\n this.files = {};\n\n this.comment = null;\n\n // Where we are in the hierarchy\n this.root = \"\";\n if (data) {\n this.load(data, options);\n }\n this.clone = function() {\n var newObj = new JSZipSync();\n for (var i in this) {\n if (typeof this[i] !== \"function\") {\n newObj[i] = this[i];\n }\n }\n return newObj;\n };\n}\nJSZipSync.prototype = _dereq_('./object');\nJSZipSync.prototype.load = _dereq_('./load');\nJSZipSync.support = _dereq_('./support');\nJSZipSync.defaults = _dereq_('./defaults');\n\n/**\n * @deprecated\n * This namespace will be removed in a future version without replacement.\n */\nJSZipSync.utils = _dereq_('./deprecatedPublicUtils');\n\nJSZipSync.base64 = {\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n encode : function(input) {\n return base64.encode(input);\n },\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n decode : function(input) {\n return base64.decode(input);\n }\n};\nJSZipSync.compressions = _dereq_('./compressions');\nmodule.exports = JSZipSync;\n\n},{\"./base64\":1,\"./compressions\":3,\"./defaults\":6,\"./deprecatedPublicUtils\":7,\"./load\":10,\"./object\":13,\"./support\":17}],10:[function(_dereq_,module,exports){\n'use strict';\nvar base64 = _dereq_('./base64');\nvar ZipEntries = _dereq_('./zipEntries');\nmodule.exports = function(data, options) {\n var files, zipEntries, i, input;\n options = options || {};\n if (options.base64) {\n data = base64.decode(data);\n }\n\n zipEntries = new ZipEntries(data, options);\n files = zipEntries.files;\n for (i = 0; i < files.length; i++) {\n input = files[i];\n this.file(input.fileName, input.decompressed, {\n binary: true,\n optimizedBinaryString: true,\n date: input.date,\n dir: input.dir,\n comment : input.fileComment.length ? input.fileComment : null,\n createFolders: options.createFolders\n });\n }\n if (zipEntries.zipComment.length) {\n this.comment = zipEntries.zipComment;\n }\n\n return this;\n};\n\n},{\"./base64\":1,\"./zipEntries\":22}],11:[function(_dereq_,module,exports){\n(function (Buffer){\n'use strict';\nvar Buffer_from = /*::(*/function(){}/*:: :any)*/;\nif(typeof Buffer !== 'undefined') {\n\tvar nbfs = !Buffer.from;\n\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\tBuffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t// $FlowIgnore\n\tif(!Buffer.alloc) Buffer.alloc = function(n) { return new Buffer(n); };\n}\nmodule.exports = function(data, encoding){\n return typeof data == 'number' ? Buffer.alloc(data) : Buffer_from(data, encoding);\n};\nmodule.exports.test = function(b){\n return Buffer.isBuffer(b);\n};\n}).call(this,(typeof Buffer !== \"undefined\" ? Buffer : undefined))\n},{}],12:[function(_dereq_,module,exports){\n'use strict';\nvar Uint8ArrayReader = _dereq_('./uint8ArrayReader');\n\nfunction NodeBufferReader(data) {\n this.data = data;\n this.length = this.data.length;\n this.index = 0;\n}\nNodeBufferReader.prototype = new Uint8ArrayReader();\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n this.checkOffset(size);\n var result = this.data.slice(this.index, this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = NodeBufferReader;\n\n},{\"./uint8ArrayReader\":18}],13:[function(_dereq_,module,exports){\n'use strict';\nvar support = _dereq_('./support');\nvar utils = _dereq_('./utils');\nvar crc32 = _dereq_('./crc32');\nvar signature = _dereq_('./signature');\nvar defaults = _dereq_('./defaults');\nvar base64 = _dereq_('./base64');\nvar compressions = _dereq_('./compressions');\nvar CompressedObject = _dereq_('./compressedObject');\nvar nodeBuffer = _dereq_('./nodeBuffer');\nvar utf8 = _dereq_('./utf8');\nvar StringWriter = _dereq_('./stringWriter');\nvar Uint8ArrayWriter = _dereq_('./uint8ArrayWriter');\n\n/**\n * Returns the raw data of a ZipObject, decompress the content if necessary.\n * @param {ZipObject} file the file to use.\n * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n */\nvar getRawData = function(file) {\n if (file._data instanceof CompressedObject) {\n file._data = file._data.getContent();\n file.options.binary = true;\n file.options.base64 = false;\n\n if (utils.getTypeOf(file._data) === \"uint8array\") {\n var copy = file._data;\n // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.\n // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).\n file._data = new Uint8Array(copy.length);\n // with an empty Uint8Array, Opera fails with a \"Offset larger than array size\"\n if (copy.length !== 0) {\n file._data.set(copy, 0);\n }\n }\n }\n return file._data;\n};\n\n/**\n * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it.\n * @param {ZipObject} file the file to use.\n * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n */\nvar getBinaryData = function(file) {\n var result = getRawData(file),\n type = utils.getTypeOf(result);\n if (type === \"string\") {\n if (!file.options.binary) {\n // unicode text !\n // unicode string => binary string is a painful process, check if we can avoid it.\n if (support.nodebuffer) {\n return nodeBuffer(result, \"utf-8\");\n }\n }\n return file.asBinary();\n }\n return result;\n};\n\n/**\n * Transform this._data into a string.\n * @param {function} filter a function String -> String, applied if not null on the result.\n * @return {String} the string representing this._data.\n */\nvar dataToString = function(asUTF8) {\n var result = getRawData(this);\n if (result === null || typeof result === \"undefined\") {\n return \"\";\n }\n // if the data is a base64 string, we decode it before checking the encoding !\n if (this.options.base64) {\n result = base64.decode(result);\n }\n if (asUTF8 && this.options.binary) {\n // JSZip.prototype.utf8decode supports arrays as input\n // skip to array => string step, utf8decode will do it.\n result = out.utf8decode(result);\n }\n else {\n // no utf8 transformation, do the array => string step.\n result = utils.transformTo(\"string\", result);\n }\n\n if (!asUTF8 && !this.options.binary) {\n result = utils.transformTo(\"string\", out.utf8encode(result));\n }\n return result;\n};\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n this.name = name;\n this.dir = options.dir;\n this.date = options.date;\n this.comment = options.comment;\n\n this._data = data;\n this.options = options;\n\n /*\n * This object contains initial values for dir and date.\n * With them, we can check if the user changed the deprecated metadata in\n * `ZipObject#options` or not.\n */\n this._initialMetadata = {\n dir : options.dir,\n date : options.date\n };\n};\n\nZipObject.prototype = {\n /**\n * Return the content as UTF8 string.\n * @return {string} the UTF8 string.\n */\n asText: function() {\n return dataToString.call(this, true);\n },\n /**\n * Returns the binary content.\n * @return {string} the content as binary.\n */\n asBinary: function() {\n return dataToString.call(this, false);\n },\n /**\n * Returns the content as a nodejs Buffer.\n * @return {Buffer} the content as a Buffer.\n */\n asNodeBuffer: function() {\n var result = getBinaryData(this);\n return utils.transformTo(\"nodebuffer\", result);\n },\n /**\n * Returns the content as an Uint8Array.\n * @return {Uint8Array} the content as an Uint8Array.\n */\n asUint8Array: function() {\n var result = getBinaryData(this);\n return utils.transformTo(\"uint8array\", result);\n },\n /**\n * Returns the content as an ArrayBuffer.\n * @return {ArrayBuffer} the content as an ArrayBufer.\n */\n asArrayBuffer: function() {\n return this.asUint8Array().buffer;\n }\n};\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n var hex = \"\",\n i;\n for (i = 0; i < bytes; i++) {\n hex += String.fromCharCode(dec & 0xff);\n dec = dec >>> 8;\n }\n return hex;\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nvar extend = function() {\n var result = {}, i, attr;\n for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n for (attr in arguments[i]) {\n if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === \"undefined\") {\n result[attr] = arguments[i][attr];\n }\n }\n }\n return result;\n};\n\n/**\n * Transforms the (incomplete) options from the user into the complete\n * set of options to create a file.\n * @private\n * @param {Object} o the options from the user.\n * @return {Object} the complete set of options.\n */\nvar prepareFileAttrs = function(o) {\n o = o || {};\n if (o.base64 === true && (o.binary === null || o.binary === undefined)) {\n o.binary = true;\n }\n o = extend(o, defaults);\n o.date = o.date || new Date();\n if (o.compression !== null) o.compression = o.compression.toUpperCase();\n\n return o;\n};\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} o the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, o) {\n // be sure sub folders exist\n var dataType = utils.getTypeOf(data),\n parent;\n\n o = prepareFileAttrs(o);\n\n if (o.createFolders && (parent = parentFolder(name))) {\n folderAdd.call(this, parent, true);\n }\n\n if (o.dir || data === null || typeof data === \"undefined\") {\n o.base64 = false;\n o.binary = false;\n data = null;\n }\n else if (dataType === \"string\") {\n if (o.binary && !o.base64) {\n // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask\n if (o.optimizedBinaryString !== true) {\n // this is a string, not in a base64 format.\n // Be sure that this is a correct \"binary string\"\n data = utils.string2binary(data);\n }\n }\n }\n else { // arraybuffer, uint8array, ...\n o.base64 = false;\n o.binary = true;\n\n if (!dataType && !(data instanceof CompressedObject)) {\n throw new Error(\"The data of '\" + name + \"' is in an unsupported format !\");\n }\n\n // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n if (dataType === \"arraybuffer\") {\n data = utils.transformTo(\"uint8array\", data);\n }\n }\n\n var object = new ZipObject(name, data, o);\n this.files[name] = object;\n return object;\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n if (path.slice(-1) == '/') {\n path = path.substring(0, path.length - 1);\n }\n var lastSlash = path.lastIndexOf('/');\n return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n * folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n // Check the name ends with a /\n if (name.slice(-1) != \"/\") {\n name += \"/\"; // IE doesn't like substr(-1)\n }\n\n createFolders = (typeof createFolders !== 'undefined') ? createFolders : false;\n\n // Does this folder already exist?\n if (!this.files[name]) {\n fileAdd.call(this, name, null, {\n dir: true,\n createFolders: createFolders\n });\n }\n return this.files[name];\n};\n\n/**\n * Generate a JSZip.CompressedObject for a given zipOject.\n * @param {ZipObject} file the object to read.\n * @param {JSZip.compression} compression the compression to use.\n * @return {JSZip.CompressedObject} the compressed result.\n */\nvar generateCompressedObjectFrom = function(file, compression) {\n var result = new CompressedObject(),\n content;\n\n // the data has not been decompressed, we might reuse things !\n if (file._data instanceof CompressedObject) {\n result.uncompressedSize = file._data.uncompressedSize;\n result.crc32 = file._data.crc32;\n\n if (result.uncompressedSize === 0 || file.dir) {\n compression = compressions['STORE'];\n result.compressedContent = \"\";\n result.crc32 = 0;\n }\n else if (file._data.compressionMethod === compression.magic) {\n result.compressedContent = file._data.getCompressedContent();\n }\n else {\n content = file._data.getContent();\n // need to decompress / recompress\n result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));\n }\n }\n else {\n // have uncompressed data\n content = getBinaryData(file);\n if (!content || content.length === 0 || file.dir) {\n compression = compressions['STORE'];\n content = \"\";\n }\n result.uncompressedSize = content.length;\n result.crc32 = crc32(content);\n result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content));\n }\n\n result.compressedSize = result.compressedContent.length;\n result.compressionMethod = compression.magic;\n\n return result;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {string} name the file name.\n * @param {ZipObject} file the file content.\n * @param {JSZip.CompressedObject} compressedObject the compressed object.\n * @param {number} offset the current offset from the start of the zip file.\n * @return {object} the zip parts.\n */\nvar generateZipParts = function(name, file, compressedObject, offset) {\n var data = compressedObject.compressedContent,\n utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n comment = file.comment || \"\",\n utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n useUTF8ForComment = utfEncodedComment.length !== comment.length,\n o = file.options,\n dosTime,\n dosDate,\n extraFields = \"\",\n unicodePathExtraField = \"\",\n unicodeCommentExtraField = \"\",\n dir, date;\n\n\n // handle the deprecated options.dir\n if (file._initialMetadata.dir !== file.dir) {\n dir = file.dir;\n } else {\n dir = o.dir;\n }\n\n // handle the deprecated options.date\n if(file._initialMetadata.date !== file.date) {\n date = file.date;\n } else {\n date = o.date;\n }\n\n\n dosTime = date.getHours();\n dosTime = dosTime << 6;\n dosTime = dosTime | date.getMinutes();\n dosTime = dosTime << 5;\n dosTime = dosTime | date.getSeconds() / 2;\n\n dosDate = date.getFullYear() - 1980;\n dosDate = dosDate << 4;\n dosDate = dosDate | (date.getMonth() + 1);\n dosDate = dosDate << 5;\n dosDate = dosDate | date.getDate();\n\n if (useUTF8ForFileName) {\n // set the unicode path extra field. unzip needs at least one extra\n // field to correctly handle unicode path, so using the path is as good\n // as any other information. This could improve the situation with\n // other archive managers too.\n // This field is usually used without the utf8 flag, with a non\n // unicode path in the header (winrar, winzip). This helps (a bit)\n // with the messy Windows' default compressed folders feature but\n // breaks on p7zip which doesn't seek the unicode path extra field.\n // So for now, UTF-8 everywhere !\n unicodePathExtraField =\n // Version\n decToHex(1, 1) +\n // NameCRC32\n decToHex(crc32(utfEncodedFileName), 4) +\n // UnicodeName\n utfEncodedFileName;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x70\" +\n // size\n decToHex(unicodePathExtraField.length, 2) +\n // content\n unicodePathExtraField;\n }\n\n if(useUTF8ForComment) {\n\n unicodeCommentExtraField =\n // Version\n decToHex(1, 1) +\n // CommentCRC32\n decToHex(this.crc32(utfEncodedComment), 4) +\n // UnicodeName\n utfEncodedComment;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x63\" +\n // size\n decToHex(unicodeCommentExtraField.length, 2) +\n // content\n unicodeCommentExtraField;\n }\n\n var header = \"\";\n\n // version needed to extract\n header += \"\\x0A\\x00\";\n // general purpose bit flag\n // set bit 11 if utf8\n header += (useUTF8ForFileName || useUTF8ForComment) ? \"\\x00\\x08\" : \"\\x00\\x00\";\n // compression method\n header += compressedObject.compressionMethod;\n // last mod file time\n header += decToHex(dosTime, 2);\n // last mod file date\n header += decToHex(dosDate, 2);\n // crc-32\n header += decToHex(compressedObject.crc32, 4);\n // compressed size\n header += decToHex(compressedObject.compressedSize, 4);\n // uncompressed size\n header += decToHex(compressedObject.uncompressedSize, 4);\n // file name length\n header += decToHex(utfEncodedFileName.length, 2);\n // extra field length\n header += decToHex(extraFields.length, 2);\n\n\n var fileRecord = signature.LOCAL_FILE_HEADER + header + utfEncodedFileName + extraFields;\n\n var dirRecord = signature.CENTRAL_FILE_HEADER +\n // version made by (00: DOS)\n \"\\x14\\x00\" +\n // file header (common to file and central directory)\n header +\n // file comment length\n decToHex(utfEncodedComment.length, 2) +\n // disk number start\n \"\\x00\\x00\" +\n // internal file attributes TODO\n \"\\x00\\x00\" +\n // external file attributes\n (dir === true ? \"\\x10\\x00\\x00\\x00\" : \"\\x00\\x00\\x00\\x00\") +\n // relative offset of local header\n decToHex(offset, 4) +\n // file name\n utfEncodedFileName +\n // extra field\n extraFields +\n // file comment\n utfEncodedComment;\n\n return {\n fileRecord: fileRecord,\n dirRecord: dirRecord,\n compressedObject: compressedObject\n };\n};\n\n\n// return the actual prototype of JSZip\nvar out = {\n /**\n * Read an existing zip and merge the data in the current JSZip object.\n * The implementation is in jszip-load.js, don't forget to include it.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} stream The stream to load\n * @param {Object} options Options for loading the stream.\n * options.base64 : is the stream in base64 ? default : false\n * @return {JSZip} the current JSZip object\n */\n load: function(stream, options) {\n throw new Error(\"Load method is not defined. Is the file jszip-load.js included ?\");\n },\n\n /**\n * Filter nested files/folders with the specified function.\n * @param {Function} search the predicate to use :\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n * @return {Array} An array of matching elements.\n */\n filter: function(search) {\n var result = [],\n filename, relativePath, file, fileClone;\n for (filename in this.files) {\n if (!this.files.hasOwnProperty(filename)) {\n continue;\n }\n file = this.files[filename];\n // return a new object, don't let the user mess with our internal objects :)\n fileClone = new ZipObject(file.name, file._data, extend(file.options));\n relativePath = filename.slice(this.root.length, filename.length);\n if (filename.slice(0, this.root.length) === this.root && // the file is in the current root\n search(relativePath, fileClone)) { // and the file matches the function\n result.push(fileClone);\n }\n }\n return result;\n },\n\n /**\n * Add a file to the zip file, or search a file.\n * @param {string|RegExp} name The name of the file to add (if data is defined),\n * the name of the file to find (if no data) or a regex to match files.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded\n * @param {Object} o File options\n * @return {JSZip|Object|Array} this JSZip object (when adding a file),\n * a file (when searching by string) or an array of files (when searching by regex).\n */\n file: function(name, data, o) {\n if (arguments.length === 1) {\n if (utils.isRegExp(name)) {\n var regexp = name;\n return this.filter(function(relativePath, file) {\n return !file.dir && regexp.test(relativePath);\n });\n }\n else { // text\n return this.filter(function(relativePath, file) {\n return !file.dir && relativePath === name;\n })[0] || null;\n }\n }\n else { // more than one argument : we have data !\n name = this.root + name;\n fileAdd.call(this, name, data, o);\n }\n return this;\n },\n\n /**\n * Add a directory to the zip file, or search.\n * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n * @return {JSZip} an object with the new directory as the root, or an array containing matching folders.\n */\n folder: function(arg) {\n if (!arg) {\n return this;\n }\n\n if (utils.isRegExp(arg)) {\n return this.filter(function(relativePath, file) {\n return file.dir && arg.test(relativePath);\n });\n }\n\n // else, name is a new folder\n var name = this.root + arg;\n var newFolder = folderAdd.call(this, name);\n\n // Allow chaining by returning a new object with this folder as the root\n var ret = this.clone();\n ret.root = newFolder.name;\n return ret;\n },\n\n /**\n * Delete a file, or a directory and all sub-files, from the zip\n * @param {string} name the name of the file to delete\n * @return {JSZip} this JSZip object\n */\n remove: function(name) {\n name = this.root + name;\n var file = this.files[name];\n if (!file) {\n // Look for any folders\n if (name.slice(-1) != \"/\") {\n name += \"/\";\n }\n file = this.files[name];\n }\n\n if (file && !file.dir) {\n // file\n delete this.files[name];\n } else {\n // maybe a folder, delete recursively\n var kids = this.filter(function(relativePath, file) {\n return file.name.slice(0, name.length) === name;\n });\n for (var i = 0; i < kids.length; i++) {\n delete this.files[kids[i].name];\n }\n }\n\n return this;\n },\n\n /**\n * Generate the complete zip file\n * @param {Object} options the options to generate the zip file :\n * - base64, (deprecated, use type instead) true to generate base64.\n * - compression, \"STORE\" by default.\n * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file\n */\n generate: function(options) {\n options = extend(options || {}, {\n base64: true,\n compression: \"STORE\",\n type: \"base64\",\n comment: null\n });\n\n utils.checkSupport(options.type);\n\n var zipData = [],\n localDirLength = 0,\n centralDirLength = 0,\n writer, i,\n utfEncodedComment = utils.transformTo(\"string\", this.utf8encode(options.comment || this.comment || \"\"));\n\n // first, generate all the zip parts.\n for (var name in this.files) {\n if (!this.files.hasOwnProperty(name)) {\n continue;\n }\n var file = this.files[name];\n\n var compressionName = file.options.compression || options.compression.toUpperCase();\n var compression = compressions[compressionName];\n if (!compression) {\n throw new Error(compressionName + \" is not a valid compression method !\");\n }\n\n var compressedObject = generateCompressedObjectFrom.call(this, file, compression);\n\n var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength);\n localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize;\n centralDirLength += zipPart.dirRecord.length;\n zipData.push(zipPart);\n }\n\n var dirEnd = \"\";\n\n // end of central dir signature\n dirEnd = signature.CENTRAL_DIRECTORY_END +\n // number of this disk\n \"\\x00\\x00\" +\n // number of the disk with the start of the central directory\n \"\\x00\\x00\" +\n // total number of entries in the central directory on this disk\n decToHex(zipData.length, 2) +\n // total number of entries in the central directory\n decToHex(zipData.length, 2) +\n // size of the central directory 4 bytes\n decToHex(centralDirLength, 4) +\n // offset of start of central directory with respect to the starting disk number\n decToHex(localDirLength, 4) +\n // .ZIP file comment length\n decToHex(utfEncodedComment.length, 2) +\n // .ZIP file comment\n utfEncodedComment;\n\n\n // we have all the parts (and the total length)\n // time to create a writer !\n var typeName = options.type.toLowerCase();\n if(typeName===\"uint8array\"||typeName===\"arraybuffer\"||typeName===\"blob\"||typeName===\"nodebuffer\") {\n writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);\n }else{\n writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);\n }\n\n for (i = 0; i < zipData.length; i++) {\n writer.append(zipData[i].fileRecord);\n writer.append(zipData[i].compressedObject.compressedContent);\n }\n for (i = 0; i < zipData.length; i++) {\n writer.append(zipData[i].dirRecord);\n }\n\n writer.append(dirEnd);\n\n var zip = writer.finalize();\n\n\n\n switch(options.type.toLowerCase()) {\n // case \"zip is an Uint8Array\"\n case \"uint8array\" :\n case \"arraybuffer\" :\n case \"nodebuffer\" :\n return utils.transformTo(options.type.toLowerCase(), zip);\n case \"blob\" :\n return utils.arrayBuffer2Blob(utils.transformTo(\"arraybuffer\", zip));\n // case \"zip is a string\"\n case \"base64\" :\n return (options.base64) ? base64.encode(zip) : zip;\n default : // case \"string\" :\n return zip;\n }\n\n },\n\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n crc32: function (input, crc) {\n return crc32(input, crc);\n },\n\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n utf8encode: function (string) {\n return utils.transformTo(\"string\", utf8.utf8encode(string));\n },\n\n /**\n * @deprecated\n * This method will be removed in a future version without replacement.\n */\n utf8decode: function (input) {\n return utf8.utf8decode(input);\n }\n};\nmodule.exports = out;\n\n},{\"./base64\":1,\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./defaults\":6,\"./nodeBuffer\":11,\"./signature\":14,\"./stringWriter\":16,\"./support\":17,\"./uint8ArrayWriter\":19,\"./utf8\":20,\"./utils\":21}],14:[function(_dereq_,module,exports){\n'use strict';\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n\n},{}],15:[function(_dereq_,module,exports){\n'use strict';\nvar DataReader = _dereq_('./dataReader');\nvar utils = _dereq_('./utils');\n\nfunction StringReader(data, optimizedBinaryString) {\n this.data = data;\n if (!optimizedBinaryString) {\n this.data = utils.string2binary(this.data);\n }\n this.length = this.data.length;\n this.index = 0;\n}\nStringReader.prototype = new DataReader();\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n return this.data.charCodeAt(i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n return this.data.lastIndexOf(sig);\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n this.checkOffset(size);\n // this will work because the constructor applied the \"& 0xff\" mask.\n var result = this.data.slice(this.index, this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = StringReader;\n\n},{\"./dataReader\":5,\"./utils\":21}],16:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\n\n/**\n * An object to write any content to a string.\n * @constructor\n */\nvar StringWriter = function() {\n this.data = [];\n};\nStringWriter.prototype = {\n /**\n * Append any content to the current string.\n * @param {Object} input the content to add.\n */\n append: function(input) {\n input = utils.transformTo(\"string\", input);\n this.data.push(input);\n },\n /**\n * Finalize the construction an return the result.\n * @return {string} the generated string.\n */\n finalize: function() {\n return this.data.join(\"\");\n }\n};\n\nmodule.exports = StringWriter;\n\n},{\"./utils\":21}],17:[function(_dereq_,module,exports){\n(function (Buffer){\n'use strict';\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\n// contains true if JSZip can read/generate nodejs Buffer, false otherwise.\n// Browserify will provide a Buffer implementation for browsers, which is\n// an augmented Uint8Array (i.e., can be used as either Buffer or U8).\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n exports.blob = false;\n}\nelse {\n var buffer = new ArrayBuffer(0);\n try {\n exports.blob = new Blob([buffer], {\n type: \"application/zip\"\n }).size === 0;\n }\n catch (e) {\n try {\n var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n var builder = new Builder();\n builder.append(buffer);\n exports.blob = builder.getBlob('application/zip').size === 0;\n }\n catch (e) {\n exports.blob = false;\n }\n }\n}\n\n}).call(this,(typeof Buffer !== \"undefined\" ? Buffer : undefined))\n},{}],18:[function(_dereq_,module,exports){\n'use strict';\nvar DataReader = _dereq_('./dataReader');\n\nfunction Uint8ArrayReader(data) {\n if (data) {\n this.data = data;\n this.length = this.data.length;\n this.index = 0;\n }\n}\nUint8ArrayReader.prototype = new DataReader();\n/**\n * @see DataReader.byteAt\n */\nUint8ArrayReader.prototype.byteAt = function(i) {\n return this.data[i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nUint8ArrayReader.prototype.lastIndexOfSignature = function(sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3);\n for (var i = this.length - 4; i >= 0; --i) {\n if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n return i;\n }\n }\n\n return -1;\n};\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n this.checkOffset(size);\n if(size === 0) {\n // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n return new Uint8Array(0);\n }\n var result = this.data.subarray(this.index, this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = Uint8ArrayReader;\n\n},{\"./dataReader\":5}],19:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\n\n/**\n * An object to write any content to an Uint8Array.\n * @constructor\n * @param {number} length The length of the array.\n */\nvar Uint8ArrayWriter = function(length) {\n this.data = new Uint8Array(length);\n this.index = 0;\n};\nUint8ArrayWriter.prototype = {\n /**\n * Append any content to the current array.\n * @param {Object} input the content to add.\n */\n append: function(input) {\n if (input.length !== 0) {\n // with an empty Uint8Array, Opera fails with a \"Offset larger than array size\"\n input = utils.transformTo(\"uint8array\", input);\n this.data.set(input, this.index);\n this.index += input.length;\n }\n },\n /**\n * Finalize the construction an return the result.\n * @return {Uint8Array} the generated array.\n */\n finalize: function() {\n return this.data;\n }\n};\n\nmodule.exports = Uint8ArrayWriter;\n\n},{\"./utils\":21}],20:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('./utils');\nvar support = _dereq_('./support');\nvar nodeBuffer = _dereq_('./nodeBuffer');\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if (((c & 0xfc00) === 0xd800) && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += (c < 0x80) ? 1 : ((c < 0x800) ? 2 : ((c < 0x10000) ? 3 : 4));\n }\n\n // allocate buffer\n if (support.uint8array) {\n buf = new Uint8Array(buf_len);\n } else {\n buf = new Array(buf_len);\n }\n\n // convert\n for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | ((c >>> 6) & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | ((c >>> 12) & 0x3f);\n buf[i++] = 0x80 | ((c >>> 6) & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = function(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max-1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n var str, i, out, c, c_len;\n var len = buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len*2);\n\n for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n // shrinkBuf(utf16buf, out)\n if (utf16buf.length !== out) {\n if(utf16buf.subarray) {\n utf16buf = utf16buf.subarray(0, out);\n } else {\n utf16buf.length = out;\n }\n }\n\n // return String.fromCharCode.apply(null, utf16buf);\n return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n if (support.nodebuffer) {\n return nodeBuffer(str, \"utf-8\");\n }\n\n return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n if (support.nodebuffer) {\n return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n }\n\n buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n // return buf2string(buf);\n // Chrome prefers to work with \"small\" chunks of data\n // for the method buf2string.\n // Firefox and Chrome has their own shortcut, IE doesn't seem to really care.\n var result = [], k = 0, len = buf.length, chunk = 65536;\n while (k < len) {\n var nextBoundary = utf8border(buf, Math.min(k + chunk, len));\n if (support.uint8array) {\n result.push(buf2string(buf.subarray(k, nextBoundary)));\n } else {\n result.push(buf2string(buf.slice(k, nextBoundary)));\n }\n k = nextBoundary;\n }\n return result.join(\"\");\n\n};\n// vim: set shiftwidth=4 softtabstop=4:\n\n},{\"./nodeBuffer\":11,\"./support\":17,\"./utils\":21}],21:[function(_dereq_,module,exports){\n'use strict';\nvar support = _dereq_('./support');\nvar compressions = _dereq_('./compressions');\nvar nodeBuffer = _dereq_('./nodeBuffer');\n/**\n * Convert a string to a \"binary string\" : a string containing only char codes between 0 and 255.\n * @param {string} str the string to transform.\n * @return {String} the binary string.\n */\nexports.string2binary = function(str) {\n var result = \"\";\n for (var i = 0; i < str.length; i++) {\n result += String.fromCharCode(str.charCodeAt(i) & 0xff);\n }\n return result;\n};\nexports.arrayBuffer2Blob = function(buffer) {\n exports.checkSupport(\"blob\");\n\n try {\n // Blob constructor\n return new Blob([buffer], {\n type: \"application/zip\"\n });\n }\n catch (e) {\n\n try {\n // deprecated, browser only, old way\n var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n var builder = new Builder();\n builder.append(buffer);\n return builder.getBlob('application/zip');\n }\n catch (e) {\n\n // well, fuck ?!\n throw new Error(\"Bug : can't construct the Blob.\");\n }\n }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n for (var i = 0; i < str.length; ++i) {\n array[i] = str.charCodeAt(i) & 0xFF;\n }\n return array;\n}\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n // Performances notes :\n // --------------------\n // String.fromCharCode.apply(null, array) is the fastest, see\n // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n // but the stack is limited (and we can get huge arrays !).\n //\n // result += String.fromCharCode(array[i]); generate too many strings !\n //\n // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n var chunk = 65536;\n var result = [],\n len = array.length,\n type = exports.getTypeOf(array),\n k = 0,\n canUseApply = true;\n try {\n switch(type) {\n case \"uint8array\":\n String.fromCharCode.apply(null, new Uint8Array(0));\n break;\n case \"nodebuffer\":\n String.fromCharCode.apply(null, nodeBuffer(0));\n break;\n }\n } catch(e) {\n canUseApply = false;\n }\n\n // no apply : slow and painful algorithm\n // default browser on android 4.*\n if (!canUseApply) {\n var resultStr = \"\";\n for(var i = 0; i < array.length;i++) {\n resultStr += String.fromCharCode(array[i]);\n }\n return resultStr;\n }\n while (k < len && chunk > 1) {\n try {\n if (type === \"array\" || type === \"nodebuffer\") {\n result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n }\n else {\n result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n }\n k += chunk;\n }\n catch (e) {\n chunk = Math.floor(chunk / 2);\n }\n }\n return result.join(\"\");\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n for (var i = 0; i < arrayFrom.length; i++) {\n arrayTo[i] = arrayFrom[i];\n }\n return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n \"string\": identity,\n \"array\": function(input) {\n return stringToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"string\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return stringToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": function(input) {\n return stringToArrayLike(input, nodeBuffer(input.length));\n }\n};\n\n// array to ?\ntransform[\"array\"] = {\n \"string\": arrayLikeToString,\n \"array\": identity,\n \"arraybuffer\": function(input) {\n return (new Uint8Array(input)).buffer;\n },\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodeBuffer(input);\n }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n \"string\": function(input) {\n return arrayLikeToString(new Uint8Array(input));\n },\n \"array\": function(input) {\n return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n },\n \"arraybuffer\": identity,\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodeBuffer(new Uint8Array(input));\n }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return input.buffer;\n },\n \"uint8array\": identity,\n \"nodebuffer\": function(input) {\n return nodeBuffer(input);\n }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n if (!input) {\n // undefined, null, etc\n // an empty string won't harm.\n input = \"\";\n }\n if (!outputType) {\n return input;\n }\n exports.checkSupport(outputType);\n var inputType = exports.getTypeOf(input);\n var result = transform[inputType][outputType](input);\n return result;\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n if (typeof input === \"string\") {\n return \"string\";\n }\n if (Object.prototype.toString.call(input) === \"[object Array]\") {\n return \"array\";\n }\n if (support.nodebuffer && nodeBuffer.test(input)) {\n return \"nodebuffer\";\n }\n if (support.uint8array && input instanceof Uint8Array) {\n return \"uint8array\";\n }\n if (support.arraybuffer && input instanceof ArrayBuffer) {\n return \"arraybuffer\";\n }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n var supported = support[type.toLowerCase()];\n if (!supported) {\n throw new Error(type + \" is not supported by this browser\");\n }\n};\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n var res = '',\n code, i;\n for (i = 0; i < (str || \"\").length; i++) {\n code = str.charCodeAt(i);\n res += '\\\\x' + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n }\n return res;\n};\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nexports.findCompression = function(compressionMethod) {\n for (var method in compressions) {\n if (!compressions.hasOwnProperty(method)) {\n continue;\n }\n if (compressions[method].magic === compressionMethod) {\n return compressions[method];\n }\n }\n return null;\n};\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param {Object} object Anything\n* @return {Boolean} true if the object is a regular expression,\n* false otherwise\n*/\nexports.isRegExp = function (object) {\n return Object.prototype.toString.call(object) === \"[object RegExp]\";\n};\n\n\n},{\"./compressions\":3,\"./nodeBuffer\":11,\"./support\":17}],22:[function(_dereq_,module,exports){\n'use strict';\nvar StringReader = _dereq_('./stringReader');\nvar NodeBufferReader = _dereq_('./nodeBufferReader');\nvar Uint8ArrayReader = _dereq_('./uint8ArrayReader');\nvar utils = _dereq_('./utils');\nvar sig = _dereq_('./signature');\nvar ZipEntry = _dereq_('./zipEntry');\nvar support = _dereq_('./support');\nvar jszipProto = _dereq_('./object');\n// class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {String|ArrayBuffer|Uint8Array} data the binary stream to load.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(data, loadOptions) {\n this.files = [];\n this.loadOptions = loadOptions;\n if (data) {\n this.load(data);\n }\n}\nZipEntries.prototype = {\n /**\n * Check that the reader is on the speficied signature.\n * @param {string} expectedSignature the expected signature.\n * @throws {Error} if it is an other signature.\n */\n checkSignature: function(expectedSignature) {\n var signature = this.reader.readString(4);\n if (signature !== expectedSignature) {\n throw new Error(\"Corrupted zip or bug : unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n }\n },\n /**\n * Read the end of the central directory.\n */\n readBlockEndOfCentral: function() {\n this.diskNumber = this.reader.readInt(2);\n this.diskWithCentralDirStart = this.reader.readInt(2);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n this.centralDirRecords = this.reader.readInt(2);\n this.centralDirSize = this.reader.readInt(4);\n this.centralDirOffset = this.reader.readInt(4);\n\n this.zipCommentLength = this.reader.readInt(2);\n // warning : the encoding depends of the system locale\n // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n // On a windows machine, this field is encoded with the localized windows code page.\n this.zipComment = this.reader.readString(this.zipCommentLength);\n // To get consistent behavior with the generation part, we will assume that\n // this is utf8 encoded.\n this.zipComment = jszipProto.utf8decode(this.zipComment);\n },\n /**\n * Read the end of the Zip 64 central directory.\n * Not merged with the method readEndOfCentral :\n * The end of central can coexist with its Zip64 brother,\n * I don't want to read the wrong number of bytes !\n */\n readBlockZip64EndOfCentral: function() {\n this.zip64EndOfCentralSize = this.reader.readInt(8);\n this.versionMadeBy = this.reader.readString(2);\n this.versionNeeded = this.reader.readInt(2);\n this.diskNumber = this.reader.readInt(4);\n this.diskWithCentralDirStart = this.reader.readInt(4);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n this.centralDirRecords = this.reader.readInt(8);\n this.centralDirSize = this.reader.readInt(8);\n this.centralDirOffset = this.reader.readInt(8);\n\n this.zip64ExtensibleData = {};\n var extraDataSize = this.zip64EndOfCentralSize - 44,\n index = 0,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n while (index < extraDataSize) {\n extraFieldId = this.reader.readInt(2);\n extraFieldLength = this.reader.readInt(4);\n extraFieldValue = this.reader.readString(extraFieldLength);\n this.zip64ExtensibleData[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n },\n /**\n * Read the end of the Zip 64 central directory locator.\n */\n readBlockZip64EndOfCentralLocator: function() {\n this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n this.disksCount = this.reader.readInt(4);\n if (this.disksCount > 1) {\n throw new Error(\"Multi-volumes zip are not supported\");\n }\n },\n /**\n * Read the local files, based on the offset read in the central part.\n */\n readLocalFiles: function() {\n var i, file;\n for (i = 0; i < this.files.length; i++) {\n file = this.files[i];\n this.reader.setIndex(file.localHeaderOffset);\n this.checkSignature(sig.LOCAL_FILE_HEADER);\n file.readLocalPart(this.reader);\n file.handleUTF8();\n }\n },\n /**\n * Read the central directory.\n */\n readCentralDir: function() {\n var file;\n\n this.reader.setIndex(this.centralDirOffset);\n while (this.reader.readString(4) === sig.CENTRAL_FILE_HEADER) {\n file = new ZipEntry({\n zip64: this.zip64\n }, this.loadOptions);\n file.readCentralPart(this.reader);\n this.files.push(file);\n }\n },\n /**\n * Read the end of central directory.\n */\n readEndOfCentral: function() {\n var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n if (offset === -1) {\n throw new Error(\"Corrupted zip : can't find end of central directory\");\n }\n this.reader.setIndex(offset);\n this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n this.readBlockEndOfCentral();\n\n\n /* extract from the zip spec :\n 4) If one of the fields in the end of central directory\n record is too small to hold required data, the field\n should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n ZIP64 format record should be created.\n 5) The end of central directory record and the\n Zip64 end of central directory locator record must\n reside on the same disk when splitting or spanning\n an archive.\n */\n if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n this.zip64 = true;\n\n /*\n Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n the zip file can fit into a 32bits integer. This cannot be solved : Javascript represents\n all numbers as 64-bit double precision IEEE 754 floating point numbers.\n So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n */\n\n // should look for a zip64 EOCD locator\n offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n if (offset === -1) {\n throw new Error(\"Corrupted zip : can't find the ZIP64 end of central directory locator\");\n }\n this.reader.setIndex(offset);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n this.readBlockZip64EndOfCentralLocator();\n\n // now the zip64 EOCD record\n this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n this.readBlockZip64EndOfCentral();\n }\n },\n prepareReader: function(data) {\n var type = utils.getTypeOf(data);\n if (type === \"string\" && !support.uint8array) {\n this.reader = new StringReader(data, this.loadOptions.optimizedBinaryString);\n }\n else if (type === \"nodebuffer\") {\n this.reader = new NodeBufferReader(data);\n }\n else {\n this.reader = new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n }\n },\n /**\n * Read a zip file and create ZipEntries.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n */\n load: function(data) {\n this.prepareReader(data);\n this.readEndOfCentral();\n this.readCentralDir();\n this.readLocalFiles();\n }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n\n},{\"./nodeBufferReader\":12,\"./object\":13,\"./signature\":14,\"./stringReader\":15,\"./support\":17,\"./uint8ArrayReader\":18,\"./utils\":21,\"./zipEntry\":23}],23:[function(_dereq_,module,exports){\n'use strict';\nvar StringReader = _dereq_('./stringReader');\nvar utils = _dereq_('./utils');\nvar CompressedObject = _dereq_('./compressedObject');\nvar jszipProto = _dereq_('./object');\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n this.options = options;\n this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n /**\n * say if the file is encrypted.\n * @return {boolean} true if the file is encrypted, false otherwise.\n */\n isEncrypted: function() {\n // bit 1 is set\n return (this.bitFlag & 0x0001) === 0x0001;\n },\n /**\n * say if the file has utf-8 filename/comment.\n * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n */\n useUTF8: function() {\n // bit 11 is set\n return (this.bitFlag & 0x0800) === 0x0800;\n },\n /**\n * Prepare the function used to generate the compressed content from this ZipFile.\n * @param {DataReader} reader the reader to use.\n * @param {number} from the offset from where we should read the data.\n * @param {number} length the length of the data to read.\n * @return {Function} the callback to get the compressed content (the type depends of the DataReader class).\n */\n prepareCompressedContent: function(reader, from, length) {\n return function() {\n var previousIndex = reader.index;\n reader.setIndex(from);\n var compressedFileData = reader.readData(length);\n reader.setIndex(previousIndex);\n\n return compressedFileData;\n };\n },\n /**\n * Prepare the function used to generate the uncompressed content from this ZipFile.\n * @param {DataReader} reader the reader to use.\n * @param {number} from the offset from where we should read the data.\n * @param {number} length the length of the data to read.\n * @param {JSZip.compression} compression the compression used on this file.\n * @param {number} uncompressedSize the uncompressed size to expect.\n * @return {Function} the callback to get the uncompressed content (the type depends of the DataReader class).\n */\n prepareContent: function(reader, from, length, compression, uncompressedSize) {\n return function() {\n\n var compressedFileData = utils.transformTo(compression.uncompressInputType, this.getCompressedContent());\n var uncompressedFileData = compression.uncompress(compressedFileData);\n\n if (uncompressedFileData.length !== uncompressedSize) {\n throw new Error(\"Bug : uncompressed data size mismatch\");\n }\n\n return uncompressedFileData;\n };\n },\n /**\n * Read the local part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readLocalPart: function(reader) {\n var compression, localExtraFieldsLength;\n\n // we already know everything from the central dir !\n // If the central dir data are false, we are doomed.\n // On the bright side, the local part is scary : zip64, data descriptors, both, etc.\n // The less data we get here, the more reliable this should be.\n // Let's skip the whole header and dash to the data !\n reader.skip(22);\n // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n // Strangely, the filename here is OK.\n // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n // the internet.\n //\n // I think I see the logic here : the central directory is used to display\n // content and the local directory is used to extract the files. Mixing / and \\\n // may be used to display \\ to windows users and use / when extracting the files.\n // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n this.fileNameLength = reader.readInt(2);\n localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n this.fileName = reader.readString(this.fileNameLength);\n reader.skip(localExtraFieldsLength);\n\n if (this.compressedSize == -1 || this.uncompressedSize == -1) {\n throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory \" + \"(compressedSize == -1 || uncompressedSize == -1)\");\n }\n\n compression = utils.findCompression(this.compressionMethod);\n if (compression === null) { // no compression found\n throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + this.fileName + \")\");\n }\n this.decompressed = new CompressedObject();\n this.decompressed.compressedSize = this.compressedSize;\n this.decompressed.uncompressedSize = this.uncompressedSize;\n this.decompressed.crc32 = this.crc32;\n this.decompressed.compressionMethod = this.compressionMethod;\n this.decompressed.getCompressedContent = this.prepareCompressedContent(reader, reader.index, this.compressedSize, compression);\n this.decompressed.getContent = this.prepareContent(reader, reader.index, this.compressedSize, compression, this.uncompressedSize);\n\n // we need to compute the crc32...\n if (this.loadOptions.checkCRC32) {\n this.decompressed = utils.transformTo(\"string\", this.decompressed.getContent());\n if (jszipProto.crc32(this.decompressed) !== this.crc32) {\n throw new Error(\"Corrupted zip : CRC32 mismatch\");\n }\n }\n },\n\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readCentralPart: function(reader) {\n this.versionMadeBy = reader.readString(2);\n this.versionNeeded = reader.readInt(2);\n this.bitFlag = reader.readInt(2);\n this.compressionMethod = reader.readString(2);\n this.date = reader.readDate();\n this.crc32 = reader.readInt(4);\n this.compressedSize = reader.readInt(4);\n this.uncompressedSize = reader.readInt(4);\n this.fileNameLength = reader.readInt(2);\n this.extraFieldsLength = reader.readInt(2);\n this.fileCommentLength = reader.readInt(2);\n this.diskNumberStart = reader.readInt(2);\n this.internalFileAttributes = reader.readInt(2);\n this.externalFileAttributes = reader.readInt(4);\n this.localHeaderOffset = reader.readInt(4);\n\n if (this.isEncrypted()) {\n throw new Error(\"Encrypted zip are not supported\");\n }\n\n this.fileName = reader.readString(this.fileNameLength);\n this.readExtraFields(reader);\n this.parseZIP64ExtraField(reader);\n this.fileComment = reader.readString(this.fileCommentLength);\n\n // warning, this is true only for zip with madeBy == DOS (plateform dependent feature)\n this.dir = this.externalFileAttributes & 0x00000010 ? true : false;\n },\n /**\n * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n * @param {DataReader} reader the reader to use.\n */\n parseZIP64ExtraField: function(reader) {\n\n if (!this.extraFields[0x0001]) {\n return;\n }\n\n // should be something, preparing the extra reader\n var extraReader = new StringReader(this.extraFields[0x0001].value);\n\n // I really hope that these 64bits integer can fit in 32 bits integer, because js\n // won't let us have more.\n if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n this.uncompressedSize = extraReader.readInt(8);\n }\n if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n this.compressedSize = extraReader.readInt(8);\n }\n if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n this.localHeaderOffset = extraReader.readInt(8);\n }\n if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n this.diskNumberStart = extraReader.readInt(4);\n }\n },\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readExtraFields: function(reader) {\n var start = reader.index,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n\n this.extraFields = this.extraFields || {};\n\n while (reader.index < start + this.extraFieldsLength) {\n extraFieldId = reader.readInt(2);\n extraFieldLength = reader.readInt(2);\n extraFieldValue = reader.readString(extraFieldLength);\n\n this.extraFields[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n },\n /**\n * Apply an UTF8 transformation if needed.\n */\n handleUTF8: function() {\n if (this.useUTF8()) {\n this.fileName = jszipProto.utf8decode(this.fileName);\n this.fileComment = jszipProto.utf8decode(this.fileComment);\n } else {\n var upath = this.findExtraFieldUnicodePath();\n if (upath !== null) {\n this.fileName = upath;\n }\n var ucomment = this.findExtraFieldUnicodeComment();\n if (ucomment !== null) {\n this.fileComment = ucomment;\n }\n }\n },\n\n /**\n * Find the unicode path declared in the extra field, if any.\n * @return {String} the unicode path, null otherwise.\n */\n findExtraFieldUnicodePath: function() {\n var upathField = this.extraFields[0x7075];\n if (upathField) {\n var extraReader = new StringReader(upathField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the filename changed, this field is out of date.\n if (jszipProto.crc32(this.fileName) !== extraReader.readInt(4)) {\n return null;\n }\n\n return jszipProto.utf8decode(extraReader.readString(upathField.length - 5));\n }\n return null;\n },\n\n /**\n * Find the unicode comment declared in the extra field, if any.\n * @return {String} the unicode comment, null otherwise.\n */\n findExtraFieldUnicodeComment: function() {\n var ucommentField = this.extraFields[0x6375];\n if (ucommentField) {\n var extraReader = new StringReader(ucommentField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the comment changed, this field is out of date.\n if (jszipProto.crc32(this.fileComment) !== extraReader.readInt(4)) {\n return null;\n }\n\n return jszipProto.utf8decode(extraReader.readString(ucommentField.length - 5));\n }\n return null;\n }\n};\nmodule.exports = ZipEntry;\n\n},{\"./compressedObject\":2,\"./object\":13,\"./stringReader\":15,\"./utils\":21}],24:[function(_dereq_,module,exports){\n// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = _dereq_('./lib/utils/common').assign;\n\nvar deflate = _dereq_('./lib/deflate');\nvar inflate = _dereq_('./lib/inflate');\nvar constants = _dereq_('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n},{\"./lib/deflate\":25,\"./lib/inflate\":26,\"./lib/utils/common\":27,\"./lib/zlib/constants\":30}],25:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_deflate = _dereq_('./zlib/deflate.js');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar msg = _dereq_('./zlib/messages');\nvar zstream = _dereq_('./zlib/zstream');\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overriden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nvar Deflate = function(options) {\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n};\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|String): input data. Strings will be converted to\n * utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That flush internal pending buffers and call\n * [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function(data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && _mode === Z_FINISH)) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function(chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that input stream complete\n * or error happenned. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function(status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate alrorythm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/deflate.js\":32,\"./zlib/messages\":37,\"./zlib/zstream\":39}],26:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar zlib_inflate = _dereq_('./zlib/inflate.js');\nvar utils = _dereq_('./utils/common');\nvar strings = _dereq_('./utils/strings');\nvar c = _dereq_('./zlib/constants');\nvar msg = _dereq_('./zlib/messages');\nvar zstream = _dereq_('./zlib/zstream');\nvar gzheader = _dereq_('./zlib/gzheader');\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overriden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nvar Inflate = function(options) {\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new gzheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n};\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That flush internal pending buffers and call\n * [[Inflate#onEnd]].\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function(data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && _mode === c.Z_FINISH)) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n } while ((strm.avail_in > 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function(chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell inflate that input stream complete\n * or error happenned. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function(status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 alligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n\n},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/constants\":30,\"./zlib/gzheader\":33,\"./zlib/inflate.js\":35,\"./zlib/messages\":37,\"./zlib/zstream\":39}],27:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof(source) !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (source.hasOwnProperty(p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs+len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for(var i=0; i= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // use fallback for big arrays to avoid stack overflow\n if (len < 65537) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for(var i=0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function(buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function(str) {\n var buf = new utils.Buf8(str.length);\n for(var i=0, len=buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len*2);\n\n for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max-1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n},{\"./common\":27}],29:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It doesn't worth to make additional optimizationa as in original.\n// Small size is preferable.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0\n , s2 = ((adler >>> 16) & 0xffff) |0\n , n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n},{}],30:[function(_dereq_,module,exports){\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n},{}],31:[function(_dereq_,module,exports){\n'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable\n , end = pos + len;\n\n crc = crc ^ (-1);\n\n for (var i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n},{}],32:[function(_dereq_,module,exports){\n'use strict';\n\nvar utils = _dereq_('../utils/common');\nvar trees = _dereq_('./trees');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar msg = _dereq_('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2*L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only (s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH-1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH-1)) ? s.strstart : MIN_MATCH-1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH-1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size-MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH-1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1- s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length-1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH-1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH-1 ? s.strstart : MIN_MATCH-1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nvar Config = function (good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n};\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2*D_CODES+1) * 2);\n this.bl_tree = new utils.Buf16((2*BL_CODES+1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS+1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2*L_CODES+1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2*L_CODES+1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n s.d_buf = s.lit_bufsize >> 1;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg){\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n/* =========================================================================\n * Copy the source state to the destination state\n */\n//function deflateCopy(dest, source) {\n//\n//}\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./messages\":37,\"./trees\":38}],33:[function(_dereq_,module,exports){\n'use strict';\n\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n},{}],34:[function(_dereq_,module,exports){\n'use strict';\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n var window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n},{}],35:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar utils = _dereq_('../utils/common');\nvar adler32 = _dereq_('./adler32');\nvar crc32 = _dereq_('./crc32');\nvar inflate_fast = _dereq_('./inffast');\nvar inflate_table = _dereq_('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction ZSWAP32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {bits: 9});\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {bits: 5});\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window,src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window,src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window,src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more conveniend processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0 /*crc32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = ZSWAP32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = {bits: state.lenbits};\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = {bits: state.lenbits};\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = {bits: state.distbits};\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) -1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) -1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' insdead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, ZSWAP32 returns signed too\n if ((state.flags ? hold : ZSWAP32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./inffast\":34,\"./inftrees\":36}],36:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar utils = _dereq_('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS+1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS+1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n var i=0;\n /* process all codes and make table entries */\n for (;;) {\n i++;\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n},{\"../utils/common\":27}],37:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n '2': 'need dictionary', /* Z_NEED_DICT 2 */\n '1': 'stream end', /* Z_STREAM_END 1 */\n '0': '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n},{}],38:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar utils = _dereq_('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2*L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES+2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH-MIN_MATCH+1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nvar StaticTreeDesc = function (static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n};\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nvar TreeDesc = function(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n};\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short (s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c*2]/*.Code*/, tree[c*2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max]*2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max+1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n*2 +1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n*2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n-base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n*2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length-1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits+1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m*2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m*2 + 1]/*.Len*/)*tree[m*2]/*.Freq*/;\n tree[m*2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS+1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits-1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES-1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1< dist code (0..29) */\n dist = 0;\n for (code = 0 ; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */\n for ( ; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n*2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n*2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n*2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n*2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES+1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n*2 + 1]/*.Len*/ = 5;\n static_dtree[n*2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc =new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n*2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n*2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n*2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK*2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n*2;\n var _m2 = m*2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j+1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx*2] << 8) | (s.pending_buf[s.d_buf + lx*2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code+LITERALS+1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n*2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node*2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n*2 + 1]/*.Dad*/ = tree[m*2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code+1)*2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n+1)*2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6*2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10*2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138*2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n+1)*2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count-3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count-3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count-11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex]*2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3*(max_blindex+1) + 5+5+4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes-1, 5);\n send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank]*2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes-1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes-1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n*2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK<<1)+(last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES<<1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len+3+7) >>> 3;\n static_lenb = (s.static_len+3+7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len+4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES<<1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES<<1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc*2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc]+LITERALS+1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize-1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n},{\"../utils/common\":27}],39:[function(_dereq_,module,exports){\n'use strict';\n\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n},{}]},{},[9])\n(9)\n}));\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isScheduler(value) {\n return value && typeof value.schedule === 'function';\n}\n//# sourceMappingURL=isScheduler.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n var i = 0;\n sub.add(scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n return;\n }\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n sub.add(this.schedule());\n }\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleArray.js.map\n","/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { subscribeToArray } from '../util/subscribeToArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function fromArray(input, scheduler) {\n if (!scheduler) {\n return new Observable(subscribeToArray(input));\n }\n else {\n return scheduleArray(input, scheduler);\n }\n}\n//# sourceMappingURL=fromArray.js.map\n","/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { isScheduler } from '../util/isScheduler';\nimport { fromArray } from './fromArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = args[args.length - 1];\n if (isScheduler(scheduler)) {\n args.pop();\n return scheduleArray(args, scheduler);\n }\n else {\n return fromArray(args);\n }\n}\n//# sourceMappingURL=of.js.map\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","/*!\n * surveyjs - Survey JavaScript library v1.8.58\n * Copyright (c) 2015-2021 Devsoft Baltic OÜ - http://surveyjs.io/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"survey-vue\", [\"vue\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"survey-vue\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"Survey\"] = factory(root[\"Vue\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_vue__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./src/entries/vue.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/signature_pad/dist/signature_pad.mjs\":\n/*!***********************************************************!*\\\n !*** ./node_modules/signature_pad/dist/signature_pad.mjs ***!\n \\***********************************************************/\n/*! exports provided: default */\n/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/*!\n * Signature Pad v2.3.2\n * https://github.com/szimek/signature_pad\n *\n * Copyright 2017 Szymon Nowak\n * Released under the MIT license\n *\n * The main idea and some parts of the code (e.g. drawing variable width Bézier curve) are taken from:\n * http://corner.squareup.com/2012/07/smoother-signatures.html\n *\n * Implementation of interpolation using cubic Bézier curves is taken from:\n * http://benknowscode.wordpress.com/2012/09/14/path-interpolation-using-cubic-bezier-and-control-point-estimation-in-javascript\n *\n * Algorithm for approximated length of a Bézier curve is taken from:\n * http://www.lemoda.net/maths/bezier-length/index.html\n *\n */\n\nfunction Point(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time || new Date().getTime();\n}\n\nPoint.prototype.velocityFrom = function (start) {\n return this.time !== start.time ? this.distanceTo(start) / (this.time - start.time) : 1;\n};\n\nPoint.prototype.distanceTo = function (start) {\n return Math.sqrt(Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2));\n};\n\nPoint.prototype.equals = function (other) {\n return this.x === other.x && this.y === other.y && this.time === other.time;\n};\n\nfunction Bezier(startPoint, control1, control2, endPoint) {\n this.startPoint = startPoint;\n this.control1 = control1;\n this.control2 = control2;\n this.endPoint = endPoint;\n}\n\n// Returns approximated length.\nBezier.prototype.length = function () {\n var steps = 10;\n var length = 0;\n var px = void 0;\n var py = void 0;\n\n for (var i = 0; i <= steps; i += 1) {\n var t = i / steps;\n var cx = this._point(t, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x);\n var cy = this._point(t, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);\n if (i > 0) {\n var xdiff = cx - px;\n var ydiff = cy - py;\n length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n }\n px = cx;\n py = cy;\n }\n\n return length;\n};\n\n/* eslint-disable no-multi-spaces, space-in-parens */\nBezier.prototype._point = function (t, start, c1, c2, end) {\n return start * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t + 3.0 * c2 * (1.0 - t) * t * t + end * t * t * t;\n};\n\n/* eslint-disable */\n\n// http://stackoverflow.com/a/27078401/815507\nfunction throttle(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function later() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function () {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n}\n\nfunction SignaturePad(canvas, options) {\n var self = this;\n var opts = options || {};\n\n this.velocityFilterWeight = opts.velocityFilterWeight || 0.7;\n this.minWidth = opts.minWidth || 0.5;\n this.maxWidth = opts.maxWidth || 2.5;\n this.throttle = 'throttle' in opts ? opts.throttle : 16; // in miliseconds\n this.minDistance = 'minDistance' in opts ? opts.minDistance : 5;\n\n if (this.throttle) {\n this._strokeMoveUpdate = throttle(SignaturePad.prototype._strokeUpdate, this.throttle);\n } else {\n this._strokeMoveUpdate = SignaturePad.prototype._strokeUpdate;\n }\n\n this.dotSize = opts.dotSize || function () {\n return (this.minWidth + this.maxWidth) / 2;\n };\n this.penColor = opts.penColor || 'black';\n this.backgroundColor = opts.backgroundColor || 'rgba(0,0,0,0)';\n this.onBegin = opts.onBegin;\n this.onEnd = opts.onEnd;\n\n this._canvas = canvas;\n this._ctx = canvas.getContext('2d');\n this.clear();\n\n // We need add these inline so they are available to unbind while still having\n // access to 'self' we could use _.bind but it's not worth adding a dependency.\n this._handleMouseDown = function (event) {\n if (event.which === 1) {\n self._mouseButtonDown = true;\n self._strokeBegin(event);\n }\n };\n\n this._handleMouseMove = function (event) {\n if (self._mouseButtonDown) {\n self._strokeMoveUpdate(event);\n }\n };\n\n this._handleMouseUp = function (event) {\n if (event.which === 1 && self._mouseButtonDown) {\n self._mouseButtonDown = false;\n self._strokeEnd(event);\n }\n };\n\n this._handleTouchStart = function (event) {\n if (event.targetTouches.length === 1) {\n var touch = event.changedTouches[0];\n self._strokeBegin(touch);\n }\n };\n\n this._handleTouchMove = function (event) {\n // Prevent scrolling.\n event.preventDefault();\n\n var touch = event.targetTouches[0];\n self._strokeMoveUpdate(touch);\n };\n\n this._handleTouchEnd = function (event) {\n var wasCanvasTouched = event.target === self._canvas;\n if (wasCanvasTouched) {\n event.preventDefault();\n self._strokeEnd(event);\n }\n };\n\n // Enable mouse and touch event handlers\n this.on();\n}\n\n// Public methods\nSignaturePad.prototype.clear = function () {\n var ctx = this._ctx;\n var canvas = this._canvas;\n\n ctx.fillStyle = this.backgroundColor;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n this._data = [];\n this._reset();\n this._isEmpty = true;\n};\n\nSignaturePad.prototype.fromDataURL = function (dataUrl) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var image = new Image();\n var ratio = options.ratio || window.devicePixelRatio || 1;\n var width = options.width || this._canvas.width / ratio;\n var height = options.height || this._canvas.height / ratio;\n\n this._reset();\n image.src = dataUrl;\n image.onload = function () {\n _this._ctx.drawImage(image, 0, 0, width, height);\n };\n this._isEmpty = false;\n};\n\nSignaturePad.prototype.toDataURL = function (type) {\n var _canvas;\n\n switch (type) {\n case 'image/svg+xml':\n return this._toSVG();\n default:\n for (var _len = arguments.length, options = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n options[_key - 1] = arguments[_key];\n }\n\n return (_canvas = this._canvas).toDataURL.apply(_canvas, [type].concat(options));\n }\n};\n\nSignaturePad.prototype.on = function () {\n this._handleMouseEvents();\n this._handleTouchEvents();\n};\n\nSignaturePad.prototype.off = function () {\n this._canvas.removeEventListener('mousedown', this._handleMouseDown);\n this._canvas.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n\n this._canvas.removeEventListener('touchstart', this._handleTouchStart);\n this._canvas.removeEventListener('touchmove', this._handleTouchMove);\n this._canvas.removeEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype.isEmpty = function () {\n return this._isEmpty;\n};\n\n// Private methods\nSignaturePad.prototype._strokeBegin = function (event) {\n this._data.push([]);\n this._reset();\n this._strokeUpdate(event);\n\n if (typeof this.onBegin === 'function') {\n this.onBegin(event);\n }\n};\n\nSignaturePad.prototype._strokeUpdate = function (event) {\n var x = event.clientX;\n var y = event.clientY;\n\n var point = this._createPoint(x, y);\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup && lastPointGroup[lastPointGroup.length - 1];\n var isLastPointTooClose = lastPoint && point.distanceTo(lastPoint) < this.minDistance;\n\n // Skip this point if it's too close to the previous one\n if (!(lastPoint && isLastPointTooClose)) {\n var _addPoint = this._addPoint(point),\n curve = _addPoint.curve,\n widths = _addPoint.widths;\n\n if (curve && widths) {\n this._drawCurve(curve, widths.start, widths.end);\n }\n\n this._data[this._data.length - 1].push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n};\n\nSignaturePad.prototype._strokeEnd = function (event) {\n var canDrawCurve = this.points.length > 2;\n var point = this.points[0]; // Point instance\n\n if (!canDrawCurve && point) {\n this._drawDot(point);\n }\n\n if (point) {\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup[lastPointGroup.length - 1]; // plain object\n\n // When drawing a dot, there's only one point in a group, so without this check\n // such group would end up with exactly the same 2 points.\n if (!point.equals(lastPoint)) {\n lastPointGroup.push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n }\n\n if (typeof this.onEnd === 'function') {\n this.onEnd(event);\n }\n};\n\nSignaturePad.prototype._handleMouseEvents = function () {\n this._mouseButtonDown = false;\n\n this._canvas.addEventListener('mousedown', this._handleMouseDown);\n this._canvas.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n};\n\nSignaturePad.prototype._handleTouchEvents = function () {\n // Pass touch events to canvas element on mobile IE11 and Edge.\n this._canvas.style.msTouchAction = 'none';\n this._canvas.style.touchAction = 'none';\n\n this._canvas.addEventListener('touchstart', this._handleTouchStart);\n this._canvas.addEventListener('touchmove', this._handleTouchMove);\n this._canvas.addEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype._reset = function () {\n this.points = [];\n this._lastVelocity = 0;\n this._lastWidth = (this.minWidth + this.maxWidth) / 2;\n this._ctx.fillStyle = this.penColor;\n};\n\nSignaturePad.prototype._createPoint = function (x, y, time) {\n var rect = this._canvas.getBoundingClientRect();\n\n return new Point(x - rect.left, y - rect.top, time || new Date().getTime());\n};\n\nSignaturePad.prototype._addPoint = function (point) {\n var points = this.points;\n var tmp = void 0;\n\n points.push(point);\n\n if (points.length > 2) {\n // To reduce the initial lag make it work with 3 points\n // by copying the first point to the beginning.\n if (points.length === 3) points.unshift(points[0]);\n\n tmp = this._calculateCurveControlPoints(points[0], points[1], points[2]);\n var c2 = tmp.c2;\n tmp = this._calculateCurveControlPoints(points[1], points[2], points[3]);\n var c3 = tmp.c1;\n var curve = new Bezier(points[1], c2, c3, points[2]);\n var widths = this._calculateCurveWidths(curve);\n\n // Remove the first element from the list,\n // so that we always have no more than 4 points in points array.\n points.shift();\n\n return { curve: curve, widths: widths };\n }\n\n return {};\n};\n\nSignaturePad.prototype._calculateCurveControlPoints = function (s1, s2, s3) {\n var dx1 = s1.x - s2.x;\n var dy1 = s1.y - s2.y;\n var dx2 = s2.x - s3.x;\n var dy2 = s2.y - s3.y;\n\n var m1 = { x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0 };\n var m2 = { x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0 };\n\n var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n\n var dxm = m1.x - m2.x;\n var dym = m1.y - m2.y;\n\n var k = l2 / (l1 + l2);\n var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n\n var tx = s2.x - cm.x;\n var ty = s2.y - cm.y;\n\n return {\n c1: new Point(m1.x + tx, m1.y + ty),\n c2: new Point(m2.x + tx, m2.y + ty)\n };\n};\n\nSignaturePad.prototype._calculateCurveWidths = function (curve) {\n var startPoint = curve.startPoint;\n var endPoint = curve.endPoint;\n var widths = { start: null, end: null };\n\n var velocity = this.velocityFilterWeight * endPoint.velocityFrom(startPoint) + (1 - this.velocityFilterWeight) * this._lastVelocity;\n\n var newWidth = this._strokeWidth(velocity);\n\n widths.start = this._lastWidth;\n widths.end = newWidth;\n\n this._lastVelocity = velocity;\n this._lastWidth = newWidth;\n\n return widths;\n};\n\nSignaturePad.prototype._strokeWidth = function (velocity) {\n return Math.max(this.maxWidth / (velocity + 1), this.minWidth);\n};\n\nSignaturePad.prototype._drawPoint = function (x, y, size) {\n var ctx = this._ctx;\n\n ctx.moveTo(x, y);\n ctx.arc(x, y, size, 0, 2 * Math.PI, false);\n this._isEmpty = false;\n};\n\nSignaturePad.prototype._drawCurve = function (curve, startWidth, endWidth) {\n var ctx = this._ctx;\n var widthDelta = endWidth - startWidth;\n var drawSteps = Math.floor(curve.length());\n\n ctx.beginPath();\n\n for (var i = 0; i < drawSteps; i += 1) {\n // Calculate the Bezier (x, y) coordinate for this step.\n var t = i / drawSteps;\n var tt = t * t;\n var ttt = tt * t;\n var u = 1 - t;\n var uu = u * u;\n var uuu = uu * u;\n\n var x = uuu * curve.startPoint.x;\n x += 3 * uu * t * curve.control1.x;\n x += 3 * u * tt * curve.control2.x;\n x += ttt * curve.endPoint.x;\n\n var y = uuu * curve.startPoint.y;\n y += 3 * uu * t * curve.control1.y;\n y += 3 * u * tt * curve.control2.y;\n y += ttt * curve.endPoint.y;\n\n var width = startWidth + ttt * widthDelta;\n this._drawPoint(x, y, width);\n }\n\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._drawDot = function (point) {\n var ctx = this._ctx;\n var width = typeof this.dotSize === 'function' ? this.dotSize() : this.dotSize;\n\n ctx.beginPath();\n this._drawPoint(point.x, point.y, width);\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._fromData = function (pointGroups, drawCurve, drawDot) {\n for (var i = 0; i < pointGroups.length; i += 1) {\n var group = pointGroups[i];\n\n if (group.length > 1) {\n for (var j = 0; j < group.length; j += 1) {\n var rawPoint = group[j];\n var point = new Point(rawPoint.x, rawPoint.y, rawPoint.time);\n var color = rawPoint.color;\n\n if (j === 0) {\n // First point in a group. Nothing to draw yet.\n\n // All points in the group have the same color, so it's enough to set\n // penColor just at the beginning.\n this.penColor = color;\n this._reset();\n\n this._addPoint(point);\n } else if (j !== group.length - 1) {\n // Middle point in a group.\n var _addPoint2 = this._addPoint(point),\n curve = _addPoint2.curve,\n widths = _addPoint2.widths;\n\n if (curve && widths) {\n drawCurve(curve, widths, color);\n }\n } else {\n // Last point in a group. Do nothing.\n }\n }\n } else {\n this._reset();\n var _rawPoint = group[0];\n drawDot(_rawPoint);\n }\n }\n};\n\nSignaturePad.prototype._toSVG = function () {\n var _this2 = this;\n\n var pointGroups = this._data;\n var canvas = this._canvas;\n var ratio = Math.max(window.devicePixelRatio || 1, 1);\n var minX = 0;\n var minY = 0;\n var maxX = canvas.width / ratio;\n var maxY = canvas.height / ratio;\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttributeNS(null, 'width', canvas.width);\n svg.setAttributeNS(null, 'height', canvas.height);\n\n this._fromData(pointGroups, function (curve, widths, color) {\n var path = document.createElement('path');\n\n // Need to check curve for NaN values, these pop up when drawing\n // lines on the canvas that are not continuous. E.g. Sharp corners\n // or stopping mid-stroke and than continuing without lifting mouse.\n if (!isNaN(curve.control1.x) && !isNaN(curve.control1.y) && !isNaN(curve.control2.x) && !isNaN(curve.control2.y)) {\n var attr = 'M ' + curve.startPoint.x.toFixed(3) + ',' + curve.startPoint.y.toFixed(3) + ' ' + ('C ' + curve.control1.x.toFixed(3) + ',' + curve.control1.y.toFixed(3) + ' ') + (curve.control2.x.toFixed(3) + ',' + curve.control2.y.toFixed(3) + ' ') + (curve.endPoint.x.toFixed(3) + ',' + curve.endPoint.y.toFixed(3));\n\n path.setAttribute('d', attr);\n path.setAttribute('stroke-width', (widths.end * 2.25).toFixed(3));\n path.setAttribute('stroke', color);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke-linecap', 'round');\n\n svg.appendChild(path);\n }\n }, function (rawPoint) {\n var circle = document.createElement('circle');\n var dotSize = typeof _this2.dotSize === 'function' ? _this2.dotSize() : _this2.dotSize;\n circle.setAttribute('r', dotSize);\n circle.setAttribute('cx', rawPoint.x);\n circle.setAttribute('cy', rawPoint.y);\n circle.setAttribute('fill', rawPoint.color);\n\n svg.appendChild(circle);\n });\n\n var prefix = 'data:image/svg+xml;base64,';\n var header = '';\n var body = svg.innerHTML;\n\n // IE hack for missing innerHTML property on SVGElement\n if (body === undefined) {\n var dummy = document.createElement('dummy');\n var nodes = svg.childNodes;\n dummy.innerHTML = '';\n\n for (var i = 0; i < nodes.length; i += 1) {\n dummy.appendChild(nodes[i].cloneNode(true));\n }\n\n body = dummy.innerHTML;\n }\n\n var footer = '';\n var data = header + body + footer;\n\n return prefix + btoa(data);\n};\n\nSignaturePad.prototype.fromData = function (pointGroups) {\n var _this3 = this;\n\n this.clear();\n\n this._fromData(pointGroups, function (curve, widths) {\n return _this3._drawCurve(curve, widths.start, widths.end);\n }, function (rawPoint) {\n return _this3._drawDot(rawPoint);\n });\n\n this._data = pointGroups;\n};\n\nSignaturePad.prototype.toData = function () {\n return this._data;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SignaturePad);\n\n\n/***/ }),\n\n/***/ \"./node_modules/sortablejs/modular/sortable.esm.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/sortablejs/modular/sortable.esm.js ***!\n \\*********************************************************/\n/*! exports provided: default, MultiDrag, Sortable, Swap */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultiDrag\", function() { return MultiDragPlugin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Sortable\", function() { return Sortable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Swap\", function() { return SwapPlugin; });\n/**!\n * Sortable 1.13.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.13.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !!\n /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Sortable);\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return BooleanCheckbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./boolean */ \"./src/vue/boolean.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar BooleanCheckbox = /** @class */ (function (_super) {\n __extends(BooleanCheckbox, _super);\n function BooleanCheckbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BooleanCheckbox = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BooleanCheckbox);\n return BooleanCheckbox;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-boolean-checkbox\", BooleanCheckbox);\nsurvey_core__WEBPACK_IMPORTED_MODULE_3__[\"RendererFactory\"].Instance.registerRenderer(\"boolean\", \"checkbox\", \"sv-boolean-checkbox\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (BooleanCheckbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return BooleanSwitch; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./boolean */ \"./src/vue/boolean.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar BooleanSwitch = /** @class */ (function (_super) {\n __extends(BooleanSwitch, _super);\n function BooleanSwitch() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BooleanSwitch = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BooleanSwitch);\n return BooleanSwitch;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-boolean\", BooleanSwitch);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BooleanSwitch);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return ButtonGroup; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ButtonGroup = /** @class */ (function (_super) {\n __extends(ButtonGroup, _super);\n function ButtonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ButtonGroup.prototype.getModel = function () {\n return this.question;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroup.prototype, \"question\", void 0);\n ButtonGroup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ButtonGroup);\n return ButtonGroup;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"QuestionVue\"]));\n\n// Vue.component(\"survey-buttongroup\", ButtonGroup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ButtonGroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return ButtonGroupItem; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar ButtonGroupItem = /** @class */ (function (_super) {\n __extends(ButtonGroupItem, _super);\n function ButtonGroupItem(props) {\n var _this = _super.call(this, props) || this;\n _this.model = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"ButtonGroupItemModel\"](_this.question, _this.item, _this.index);\n return _this;\n }\n ButtonGroupItem.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"index\", void 0);\n ButtonGroupItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ButtonGroupItem);\n return ButtonGroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-button-group-item\", ButtonGroupItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ButtonGroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return Checkbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Checkbox = /** @class */ (function (_super) {\n __extends(Checkbox, _super);\n function Checkbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Checkbox.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n Checkbox = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Checkbox);\n return Checkbox;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox\", Checkbox);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Checkbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return CheckboxItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar CheckboxItem = /** @class */ (function (_super) {\n __extends(CheckboxItem, _super);\n function CheckboxItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CheckboxItem.prototype.getModel = function () {\n return this.item;\n };\n Object.defineProperty(CheckboxItem.prototype, \"isAllSelected\", {\n get: function () {\n return this.question.isAllSelected;\n },\n set: function (val) {\n this.question.isAllSelected = val;\n },\n enumerable: false,\n configurable: true\n });\n CheckboxItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(item);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"hideLabel\", void 0);\n CheckboxItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], CheckboxItem);\n return CheckboxItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox-item\", CheckboxItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CheckboxItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return Comment; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Comment = /** @class */ (function (_super) {\n __extends(Comment, _super);\n function Comment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Comment.prototype.change = function (event) {\n this.question.value = event.target.value;\n };\n Comment.prototype.keyup = function (event) {\n if (!this.question.isInputTextUpdate)\n return;\n this.question.value = event.target.value;\n };\n Comment = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Comment);\n return Comment;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-comment\", Comment);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Comment);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return ActionBarItemDropdownViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ActionBarItemDropdownViewModel = /** @class */ (function (_super) {\n __extends(ActionBarItemDropdownViewModel, _super);\n function ActionBarItemDropdownViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ActionBarItemDropdownViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ActionBarItemDropdownViewModel);\n return ActionBarItemDropdownViewModel;\n}(_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar-item-dropdown\", ActionBarItemDropdownViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarItemDropdownViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return ActionBarItemViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ActionBarItemViewModel = /** @class */ (function (_super) {\n __extends(ActionBarItemViewModel, _super);\n function ActionBarItemViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ActionBarItemViewModel.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionBarItemViewModel.prototype, \"item\", void 0);\n ActionBarItemViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionBarItemViewModel);\n return ActionBarItemViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-item\", ActionBarItemViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarItemViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return ActionBarSeparatorViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ActionBarSeparatorViewModel = /** @class */ (function (_super) {\n __extends(ActionBarSeparatorViewModel, _super);\n function ActionBarSeparatorViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ActionBarSeparatorViewModel.prototype, \"innerCss\", {\n get: function () {\n return this.item && this.item.innerCss;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionBarSeparatorViewModel.prototype, \"item\", void 0);\n ActionBarSeparatorViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionBarSeparatorViewModel);\n return ActionBarSeparatorViewModel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-separator\", ActionBarSeparatorViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarSeparatorViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************************/\n/*! exports provided: ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return ActionBarViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _action_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./action.vue */ \"./src/vue/components/action-bar/action.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_vue__WEBPACK_IMPORTED_MODULE_3__[\"ActionViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./action-bar-separator.vue */ \"./src/vue/components/action-bar/action-bar-separator.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__[\"ActionBarSeparatorViewModel\"]; });\n\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar ActionBarViewModel = /** @class */ (function (_super) {\n __extends(ActionBarViewModel, _super);\n function ActionBarViewModel(props) {\n return _super.call(this, props) || this;\n }\n ActionBarViewModel.prototype.getModel = function () {\n return this.model;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ActionBarViewModel.prototype, \"model\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ActionBarViewModel.prototype, \"handleClick\", void 0);\n ActionBarViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ActionBarViewModel);\n return ActionBarViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar\", ActionBarViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************************/\n/*! exports provided: ActionViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return ActionViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ActionViewModel = /** @class */ (function (_super) {\n __extends(ActionViewModel, _super);\n function ActionViewModel(props) {\n return _super.call(this, props) || this;\n }\n ActionViewModel.prototype.getModel = function () {\n return this.item;\n };\n ActionViewModel.prototype.getComponentName = function () {\n return this.item.component || \"sv-action-bar-item\";\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionViewModel.prototype, \"item\", void 0);\n ActionViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionViewModel);\n return ActionViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action\", ActionViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************************************/\n/*! exports provided: DefaultTitle, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return DefaultTitle; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar DefaultTitle = /** @class */ (function (_super) {\n __extends(DefaultTitle, _super);\n function DefaultTitle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsed = false;\n return _this;\n }\n Object.defineProperty(DefaultTitle.prototype, \"showIcon\", {\n get: function () {\n return this.element.isExpanded || this.element.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n DefaultTitle.prototype.changeExpanded = function () {\n this.element.toggleState();\n };\n DefaultTitle.prototype.getIconCss = function (isCollapsed) {\n var result = this.css.question.icon;\n if (!isCollapsed)\n result += \" \" + this.css.question.iconExpanded;\n return result;\n };\n DefaultTitle.prototype.mounted = function () {\n var _this = this;\n this.isCollapsed = this.element.isCollapsed;\n this.element.stateChangedCallback = function () {\n _this.isCollapsed = _this.element.isCollapsed;\n };\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n ], DefaultTitle.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n ], DefaultTitle.prototype, \"css\", void 0);\n DefaultTitle = __decorate([\n vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n ], DefaultTitle);\n return DefaultTitle;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-default-title\", DefaultTitle);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DefaultTitle);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: List, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return List; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar List = /** @class */ (function (_super) {\n __extends(List, _super);\n function List() {\n return _super.call(this) || this;\n }\n List.prototype.getModel = function () {\n return this.model;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], List.prototype, \"model\", void 0);\n List = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], List);\n return List;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-list\", List);\n/* harmony default export */ __webpack_exports__[\"default\"] = (List);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return SurveyQuestionMatrixDetailButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDetailButton = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDetailButton, _super);\n function SurveyQuestionMatrixDetailButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"row\", {\n get: function () {\n return this.item.data.row;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDetailButton.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDetailButton.prototype, \"item\", void 0);\n SurveyQuestionMatrixDetailButton = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDetailButton);\n return SurveyQuestionMatrixDetailButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-detail-button\", SurveyQuestionMatrixDetailButton);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDetailButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return SurveyQuestionMatrixDynamicDragDropIcon; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDynamicDragDropIcon = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDynamicDragDropIcon, _super);\n function SurveyQuestionMatrixDynamicDragDropIcon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDynamicDragDropIcon.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"item\", void 0);\n SurveyQuestionMatrixDynamicDragDropIcon = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDynamicDragDropIcon);\n return SurveyQuestionMatrixDynamicDragDropIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-drag-drop-icon\", SurveyQuestionMatrixDynamicDragDropIcon);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicDragDropIcon);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return SurveyQuestionMatrixDynamicRemoveButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDynamicRemoveButton = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDynamicRemoveButton, _super);\n function SurveyQuestionMatrixDynamicRemoveButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"row\", {\n get: function () {\n return this.item.data.row;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDynamicRemoveButton.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDynamicRemoveButton.prototype, \"item\", void 0);\n SurveyQuestionMatrixDynamicRemoveButton = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDynamicRemoveButton);\n return SurveyQuestionMatrixDynamicRemoveButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-remove-button\", SurveyQuestionMatrixDynamicRemoveButton);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicRemoveButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************************/\n/*! exports provided: PopupContainer, showModal, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return PopupContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return showModal; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar PopupContainer = /** @class */ (function (_super) {\n __extends(PopupContainer, _super);\n function PopupContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n PopupContainer.prototype.getModel = function () {\n return this.model;\n };\n PopupContainer.prototype.clickInside = function (event) {\n event.stopPropagation();\n };\n PopupContainer.prototype.onUpdated = function () {\n if (!this.prevIsVisible && this.model.isVisible) {\n this.model.updateOnShowing();\n }\n this.prevIsVisible = this.model.isVisible;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PopupContainer.prototype, \"model\", void 0);\n PopupContainer = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PopupContainer);\n return PopupContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nfunction showModal(componentName, data, onApply, onCancel) {\n var popupModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupModel\"](componentName, data, \"top\", \"left\", false, true, onCancel, onApply);\n var popupViewModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupBaseViewModel\"](popupModel, undefined);\n popupViewModel.initializePopupContainer();\n var popup = new PopupContainer({\n el: popupViewModel.container.appendChild(document.createElement(\"div\")),\n propsData: { model: popupViewModel },\n });\n popupModel.onHide = function () {\n popup.$destroy();\n popupViewModel.destroyPopupContainer();\n };\n popupViewModel.model.isVisible = true;\n}\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].showModal = showModal;\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup-container\", PopupContainer);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PopupContainer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return Popup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _popup_container_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./popup-container.vue */ \"./src/vue/components/popup/popup-container.vue\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Popup.prototype.getModel = function () {\n return this.model;\n };\n Popup.prototype.onMounted = function () {\n this.popupViewModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupBaseViewModel\"](this.model, this.$el.parentElement);\n this.popupViewModel.initializePopupContainer();\n this.popupContainer = new _popup_container_vue__WEBPACK_IMPORTED_MODULE_3__[\"PopupContainer\"]({\n el: this.popupViewModel.container.appendChild(document.createElement(\"div\")),\n propsData: { model: this.popupViewModel },\n });\n };\n Popup.prototype.destroyed = function () {\n this.popupContainer.$destroy();\n this.popupViewModel.destroyPopupContainer();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Popup.prototype, \"model\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Popup.prototype, \"targetElement\", void 0);\n Popup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Popup);\n return Popup;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup\", Popup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return SvgIcon; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar SvgIcon = /** @class */ (function (_super) {\n __extends(SvgIcon, _super);\n function SvgIcon() {\n return _super.call(this) || this;\n }\n SvgIcon.prototype.onSizePropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onWidthPropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onHeightPropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onIconNamePropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onUpdated = function () {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createSvg\"])(this.size, this.width, this.height, this.iconName, this.svgIconElement);\n };\n SvgIcon.prototype.onMounted = function () {\n this.svgIconElement = this.$refs[\"svgIcon\"];\n this.onUpdated();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"size\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"width\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"height\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"iconName\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"size\")\n ], SvgIcon.prototype, \"onSizePropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"width\")\n ], SvgIcon.prototype, \"onWidthPropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"height\")\n ], SvgIcon.prototype, \"onHeightPropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"iconName\")\n ], SvgIcon.prototype, \"onIconNamePropertyChanged\", null);\n SvgIcon = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SvgIcon);\n return SvgIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-svg-icon\", SvgIcon);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SvgIcon);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return TitleActions; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar TitleActions = /** @class */ (function (_super) {\n __extends(TitleActions, _super);\n function TitleActions() {\n return _super.call(this) || this;\n }\n Object.defineProperty(TitleActions.prototype, \"toolbar\", {\n get: function () {\n return this.element.getTitleToolbar();\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleActions.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleActions.prototype, \"css\", void 0);\n TitleActions = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], TitleActions);\n return TitleActions;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"RendererFactory\"].Instance.registerRenderer(\"element\", \"title-actions\", \"sv-title-actions\");\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-title-actions\", TitleActions);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TitleActions);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************************************************************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return Composite; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Composite = /** @class */ (function (_super) {\n __extends(Composite, _super);\n function Composite() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Composite.prototype, \"contentPanel\", {\n get: function () {\n return this.question.contentPanel;\n },\n enumerable: false,\n configurable: true\n });\n Composite = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Composite);\n return Composite;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-composite\", Composite);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Composite);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return Custom; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Custom = /** @class */ (function (_super) {\n __extends(Custom, _super);\n function Custom() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Custom.prototype, \"contentQuestion\", {\n get: function () {\n return this.question.contentQuestion;\n },\n enumerable: false,\n configurable: true\n });\n Custom.prototype.getComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n Custom = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Custom);\n return Custom;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-custom\", Custom);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Custom);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return CustomWidget; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar CustomWidget = /** @class */ (function (_super) {\n __extends(CustomWidget, _super);\n function CustomWidget() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(CustomWidget.prototype, \"hasDefaultRender\", {\n get: function () {\n return this.question.customWidget.isDefaultRender || this.hasVueComponent;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate ? true : false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"customHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasVueComponent\", {\n get: function () {\n var options = vue__WEBPACK_IMPORTED_MODULE_0___default.a[\"options\"];\n if (!options)\n return false;\n return (options.components && options.components[this.question.customWidget.name]);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"componentName\", {\n get: function () {\n if (this.hasVueComponent)\n return this.question.customWidget.name;\n return \"survey-\" + this.question.getTemplate();\n },\n enumerable: false,\n configurable: true\n });\n CustomWidget.prototype.mounted = function () {\n this.question.customWidget.afterRender(this.question, this.$el);\n };\n CustomWidget.prototype.updated = function () {\n //this.question.customWidget.afterRender(this.question, this.$el);\n };\n CustomWidget.prototype.beforeDestroy = function () {\n this.question.customWidget.willUnmount(this.question, this.$el);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CustomWidget.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CustomWidget.prototype, \"question\", void 0);\n CustomWidget = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], CustomWidget);\n return CustomWidget;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-customwidget\", CustomWidget);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CustomWidget);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return Dropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Dropdown = /** @class */ (function (_super) {\n __extends(Dropdown, _super);\n function Dropdown() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Dropdown.prototype, \"isOtherSelected\", {\n get: function () {\n var question = this.question;\n return question.hasOther && question.isOtherSelected;\n },\n enumerable: false,\n configurable: true\n });\n Dropdown = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Dropdown);\n return Dropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-dropdown\", Dropdown);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Dropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return SurveyElementVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyElementVue = /** @class */ (function (_super) {\n __extends(SurveyElementVue, _super);\n function SurveyElementVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyElementVue.prototype.getComponentName = function (element) {\n if (element.customWidget)\n return \"survey-customwidget\";\n if (element.getType() === \"panel\" || element.isDefaultRendering()) {\n return \"survey-\" + element.getTemplate();\n }\n return element.getComponentName();\n };\n SurveyElementVue.prototype.getRootClass = function (element) {\n var cssRoot = element.cssRoot;\n if (element.isReadOnly) {\n cssRoot += \" \" + this.element.cssClasses.disabled;\n }\n return cssRoot;\n };\n SurveyElementVue.prototype.getContentClass = function (element) {\n return element.cssContent;\n };\n Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return !this.element.isPanel && this.survey.questionErrorLocation === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return (!this.element.isPanel && this.survey.questionErrorLocation === \"bottom\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyElementVue.prototype.mounted = function () {\n if (!this.element.isPanel) {\n this.element.afterRender(this.$el);\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"element\", void 0);\n SurveyElementVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyElementVue);\n return SurveyElementVue;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element\", SurveyElementVue);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyElementVue);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return ElementHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ElementHeader = /** @class */ (function (_super) {\n __extends(ElementHeader, _super);\n function ElementHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ElementHeader.prototype.beforeDestroy = function () {\n this.element.stateChangedCallback = null;\n };\n ElementHeader.prototype.getTitleClass = function (element) {\n return element.cssTitle;\n };\n ElementHeader.prototype.getHeaderClass = function (element) {\n return element.cssHeader;\n };\n ElementHeader.prototype.keyup = function (evt) {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2Click\"])(evt);\n };\n ElementHeader.prototype.clickTitleFunction = function () {\n if (typeof this.element.clickTitleFunction === \"function\") {\n this.element.clickTitleFunction();\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ElementHeader.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ElementHeader.prototype, \"css\", void 0);\n ElementHeader = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ElementHeader);\n return ElementHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element-header\", ElementHeader);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ElementHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return Empty; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Empty = /** @class */ (function (_super) {\n __extends(Empty, _super);\n function Empty() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Empty = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Empty);\n return Empty;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-empty\", Empty);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Empty);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return Errors; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Errors = /** @class */ (function (_super) {\n __extends(Errors, _super);\n function Errors() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Errors.prototype, \"classes\", {\n get: function () {\n var question = this.question;\n var classes = question.cssClasses\n ? question.cssClasses.error.root\n : \"panel-error-root\";\n var additionalClasses = \"\";\n if (this.location === \"top\") {\n additionalClasses = question.cssClasses.error.locationTop;\n }\n else if (this.location === \"bottom\") {\n additionalClasses = question.cssClasses.error.locationBottom;\n }\n if (additionalClasses)\n classes += \" \" + additionalClasses;\n return classes;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Errors.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Errors.prototype, \"location\", void 0);\n Errors = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Errors);\n return Errors;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-errors\", Errors);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Errors);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return Expression; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Expression = /** @class */ (function (_super) {\n __extends(Expression, _super);\n function Expression() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Expression = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Expression);\n return Expression;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-expression\", Expression);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Expression);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: File, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return File; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar File = /** @class */ (function (_super) {\n __extends(File, _super);\n function File() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onDragOver = function (event) {\n if (_this.question.isReadOnly) {\n event.returnValue = false;\n return false;\n }\n event.dataTransfer.dropEffect = \"copy\";\n event.preventDefault();\n };\n _this.onDrop = function (event) {\n event.preventDefault();\n var src = event.dataTransfer;\n _this.onChange(src);\n };\n return _this;\n }\n File.prototype.doChange = function (event) {\n var src = event.target || event.srcElement;\n this.onChange(src);\n };\n File.prototype.doClean = function (event) {\n var question = this.question;\n var src = event.target || event.srcElement;\n if (question.needConfirmRemoveFile) {\n var isConfirmed = Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"confirmAction\"])(question.confirmRemoveAllMessage);\n if (!isConfirmed)\n return;\n }\n question.clear();\n src.parentElement.querySelectorAll(\"input\")[0].value = \"\";\n };\n File.prototype.doRemoveFile = function (data) {\n var question = this.question;\n if (question.needConfirmRemoveFile) {\n var isConfirmed = Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"confirmAction\"])(question.getConfirmRemoveMessage(data.name));\n if (!isConfirmed)\n return;\n }\n question.removeFile(data);\n };\n File.prototype.doDownloadFile = function (event, data) {\n if (Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"detectIEOrEdge\"])()) {\n event.preventDefault();\n Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"loadFileFromBase64\"])(data.content, data.name);\n }\n };\n File.prototype.getPlaceholderClass = function () {\n return \"form-control \" + this.question.cssClasses.placeholderInput;\n };\n File.prototype.onChange = function (src) {\n if (!window[\"FileReader\"])\n return;\n if (!src || !src.files || src.files.length < 1)\n return;\n var files = [];\n var allowCount = this.question.allowMultiple ? src.files.length : 1;\n for (var i = 0; i < allowCount; i++) {\n files.push(src.files[i]);\n }\n src.value = \"\";\n this.question.loadFiles(files);\n };\n File = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], File);\n return File;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-file\", File);\n/* harmony default export */ __webpack_exports__[\"default\"] = (File);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************************************************************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return FlowPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FlowPanel = /** @class */ (function (_super) {\n __extends(FlowPanel, _super);\n function FlowPanel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsedValue = false;\n return _this;\n }\n Object.defineProperty(FlowPanel.prototype, \"rootNode\", {\n get: function () {\n return this.rootNodeValue;\n },\n enumerable: false,\n configurable: true\n });\n FlowPanel.prototype.beforeMount = function () {\n if (!this.question)\n return;\n var self = this;\n this.question.onCustomHtmlProducing = function () {\n return \"\";\n };\n this.question.onGetHtmlForQuestion = self.renderQuestion;\n this.setRootNode();\n };\n FlowPanel.prototype.setRootNode = function () {\n var html = \"\" + this.question.produceHtml() + \"\";\n var doc = new DOMParser().parseFromString(html, \"text/xml\");\n this.rootNodeValue =\n !!doc && doc.childNodes.length > 0 ? doc.childNodes[0] : null;\n };\n FlowPanel.prototype.renderQuestion = function (question) {\n return \"\" + question.name + \"\";\n };\n FlowPanel.prototype.mounted = function () {\n if (this.question.survey) {\n this.question.survey.afterRenderPanel(this.question, this.$el);\n }\n this.isCollapsed = this.question.isCollapsed;\n var self = this;\n this.question.registerFunctionOnPropertyValueChanged(\"state\", function (val) {\n self.isCollapsed = self.question.isCollapsed;\n });\n };\n Object.defineProperty(FlowPanel.prototype, \"rootStyle\", {\n get: function () {\n var result = {};\n if (this.question.renderWidth) {\n result[\"flexBasis\"] = this.question.renderWidth;\n result[\"flexGrow\"] = 1;\n result[\"flexShrink\"] = 1;\n result[\"width\"] = this.question.renderWidth;\n result[\"minWidth\"] = this.question.minWidth;\n result[\"maxWidth\"] = this.question.maxWidth;\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"showIcon\", {\n get: function () {\n return (this.question && (this.question.isExpanded || this.question.isCollapsed));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"iconCss\", {\n get: function () {\n var result = \"sv_panel_icon\";\n if (!this.isCollapsed)\n result += \" sv_expanded\";\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"isCollapsed\", {\n get: function () {\n return this.isCollapsedValue;\n },\n set: function (val) {\n this.isCollapsedValue = val;\n },\n enumerable: false,\n configurable: true\n });\n FlowPanel.prototype.changeExpanded = function () {\n if (this.question.isCollapsed || this.question.isExpanded) {\n if (this.question.isCollapsed) {\n this.question.expand();\n }\n else {\n this.question.collapse();\n }\n }\n };\n FlowPanel.prototype.getTitleStyle = function () {\n var result = this.css.panel.title;\n if (this.question.isCollapsed || this.question.isExpanded) {\n result += \" \" + this.css.panel.titleExpandable;\n }\n return result;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"isEditMode\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"css\", void 0);\n FlowPanel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], FlowPanel);\n return FlowPanel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanel\", FlowPanel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlowPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return FlowPanelElement; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FlowPanelElement = /** @class */ (function (_super) {\n __extends(FlowPanelElement, _super);\n function FlowPanelElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.question = null;\n _this.tagName = \"span\";\n _this.nodes = [];\n _this.text = \"\";\n _this.style = {};\n return _this;\n }\n FlowPanelElement_1 = FlowPanelElement;\n FlowPanelElement.prototype.getStyle = function (nodeType) {\n var style = {};\n if (nodeType.toLowerCase() === \"b\") {\n style.fontWeight = \"bold\";\n }\n if (nodeType.toLowerCase() === \"i\") {\n style.fontStyle = \"italic\";\n }\n if (nodeType.toLowerCase() === \"u\") {\n style.textDecoration = \"underline\";\n }\n return style;\n };\n Object.defineProperty(FlowPanelElement.prototype, \"elementId\", {\n get: function () {\n if (!this.elementIdValue) {\n if (!FlowPanelElement_1.idValue) {\n FlowPanelElement_1.idValue = 0;\n }\n FlowPanelElement_1.idValue++;\n this.elementIdValue = \"fp_el\" + FlowPanelElement_1.idValue;\n }\n return this.elementIdValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelElement.prototype, \"survey\", {\n get: function () {\n return this.panel.survey;\n },\n enumerable: false,\n configurable: true\n });\n FlowPanelElement.prototype.beforeMount = function () {\n if (!this.panel || !this.node)\n return;\n var nodeType = this.node.nodeName.toLowerCase();\n if (!this.hasTextChildNodesOnly(this.node)) {\n this.nodes = this.getChildDomNodes(this.node);\n }\n else {\n if (nodeType == \"question\") {\n this.question = this.panel.getQuestionByName(this.node.textContent);\n }\n else {\n this.text = this.node.textContent;\n }\n }\n if (nodeType == \"div\" && !this.question) {\n this.tagName = \"div\";\n }\n this.style = this.getStyle(nodeType);\n };\n //duplicated code from element.vue\n FlowPanelElement.prototype.getComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n // duplicated code from reactpages.tsx\n FlowPanelElement.prototype.hasTextChildNodesOnly = function (node) {\n var nodes = node.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeName.toLowerCase() !== \"#text\")\n return false;\n }\n return true;\n };\n FlowPanelElement.prototype.getChildDomNodes = function (node) {\n var domNodes = [];\n for (var i = 0; i < node.childNodes.length; i++) {\n domNodes.push(node.childNodes[i]);\n }\n return domNodes;\n };\n var FlowPanelElement_1;\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"node\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"panel\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"css\", void 0);\n FlowPanelElement = FlowPanelElement_1 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], FlowPanelElement);\n return FlowPanelElement;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanelelement\", FlowPanelElement);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlowPanelElement);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return SurveyHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyHeader = /** @class */ (function (_super) {\n __extends(SurveyHeader, _super);\n function SurveyHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyHeader.prototype.mounted = function () {\n var el = this.$el;\n if (el && this.survey)\n this.survey.doAfterRenderHeader(el);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyHeader.prototype, \"survey\", void 0);\n SurveyHeader = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyHeader);\n return SurveyHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-header\", SurveyHeader);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return Html; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Html = /** @class */ (function (_super) {\n __extends(Html, _super);\n function Html() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Html.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Html.prototype, \"css\", void 0);\n Html = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Html);\n return Html;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-html\", Html);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Html);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return QuestionImage; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar QuestionImage = /** @class */ (function (_super) {\n __extends(QuestionImage, _super);\n function QuestionImage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], QuestionImage.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], QuestionImage.prototype, \"css\", void 0);\n QuestionImage = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], QuestionImage);\n return QuestionImage;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-image\", QuestionImage);\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionImage);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return ImagePicker; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ImagePicker = /** @class */ (function (_super) {\n __extends(ImagePicker, _super);\n function ImagePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ImagePicker.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n ImagePicker = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ImagePicker);\n return ImagePicker;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-imagepicker\", ImagePicker);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ImagePicker);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return Matrix; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Matrix = /** @class */ (function (_super) {\n __extends(Matrix, _super);\n function Matrix() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Matrix.prototype.cellClick = function (row, column) {\n if (this.question.isInputReadOnly)\n return;\n row.value = column.value;\n };\n Matrix = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Matrix);\n return Matrix;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrix\", Matrix);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Matrix);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return MatrixCell; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar MatrixCell = /** @class */ (function (_super) {\n __extends(MatrixCell, _super);\n function MatrixCell() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isVisible = false;\n return _this;\n }\n MatrixCell.prototype.getComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getType();\n };\n Object.defineProperty(MatrixCell.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return this.cell.showErrorOnTop;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixCell.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.cell.showErrorOnBottom;\n },\n enumerable: false,\n configurable: true\n });\n MatrixCell.prototype.getHeaders = function () {\n return this.cell.headers;\n };\n MatrixCell.prototype.getCellStyle = function () {\n if (!!this.cell.width || !!this.cell.minWidth)\n return { width: this.cell.width, minWidth: this.cell.minWidth };\n return null;\n };\n MatrixCell.prototype.getItemClass = function (item) {\n var cssClasses = this.cell.question.cssClasses;\n var isDisabled = this.cell.question.isReadOnly || !item.isEnabled;\n var isChecked = item.value === this.cell.question.renderedValue;\n var allowHover = !isDisabled && !isChecked;\n var itemClass = this.cell.question.cssClasses.item;\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n if (allowHover)\n itemClass += \" \" + cssClasses.itemHover;\n return itemClass;\n };\n MatrixCell.prototype.mounted = function () {\n if (!this.cell.hasQuestion || !this.question || !this.question.survey)\n return;\n this.onVisibilityChanged();\n var self = this;\n this.cell.question.registerFunctionOnPropertyValueChanged(\"isVisible\", function () {\n self.onVisibilityChanged();\n });\n var options = {\n cell: this.cell.cell,\n cellQuestion: this.cell.question,\n htmlElement: this.$el,\n row: this.cell.row,\n column: this.cell.cell.column,\n };\n this.question.survey.matrixAfterCellRender(this.question, options);\n };\n MatrixCell.prototype.onVisibilityChanged = function () {\n this.isVisible = this.cell.question.isVisible;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixCell.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixCell.prototype, \"cell\", void 0);\n MatrixCell = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixCell);\n return MatrixCell;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixcell\", MatrixCell);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixCell);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return MatrixDropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixDropdown = /** @class */ (function (_super) {\n __extends(MatrixDropdown, _super);\n function MatrixDropdown() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDropdown = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixDropdown);\n return MatrixDropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdropdown\", MatrixDropdown);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixDropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return MatrixDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixDynamic = /** @class */ (function (_super) {\n __extends(MatrixDynamic, _super);\n function MatrixDynamic() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDynamic.prototype.addRowClick = function () {\n this.question.addRowUI();\n };\n MatrixDynamic = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixDynamic);\n return MatrixDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdynamic\", MatrixDynamic);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return MatrixTable; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixTable = /** @class */ (function (_super) {\n __extends(MatrixTable, _super);\n function MatrixTable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(MatrixTable.prototype, \"table\", {\n get: function () {\n return this.question.renderedTable;\n },\n enumerable: false,\n configurable: true\n });\n MatrixTable.prototype.getModel = function () {\n return this.question.renderedTable;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixTable.prototype, \"question\", void 0);\n MatrixTable = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixTable);\n return MatrixTable;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixtable\", MatrixTable);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixTable);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return MultipleText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MultipleText = /** @class */ (function (_super) {\n __extends(MultipleText, _super);\n function MultipleText() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MultipleText.prototype.getComponentName = function (question) {\n if (question.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-text\";\n };\n Object.defineProperty(MultipleText.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return this.question.survey.questionErrorLocation === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleText.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.question.survey.questionErrorLocation === \"bottom\";\n },\n enumerable: false,\n configurable: true\n });\n MultipleText = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MultipleText);\n return MultipleText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-multipletext\", MultipleText);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MultipleText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/navigation.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Navigation, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return Navigation; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Navigation = /** @class */ (function (_super) {\n __extends(Navigation, _super);\n function Navigation() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.showPrevBtn = true;\n _this.showNextBtn = true;\n _this.showCompleteBtn = true;\n return _this;\n }\n Navigation.prototype.getModel = function () {\n return this.survey;\n };\n Navigation.prototype.onPropertyChanged = function (value, oldValue) {\n this.onCreated();\n this.updateShowButtons();\n };\n Navigation.prototype.onMounted = function () {\n var _this = this;\n this.survey.onCurrentPageChanged.add(function (sender, options) {\n _this.updateShowButtons();\n });\n this.updateShowButtons();\n };\n Navigation.prototype.updateShowButtons = function () {\n this.showPrevBtn = !this.survey.isFirstPage && this.survey.isShowPrevButton;\n this.showNextBtn = !this.survey.isLastPage;\n this.showCompleteBtn = this.survey.isLastPage;\n };\n Navigation.prototype.nextButtonMouseDown = function () {\n this.mouseDownPage = this.survey.currentPage;\n return this.survey.navigationMouseDown();\n };\n Navigation.prototype.buttonMouseDown = function () {\n return this.survey.navigationMouseDown();\n };\n Navigation.prototype.prevPage = function () {\n this.survey.prevPage();\n };\n Navigation.prototype.nextPage = function () {\n if (!!this.mouseDownPage && this.mouseDownPage !== this.survey.currentPage)\n return;\n this.mouseDownPage = null;\n this.survey.nextPage();\n };\n Navigation.prototype.completeLastPage = function () {\n this.survey.completeLastPage();\n };\n Navigation.prototype.showPreview = function () {\n this.survey.showPreview();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Navigation.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Navigation.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"survey\")\n ], Navigation.prototype, \"onPropertyChanged\", null);\n Navigation = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Navigation);\n return Navigation;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-navigation\", Navigation);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Navigation);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/otherChoice.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return OtherChoice; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar OtherChoice = /** @class */ (function (_super) {\n __extends(OtherChoice, _super);\n function OtherChoice() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n OtherChoice.prototype.change = function (event) {\n this.question.comment = event.target.value;\n };\n OtherChoice.prototype.keyup = function (event) {\n if (!this.question.isSurveyInputTextUpdate)\n return;\n this.question.comment = event.target.value;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], OtherChoice.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], OtherChoice.prototype, \"commentClass\", void 0);\n OtherChoice = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], OtherChoice);\n return OtherChoice;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-other-choice\", OtherChoice);\n/* harmony default export */ __webpack_exports__[\"default\"] = (OtherChoice);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return Page; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Page = /** @class */ (function (_super) {\n __extends(Page, _super);\n function Page() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCurrentPageChanged = false;\n return _this;\n }\n Page.prototype.onPagePropertyChanged = function (value, oldValue) {\n this.isCurrentPageChanged = true;\n };\n Page.prototype.getModel = function () {\n return this.page;\n };\n Page.prototype.onMounted = function () {\n if (this.survey) {\n this.survey.afterRenderPage(this.$el);\n }\n };\n Page.prototype.onUpdated = function () {\n var self = this;\n self.survey.afterRenderPage(this.$el);\n this.$nextTick(function () {\n if (this.isCurrentPageChanged) {\n this.isCurrentPageChanged = false;\n self.survey.scrollToTopOnPageChange();\n }\n });\n };\n Object.defineProperty(Page.prototype, \"showHeader\", {\n get: function () {\n return this.page._showTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"showDescription\", {\n get: function () {\n return this.page._showDescription;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"num\", {\n get: function () {\n return this.page.num > 0 ? this.page.num + \". \" : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"rows\", {\n get: function () {\n return this.page.rows;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"page\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"page\")\n ], Page.prototype, \"onPagePropertyChanged\", null);\n Page = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Page);\n return Page;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-page\", Page);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Page);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return Panel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar Panel = /** @class */ (function (_super) {\n __extends(Panel, _super);\n function Panel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsed = false;\n return _this;\n }\n Panel.prototype.getModel = function () {\n return this.question;\n };\n Panel.prototype.onMounted = function () {\n var _this = this;\n if (this.question.survey) {\n this.question.survey.afterRenderPanel(this.question, this.$el);\n }\n this.isCollapsed = this.question.isCollapsed;\n this.question.stateChangedCallback = function () {\n _this.isCollapsed = _this.question.isCollapsed;\n };\n };\n Panel.prototype.beforeDestroy = function () {\n this.question.stateChangedCallback = null;\n };\n Object.defineProperty(Panel.prototype, \"rootStyle\", {\n get: function () {\n var result = {};\n if (this.question.renderWidth) {\n result[\"flexBasis\"] = this.question.renderWidth;\n result[\"flexGrow\"] = 1;\n result[\"flexShrink\"] = 1;\n result[\"width\"] = this.question.renderWidth;\n result[\"minWidth\"] = this.question.minWidth;\n result[\"maxWidth\"] = this.question.maxWidth;\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"showIcon\", {\n get: function () {\n return this.question.isExpanded || this.question.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"iconCss\", {\n get: function () {\n var result = this.css.panel.icon;\n if (!this.isCollapsed)\n result += \" \" + this.css.panel.iconExpanded;\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Panel.prototype.keyup = function (evt) {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2Click\"])(evt);\n };\n Panel.prototype.cancelPreview = function () {\n this.question.cancelPreview();\n };\n Object.defineProperty(Panel.prototype, \"requiredTextCss\", {\n get: function () {\n return (this.question.cssClasses.requiredText ||\n this.question.cssClasses.panel.requiredText);\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"isEditMode\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"css\", void 0);\n Panel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Panel);\n return Panel;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-panel\", Panel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Panel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return PanelDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamic = /** @class */ (function (_super) {\n __extends(PanelDynamic, _super);\n function PanelDynamic() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(PanelDynamic.prototype, \"renderedPanels\", {\n get: function () {\n if (this.question.isRenderModeList)\n return this.question.panels;\n var panels = [];\n if (this.question.currentPanel) {\n panels.push(this.question.currentPanel);\n }\n return panels;\n },\n enumerable: false,\n configurable: true\n });\n PanelDynamic.prototype.addPanelClick = function () {\n this.question.addPanel();\n };\n PanelDynamic.prototype.getButtonAddCss = function (question) {\n var btnClasses = question.cssClasses.button + \" \" + question.cssClasses.buttonAdd;\n if (this.question.renderMode === \"list\") {\n btnClasses += \" \" + question.cssClasses.buttonAdd + \"--list-mode\";\n }\n return btnClasses;\n };\n PanelDynamic = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamic);\n return PanelDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamic\", PanelDynamic);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return PanelDynamicProgress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PanelDynamicProgress = /** @class */ (function (_super) {\n __extends(PanelDynamicProgress, _super);\n function PanelDynamicProgress() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(PanelDynamicProgress.prototype, \"cssClass\", {\n get: function () {\n return this.question.isProgressTopShowing\n ? this.question.cssClasses.progressTop\n : this.question.cssClasses.progressBottom;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelDynamicProgress.prototype, \"rangeMax\", {\n get: function () {\n return this.question.panelCount - 1;\n },\n enumerable: false,\n configurable: true\n });\n PanelDynamicProgress.prototype.addPanelClick = function () {\n this.question.addPanelUI();\n };\n PanelDynamicProgress.prototype.prevPanelClick = function () {\n this.question.goToPrevPanel();\n };\n PanelDynamicProgress.prototype.nextPanelClick = function () {\n this.question.goToNextPanel();\n };\n PanelDynamicProgress.prototype.changeRange = function (event) {\n this.question.currentIndex = event.target.value;\n };\n PanelDynamicProgress.prototype.getButtonAddCss = function (question) { };\n PanelDynamicProgress.prototype.getButtonPrevCss = function (question) {\n var btnClasses = question.cssClasses.buttonPrev;\n if (!question.isPrevButtonShowing) {\n btnClasses += \" \" + question.cssClasses.buttonPrev + \"--disabled\";\n }\n return btnClasses;\n };\n PanelDynamicProgress.prototype.getButtonNextCss = function (question) {\n var btnClasses = question.cssClasses.buttonNext;\n if (!question.isNextButtonShowing) {\n btnClasses += \" \" + question.cssClasses.buttonNext + \"--disabled\";\n }\n return btnClasses;\n };\n Object.defineProperty(PanelDynamicProgress.prototype, \"progress\", {\n get: function () {\n return (this.question.currentIndex / this.rangeMax) * 100 + \"%\";\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicProgress.prototype, \"question\", void 0);\n PanelDynamicProgress = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamicProgress);\n return PanelDynamicProgress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicprogress\", PanelDynamicProgress);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamicProgress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicRemove, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return PanelDynamicRemove; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PanelDynamicRemove = /** @class */ (function (_super) {\n __extends(PanelDynamicRemove, _super);\n function PanelDynamicRemove() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsedValue = false;\n return _this;\n }\n PanelDynamicRemove.prototype.mounted = function () {\n this.isCollapsed = this.panel.isCollapsed;\n var self = this;\n this.panel.registerFunctionOnPropertyValueChanged(\"state\", function (val) {\n self.isCollapsed = self.panel.isCollapsed;\n }, \"button\");\n };\n PanelDynamicRemove.prototype.beforeDestroy = function () {\n this.panel.unRegisterFunctionOnPropertyValueChanged(\"state\", \"button\");\n };\n PanelDynamicRemove.prototype.removePanelClick = function (panel) {\n if (!this.question.isInputReadOnly) {\n this.question.removePanelUI(panel);\n }\n };\n Object.defineProperty(PanelDynamicRemove.prototype, \"isCollapsed\", {\n get: function () {\n return this.isCollapsedValue;\n },\n set: function (val) {\n this.isCollapsedValue = val;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicRemove.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicRemove.prototype, \"panel\", void 0);\n PanelDynamicRemove = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamicRemove);\n return PanelDynamicRemove;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicremove\", PanelDynamicRemove);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamicRemove);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return Progress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Progress = /** @class */ (function (_super) {\n __extends(Progress, _super);\n function Progress() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Progress.prototype, \"progress\", {\n get: function () {\n return this.survey.progressValue + \"%\";\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Progress.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Progress.prototype, \"css\", void 0);\n Progress = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Progress);\n return Progress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-pages\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-questions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-correctQuestions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-requiredQuestions\", Progress);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Progress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return ProgressButtons; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ProgressButtons = /** @class */ (function (_super) {\n __extends(ProgressButtons, _super);\n function ProgressButtons() {\n var _this = _super.call(this) || this;\n _this.hasScroller = false;\n _this.updateScroller = undefined;\n _this.progressButtonsModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressButtonsModel\"](_this.survey);\n return _this;\n }\n ProgressButtons.prototype.mounted = function () {\n var _this = this;\n var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n this.updateScroller = setInterval(function () {\n _this.hasScroller =\n listContainerElement.scrollWidth > listContainerElement.offsetWidth;\n }, 100);\n };\n ProgressButtons.prototype.isListElementClickable = function (index) {\n return this.progressButtonsModel.isListElementClickable(index);\n };\n ProgressButtons.prototype.getListElementCss = function (index) {\n return this.progressButtonsModel.getListElementCss(index);\n };\n ProgressButtons.prototype.clickListElement = function (index) {\n this.progressButtonsModel.clickListElement(index);\n };\n ProgressButtons.prototype.getScrollButtonCss = function (hasScroller, isLeftScroll) {\n var scrollCss = isLeftScroll\n ? this.css.progressButtonsImageButtonLeft\n : this.css.progressButtonsImageButtonRight;\n if (!hasScroller)\n scrollCss += \" \" + this.css.progressButtonsImageButtonHidden;\n return scrollCss;\n };\n ProgressButtons.prototype.clickScrollButton = function (isLeftScroll) {\n var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n listContainerElement.scrollLeft += (isLeftScroll ? -1 : 1) * 70;\n };\n ProgressButtons.prototype.beforeDestroy = function () {\n if (typeof this.updateScroller !== \"undefined\") {\n clearInterval(this.updateScroller);\n this.updateScroller = undefined;\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ProgressButtons.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ProgressButtons.prototype, \"css\", void 0);\n ProgressButtons = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ProgressButtons);\n return ProgressButtons;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-buttons\", ProgressButtons);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProgressButtons);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return Radiogroup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Radiogroup = /** @class */ (function (_super) {\n __extends(Radiogroup, _super);\n function Radiogroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Radiogroup.prototype, \"choicesCount\", {\n get: function () {\n return this.question.visibleChoices.length - 1;\n },\n enumerable: false,\n configurable: true\n });\n Radiogroup.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n Radiogroup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Radiogroup);\n return Radiogroup;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup\", Radiogroup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Radiogroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return RadiogroupItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar RadiogroupItem = /** @class */ (function (_super) {\n __extends(RadiogroupItem, _super);\n function RadiogroupItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RadiogroupItem.prototype.getModel = function () {\n return this.item;\n };\n RadiogroupItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(item);\n };\n RadiogroupItem.prototype.getControlLabelClass = function (item) {\n return this.question.getControlLabelClass(item);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"hideLabel\", void 0);\n RadiogroupItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], RadiogroupItem);\n return RadiogroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup-item\", RadiogroupItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RadiogroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return RankingItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar RankingItem = /** @class */ (function (_super) {\n __extends(RankingItem, _super);\n function RankingItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"text\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"handleKeydown\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"cssClasses\", void 0);\n RankingItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], RankingItem);\n return RankingItem;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking-item\", RankingItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RankingItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return Ranking; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Ranking = /** @class */ (function (_super) {\n __extends(Ranking, _super);\n function Ranking() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Ranking = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Ranking);\n return Ranking;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking\", Ranking);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Ranking);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return Rating; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Rating = /** @class */ (function (_super) {\n __extends(Rating, _super);\n function Rating() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Rating.prototype.getRootClass = function (question) {\n var classes = question.cssClasses;\n if (question.isReadOnly)\n return classes.root + \" \" + classes.disabled;\n return classes.root;\n };\n Rating = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Rating);\n return Rating;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-rating\", Rating);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rating);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return Row; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Row.prototype.getModel = function () {\n return this.row;\n };\n Row.prototype.onMounted = function () {\n var _this = this;\n if (!!this.row) {\n if (!this.row.isNeedRender) {\n var rowContainerDiv = this.$el;\n setTimeout(function () {\n _this.row.startLazyRendering(rowContainerDiv);\n }, 10);\n }\n }\n };\n Row.prototype.beforeDestroy = function () {\n if (!!this.row) {\n this.row.isNeedRender = !this.row.isLazyRendering;\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"row\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"survey\", void 0);\n Row = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Row);\n return Row;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-row\", Row);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Row);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return SignaturePad; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SignaturePad = /** @class */ (function (_super) {\n __extends(SignaturePad, _super);\n function SignaturePad() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SignaturePad = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SignaturePad);\n return SignaturePad;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-signaturepad\", SignaturePad);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SignaturePad);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return SurveyStringEditor; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyStringEditor = /** @class */ (function (_super) {\n __extends(SurveyStringEditor, _super);\n function SurveyStringEditor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onInput = function (event) {\n _this.locString.text = event.target.innerText;\n };\n _this.onClick = function (event) {\n event.preventDefault();\n event.stopPropagation();\n };\n return _this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyStringEditor.prototype, \"locString\", void 0);\n SurveyStringEditor = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyStringEditor);\n return SurveyStringEditor;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].editableRenderer, SurveyStringEditor);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyStringEditor);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return SurveyStringViewer; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyStringViewer = /** @class */ (function (_super) {\n __extends(SurveyStringViewer, _super);\n function SurveyStringViewer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyStringViewer.prototype, \"locString\", void 0);\n SurveyStringViewer = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyStringViewer);\n return SurveyStringViewer;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].defaultRenderer, SurveyStringViewer);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyStringViewer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return SurveyString; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyString = /** @class */ (function (_super) {\n __extends(SurveyString, _super);\n function SurveyString() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyString.prototype, \"locString\", void 0);\n SurveyString = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyString);\n return SurveyString;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-string\", SurveyString);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyString);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return Survey; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar Survey = /** @class */ (function (_super) {\n __extends(Survey, _super);\n function Survey() {\n var _this = _super.call(this) || this;\n _this.currentPageId = 1;\n return _this;\n }\n Object.defineProperty(Survey.prototype, \"pageId\", {\n get: function () {\n return \"page\" + this.currentPageId.toString();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"navId\", {\n get: function () {\n return \"nav\" + this.currentPageId.toString();\n },\n enumerable: false,\n configurable: true\n });\n Survey.prototype.forceUpdate = function () {\n this.$forceUpdate();\n this.currentPageId++;\n };\n Survey.prototype.getModel = function () {\n return this.survey;\n };\n Survey.prototype.onPropertyChanged = function (value, oldValue) {\n this.onCreated();\n this.surveyOnMounted();\n };\n Survey.prototype.onMounted = function () {\n this.surveyOnMounted();\n };\n Survey.prototype.surveyOnMounted = function () {\n var _this = this;\n if (!this.survey)\n return;\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(this.survey, \"currentPage\", this.survey.currentPage);\n this.survey.onCurrentPageChanged.add(function (sender, options) {\n _this.currentPageId++;\n });\n this.survey.onPageVisibleChanged.add(function (sender, options) {\n _this.currentPageId++;\n });\n var el = this.$el;\n if (el)\n this.survey.doAfterRenderSurvey(el);\n this.survey.renderCallback = this.forceUpdate;\n this.survey.startTimerFromUI();\n };\n Survey.prototype.beforeDestroy = function () {\n this.survey.stopTimer();\n this.survey.renderCallback = undefined;\n };\n Object.defineProperty(Survey.prototype, \"hasTitle\", {\n get: function () {\n return !!this.survey.title && this.survey.showTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"hasCompletedPage\", {\n get: function () {\n return this.survey.showCompletedPage && this.survey.state === \"completed\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"css\", {\n get: function () {\n return this.survey.css;\n },\n enumerable: false,\n configurable: true\n });\n Survey.prototype.getCompletedPageClasses = function () {\n var css = this.css;\n return css.body + \" \" + css.completedPage;\n };\n Survey.prototype.getProcessedCompletedHtml = function () {\n if (!this.hasCompletedPage)\n return \"\";\n if (!this.processedCompletedHtmlValue) {\n this.processedCompletedHtmlValue = this.survey.processedCompletedHtml;\n }\n return this.processedCompletedHtmlValue;\n };\n Survey.prototype.getCompletedStateClasses = function () {\n return this.css.saveData[this.survey.completedState];\n };\n Survey.prototype.start = function () {\n this.survey.start();\n };\n Survey.prototype.doTrySaveAgain = function () {\n this.survey.doComplete();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Survey.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"survey\")\n ], Survey.prototype, \"onPropertyChanged\", null);\n Survey = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Survey);\n return Survey;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\n// TODO: make this functionality available via surveyCss in all examples\nObject.defineProperty(Survey, \"cssType\", {\n get: function () {\n return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"surveyCss\"].currentType;\n },\n set: function (newType) {\n survey_core__WEBPACK_IMPORTED_MODULE_2__[\"StylesManager\"].applyTheme(newType);\n },\n enumerable: true,\n configurable: false,\n});\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey\", Survey);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Survey);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return QuestionText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar QuestionText = /** @class */ (function (_super) {\n __extends(QuestionText, _super);\n function QuestionText() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionText.prototype.change = function (event) {\n this.question.value = event.target.value;\n };\n QuestionText.prototype.keyup = function (event) {\n if (!this.question.isInputTextUpdate)\n return;\n this.question.value = event.target.value;\n };\n Object.defineProperty(QuestionText.prototype, \"inputStyle\", {\n get: function () {\n var style = {};\n if (!!this.question.inputWidth) {\n style.width = this.question.inputWidth;\n }\n return style;\n },\n enumerable: false,\n configurable: true\n });\n QuestionText = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], QuestionText);\n return QuestionText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-text\", QuestionText);\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return TimerPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar TimerPanel = /** @class */ (function (_super) {\n __extends(TimerPanel, _super);\n function TimerPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(TimerPanel.prototype, \"text\", {\n get: function () {\n return this.survey.timerInfoText;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TimerPanel.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TimerPanel.prototype, \"css\", void 0);\n TimerPanel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], TimerPanel);\n return TimerPanel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-timerpanel\", TimerPanel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TimerPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/titlecontent.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return TitleContent; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar TitleContent = /** @class */ (function (_super) {\n __extends(TitleContent, _super);\n function TitleContent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], TitleContent.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], TitleContent.prototype, \"css\", void 0);\n TitleContent = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], TitleContent);\n return TitleContent;\n}(vue__WEBPACK_IMPORTED_MODULE_1___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"survey-question-title-content\", TitleContent);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TitleContent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/window.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Window, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return Window; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _surveyModel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyModel */ \"./src/vue/surveyModel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Window = /** @class */ (function (_super) {\n __extends(Window, _super);\n function Window() {\n var _this = _super.call(this) || this;\n if (_this.window) {\n _this.surveyWindow = _this.window;\n }\n else {\n _this.surveyWindow = new _surveyModel__WEBPACK_IMPORTED_MODULE_2__[\"VueSurveyWindowModel\"](null, _this.survey);\n }\n if (_this.isexpanded !== undefined) {\n _this.surveyWindow.isExpanded = _this.isexpanded;\n }\n if (_this.isExpanded !== undefined) {\n _this.surveyWindow.isExpanded = _this.isExpanded;\n }\n if (_this.closeOnCompleteTimeout !== undefined) {\n _this.surveyWindow.closeOnCompleteTimeout = _this.closeOnCompleteTimeout;\n }\n _this.surveyWindow.isShowing = true;\n var self = _this;\n _this.surveyWindow.closeWindowOnCompleteCallback = function () {\n self.doHide();\n };\n return _this;\n }\n Object.defineProperty(Window.prototype, \"windowSurvey\", {\n get: function () {\n return this.surveyWindow.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"expandedCss\", {\n get: function () {\n return this.surveyWindow.isExpanded\n ? this.css.window.header.buttonCollapsed\n : this.css.window.header.buttonExpanded;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"isExpandedSurvey\", {\n get: function () {\n return this.surveyWindow.isExpanded;\n },\n set: function (val) {\n this.surveyWindow.isExpanded = val;\n },\n enumerable: false,\n configurable: true\n });\n Window.prototype.doExpand = function () {\n this.surveyWindow.isExpanded = !this.surveyWindow.isExpanded;\n };\n Window.prototype.doHide = function () {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(this.surveyWindow, \"isShowing\", false);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"window\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"isExpanded\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"isexpanded\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"closeOnCompleteTimeout\", void 0);\n Window = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Window);\n return Window;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-window\", Window);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Window);\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/vue-class-component/dist/vue-class-component.esm.js ***!\n \\**************************************************************************/\n/*! exports provided: default, createDecorator, mixins */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createDecorator\", function() { return createDecorator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mixins\", function() { return mixins; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * vue-class-component v7.2.6\n * (c) 2015-present Evan You\n * @license MIT\n */\n\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\n// The rational behind the verbose Reflect-feature check below is the fact that there are polyfills\n// which add an implementation for Reflect.defineMetadata but not for Reflect.getOwnMetadataKeys.\n// Without this check consumers will encounter hard to track down runtime errors.\nfunction reflectionIsSupported() {\n return typeof Reflect !== 'undefined' && Reflect.defineMetadata && Reflect.getOwnMetadataKeys;\n}\nfunction copyReflectionMetadata(to, from) {\n forwardMetadata(to, from);\n Object.getOwnPropertyNames(from.prototype).forEach(function (key) {\n forwardMetadata(to.prototype, from.prototype, key);\n });\n Object.getOwnPropertyNames(from).forEach(function (key) {\n forwardMetadata(to, from, key);\n });\n}\n\nfunction forwardMetadata(to, from, propertyKey) {\n var metaKeys = propertyKey ? Reflect.getOwnMetadataKeys(from, propertyKey) : Reflect.getOwnMetadataKeys(from);\n metaKeys.forEach(function (metaKey) {\n var metadata = propertyKey ? Reflect.getOwnMetadata(metaKey, from, propertyKey) : Reflect.getOwnMetadata(metaKey, from);\n\n if (propertyKey) {\n Reflect.defineMetadata(metaKey, metadata, to, propertyKey);\n } else {\n Reflect.defineMetadata(metaKey, metadata, to);\n }\n });\n}\n\nvar fakeArray = {\n __proto__: []\n};\nvar hasProto = fakeArray instanceof Array;\nfunction createDecorator(factory) {\n return function (target, key, index) {\n var Ctor = typeof target === 'function' ? target : target.constructor;\n\n if (!Ctor.__decorators__) {\n Ctor.__decorators__ = [];\n }\n\n if (typeof index !== 'number') {\n index = undefined;\n }\n\n Ctor.__decorators__.push(function (options) {\n return factory(options, key, index);\n });\n };\n}\nfunction mixins() {\n for (var _len = arguments.length, Ctors = new Array(_len), _key = 0; _key < _len; _key++) {\n Ctors[_key] = arguments[_key];\n }\n\n return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({\n mixins: Ctors\n });\n}\nfunction isPrimitive(value) {\n var type = _typeof(value);\n\n return value == null || type !== 'object' && type !== 'function';\n}\nfunction warn(message) {\n if (typeof console !== 'undefined') {\n console.warn('[vue-class-component] ' + message);\n }\n}\n\nfunction collectDataFromConstructor(vm, Component) {\n // override _init to prevent to init as Vue instance\n var originalInit = Component.prototype._init;\n\n Component.prototype._init = function () {\n var _this = this;\n\n // proxy to actual vm\n var keys = Object.getOwnPropertyNames(vm); // 2.2.0 compat (props are no longer exposed as self properties)\n\n if (vm.$options.props) {\n for (var key in vm.$options.props) {\n if (!vm.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n }\n\n keys.forEach(function (key) {\n Object.defineProperty(_this, key, {\n get: function get() {\n return vm[key];\n },\n set: function set(value) {\n vm[key] = value;\n },\n configurable: true\n });\n });\n }; // should be acquired class property values\n\n\n var data = new Component(); // restore original _init to avoid memory leak (#209)\n\n Component.prototype._init = originalInit; // create plain data object\n\n var plainData = {};\n Object.keys(data).forEach(function (key) {\n if (data[key] !== undefined) {\n plainData[key] = data[key];\n }\n });\n\n if (true) {\n if (!(Component.prototype instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a) && Object.keys(plainData).length > 0) {\n warn('Component class must inherit Vue or its descendant class ' + 'when class property is used.');\n }\n }\n\n return plainData;\n}\n\nvar $internalHooks = ['data', 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeDestroy', 'destroyed', 'beforeUpdate', 'updated', 'activated', 'deactivated', 'render', 'errorCaptured', 'serverPrefetch' // 2.6\n];\nfunction componentFactory(Component) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options.name = options.name || Component._componentTag || Component.name; // prototype props.\n\n var proto = Component.prototype;\n Object.getOwnPropertyNames(proto).forEach(function (key) {\n if (key === 'constructor') {\n return;\n } // hooks\n\n\n if ($internalHooks.indexOf(key) > -1) {\n options[key] = proto[key];\n return;\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(proto, key);\n\n if (descriptor.value !== void 0) {\n // methods\n if (typeof descriptor.value === 'function') {\n (options.methods || (options.methods = {}))[key] = descriptor.value;\n } else {\n // typescript decorated data\n (options.mixins || (options.mixins = [])).push({\n data: function data() {\n return _defineProperty({}, key, descriptor.value);\n }\n });\n }\n } else if (descriptor.get || descriptor.set) {\n // computed properties\n (options.computed || (options.computed = {}))[key] = {\n get: descriptor.get,\n set: descriptor.set\n };\n }\n });\n (options.mixins || (options.mixins = [])).push({\n data: function data() {\n return collectDataFromConstructor(this, Component);\n }\n }); // decorate options\n\n var decorators = Component.__decorators__;\n\n if (decorators) {\n decorators.forEach(function (fn) {\n return fn(options);\n });\n delete Component.__decorators__;\n } // find super\n\n\n var superProto = Object.getPrototypeOf(Component.prototype);\n var Super = superProto instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a ? superProto.constructor : vue__WEBPACK_IMPORTED_MODULE_0___default.a;\n var Extended = Super.extend(options);\n forwardStaticMembers(Extended, Component, Super);\n\n if (reflectionIsSupported()) {\n copyReflectionMetadata(Extended, Component);\n }\n\n return Extended;\n}\nvar reservedPropertyNames = [// Unique id\n'cid', // Super Vue constructor\n'super', // Component options that will be used by the component\n'options', 'superOptions', 'extendOptions', 'sealedOptions', // Private assets\n'component', 'directive', 'filter'];\nvar shouldIgnore = {\n prototype: true,\n arguments: true,\n callee: true,\n caller: true\n};\n\nfunction forwardStaticMembers(Extended, Original, Super) {\n // We have to use getOwnPropertyNames since Babel registers methods as non-enumerable\n Object.getOwnPropertyNames(Original).forEach(function (key) {\n // Skip the properties that should not be overwritten\n if (shouldIgnore[key]) {\n return;\n } // Some browsers does not allow reconfigure built-in properties\n\n\n var extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key);\n\n if (extendedDescriptor && !extendedDescriptor.configurable) {\n return;\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(Original, key); // If the user agent does not support `__proto__` or its family (IE <= 10),\n // the sub class properties may be inherited properties from the super class in TypeScript.\n // We need to exclude such properties to prevent to overwrite\n // the component options object which stored on the extended constructor (See #192).\n // If the value is a referenced value (object or function),\n // we can check equality of them and exclude it if they have the same reference.\n // If it is a primitive value, it will be forwarded for safety.\n\n if (!hasProto) {\n // Only `cid` is explicitly exluded from property forwarding\n // because we cannot detect whether it is a inherited property or not\n // on the no `__proto__` environment even though the property is reserved.\n if (key === 'cid') {\n return;\n }\n\n var superDescriptor = Object.getOwnPropertyDescriptor(Super, key);\n\n if (!isPrimitive(descriptor.value) && superDescriptor && superDescriptor.value === descriptor.value) {\n return;\n }\n } // Warn if the users manually declare reserved properties\n\n\n if ( true && reservedPropertyNames.indexOf(key) >= 0) {\n warn(\"Static property name '\".concat(key, \"' declared on class '\").concat(Original.name, \"' \") + 'conflicts with reserved property name of Vue internal. ' + 'It may cause unexpected behavior of the component. Consider renaming the property.');\n }\n\n Object.defineProperty(Extended, key, descriptor);\n });\n}\n\nfunction Component(options) {\n if (typeof options === 'function') {\n return componentFactory(options);\n }\n\n return function (Component) {\n return componentFactory(Component, options);\n };\n}\n\nComponent.registerHooks = function registerHooks(keys) {\n $internalHooks.push.apply($internalHooks, _toConsumableArray(keys));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _c(\"label\", { class: _vm.itemClass }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.checkedValue,\n expression: \"question.checkedValue\"\n }\n ],\n class: _vm.question.cssClasses.control,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId,\n disabled: _vm.question.isInputReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: {\n value: _vm.question.checkedValue,\n indeterminate: _vm.question.isIndeterminate,\n checked: Array.isArray(_vm.question.checkedValue)\n ? _vm._i(_vm.question.checkedValue, _vm.question.checkedValue) > -1\n : _vm.question.checkedValue\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.checkedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.question.checkedValue,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"checkedValue\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"checkedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"checkedValue\", $$c)\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"0 0 24 24\" }\n },\n [\n _c(\"rect\", {\n class: _vm.question.cssClasses.uncheckedPath,\n attrs: { x: \"5\", y: \"10\", width: \"14\", height: \"4\" }\n }),\n _vm._v(\" \"),\n _c(\"polygon\", {\n class: _vm.question.cssClasses.checkedPath,\n attrs: {\n points:\n \"19,10 14,10 14,5 10,5 10,10 5,10 5,14 10,14 10,19 14,19 14,14 19,14 \"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n class: _vm.question.cssClasses.indeterminatePath,\n attrs: {\n d:\n \"M22,0H2C0.9,0,0,0.9,0,2v20c0,1.1,0.9,2,2,2h20c1.1,0,2-0.9,2-2V2C24,0.9,23.1,0,22,0z M21,18L6,3h15V18z M3,6l15,15H3V6z\"\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" })\n ]),\n _vm._v(\" \"),\n _vm.question.titleLocation === \"hidden\"\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.label },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDisplayLabel }\n })\n ],\n 1\n )\n : _vm._e()\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _c(\"label\", { class: _vm.itemClass }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.checkedValue,\n expression: \"question.checkedValue\"\n }\n ],\n class: _vm.question.cssClasses.control,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId,\n disabled: _vm.question.isInputReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: {\n value: _vm.question.checkedValue,\n indeterminate: _vm.question.isIndeterminate,\n checked: Array.isArray(_vm.question.checkedValue)\n ? _vm._i(_vm.question.checkedValue, _vm.question.checkedValue) > -1\n : _vm.question.checkedValue\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.checkedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.question.checkedValue,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"checkedValue\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"checkedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"checkedValue\", $$c)\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.getLabelClass(false),\n on: {\n click: function($event) {\n return _vm.onLabelClick($event, false)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locLabelFalse }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.cssClasses.switch,\n on: {\n click: function($event) {\n return _vm.onSwitchClick($event)\n }\n }\n },\n [_c(\"span\", { class: _vm.question.cssClasses.slider })]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.getLabelClass(true),\n on: {\n click: function($event) {\n return _vm.onLabelClick($event, true)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locLabelTrue }\n })\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root, attrs: { role: \"group\" } },\n [\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return [\n _c(\"sv-button-group-item\", {\n key: _vm.question.inputId + \"_\" + index,\n attrs: { item: item, question: _vm.question, index: index }\n })\n ]\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n class: _vm.model.css.label,\n attrs: { title: _vm.model.caption.renderedHtml }\n },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model.question.renderedValue,\n expression: \"model.question.renderedValue\"\n }\n ],\n class: _vm.model.css.control,\n attrs: {\n type: \"radio\",\n name: _vm.model.name,\n id: _vm.model.id,\n \"aria-required\": _vm.model.isRequired,\n \"aria-label\": _vm.model.caption.renderedHtml,\n role: \"radio\",\n \"aria-invalid\": _vm.model.hasErrors,\n \"aria-describedby\": _vm.model.describeBy,\n disabled: _vm.model.readOnly\n },\n domProps: {\n value: _vm.model.value,\n checked: _vm._q(_vm.model.question.renderedValue, _vm.model.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(\n _vm.model.question,\n \"renderedValue\",\n _vm.model.value\n )\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.model.css.decorator },\n [\n !!_vm.model.iconName\n ? _c(\"sv-svg-icon\", {\n class: _vm.model.css.icon,\n attrs: {\n iconName: _vm.model.iconName,\n size: _vm.model.iconSize\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.model.showCaption\n ? _c(\n \"span\",\n { class: _vm.model.css.caption },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.model.caption }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return !_vm.question.hasColumns\n ? _c(\"survey-checkbox-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: { question: _vm.question, item: item, index: index }\n })\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.columns, function(column, colIndex) {\n return _vm.question.hasColumns\n ? _c(\n \"div\",\n { class: _vm.question.getColumnClass() },\n _vm._l(column, function(item, index) {\n return _c(\"survey-checkbox-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: {\n question: _vm.question,\n item: item,\n index: \"\" + colIndex + index\n }\n })\n }),\n 1\n )\n : _vm._e()\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"label\", { class: _vm.getLabelClass(_vm.item) }, [\n _vm.item == _vm.question.selectAllItem\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.isAllSelected,\n expression: \"isAllSelected\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isInputReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.isAllSelected,\n checked: Array.isArray(_vm.isAllSelected)\n ? _vm._i(_vm.isAllSelected, _vm.isAllSelected) > -1\n : _vm.isAllSelected\n },\n on: {\n change: function($event) {\n var $$a = _vm.isAllSelected,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.isAllSelected,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.isAllSelected = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.isAllSelected = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.isAllSelected = $$c\n }\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item != _vm.question.selectAllItem\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isInputReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.item.value,\n checked: Array.isArray(_vm.question.renderedValue)\n ? _vm._i(_vm.question.renderedValue, _vm.item.value) > -1\n : _vm.question.renderedValue\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.renderedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.item.value,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $$a.concat([$$v])\n )\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"renderedValue\", $$c)\n }\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"0 0 24 24\" }\n },\n [_c(\"path\", { attrs: { d: \"M5,13l2-2l3,3l7-7l2,2l-9,9L5,13z\" } })]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" })\n ]),\n _vm._v(\" \"),\n !_vm.hideLabel\n ? _c(\n \"span\",\n {\n class: _vm.question.cssClasses.controlLabel,\n attrs: { title: _vm.item.locText.text }\n },\n [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.item.value == _vm.question.otherItem.value\n ? _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.question.hasOther &&\n _vm.question.renderedValue &&\n _vm.question.isOtherSelected,\n expression:\n \"\\n question.hasOther && question.renderedValue && question.isOtherSelected\\n \"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n !_vm.question.isReadOnlyRenderDiv()\n ? _c(\"textarea\", {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.root\n : \"panel-comment-root\",\n attrs: {\n type: \"text\",\n readonly: _vm.question.isInputReadOnly,\n disabled: _vm.question.isInputReadOnly,\n id: _vm.question.inputId,\n maxlength: _vm.question.getMaxLength(),\n cols: _vm.question.cols,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n rows: _vm.question.rows,\n placeholder: _vm.question.renderedPlaceHolder,\n \"aria-required\": _vm.question.isRequired,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: { value: _vm.question.value },\n on: { change: _vm.change, keyup: _vm.keyup }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnlyRenderDiv()\n ? _c(\"div\", [_vm._v(_vm._s(_vm.question.value))])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!*********************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n \\*********************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"sv-action-bar-item\",\n class: [\n { \"sv-action-bar-item--active\": _vm.item.isActive },\n _vm.item.innerCss\n ],\n attrs: {\n disabled: _vm.item.enabled !== undefined && _vm.item.enabled,\n title: _vm.item.tooltip || _vm.item.title\n },\n on: {\n click: function() {\n _vm.item.action()\n }\n }\n },\n [\n _vm.item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-action-bar-item__icon\",\n attrs: { iconName: _vm.item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\n \"span\",\n {\n staticClass: \"sv-action-bar-item__title\",\n class: {\n \"sv-action-bar-item__title--with-icon\": !!_vm.item.iconName\n }\n },\n [_vm._v(_vm._s(_vm.item.title))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"sv-popup\", { attrs: { model: _vm.item.popupModel } })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n \\************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"sv-action-bar-item\",\n class: [\n { \"sv-action-bar-item--active\": _vm.item.isActive },\n _vm.item.innerCss\n ],\n attrs: {\n type: \"button\",\n disabled: _vm.item.enabled !== undefined && !_vm.item.enabled,\n title: _vm.item.tooltip || _vm.item.title,\n tabindex: _vm.item.disableTabStop ? -1 : undefined\n },\n on: {\n click: function() {\n _vm.item.action()\n }\n }\n },\n [\n _vm.item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-action-bar-item__icon\",\n attrs: { iconName: _vm.item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\n \"span\",\n {\n staticClass: \"sv-action-bar-item__title\",\n class: {\n \"sv-action-bar-item__title--with-icon\": !!_vm.item.iconName\n }\n },\n [_vm._v(_vm._s(_vm.item.title))]\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!*****************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n \\*****************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n staticClass: \"sv-action-bar-separator\",\n class: _vm.innerCss\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.model.hasItems\n ? _c(\n \"div\",\n {\n ref: \"container\",\n staticClass: \"sv-action-bar\",\n on: {\n click: function(event) {\n event.stopPropagation()\n }\n }\n },\n _vm._l(_vm.model.actions, function(item) {\n return _c(\"sv-action\", { key: item.id, attrs: { item: item } })\n }),\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632& ***!\n \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.item.visible || _vm.item.visible === undefined,\n expression: \"item.visible || item.visible === undefined\"\n }\n ],\n staticClass: \"sv-action\",\n class: { \"sv-action--hidden\": !_vm.item.isVisible }\n },\n [\n _vm.item.needSeparator ? _c(\"sv-action-bar-separator\") : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(), {\n tag: \"component\",\n attrs: { item: _vm.item }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\":\n/*!*************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc& ***!\n \\*************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"survey-question-title-content\", {\n attrs: { element: _vm.element, css: _vm.css }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIcon,\n expression: \"showIcon\"\n }\n ],\n class: _vm.getIconCss(_vm.isCollapsed),\n attrs: {\n tabindex: \"0\",\n \"aria-expanded\": _vm.isCollapsed ? \"false\" : \"true\",\n \"aria-controls\": !_vm.isCollapsed ? _vm.element.contentId : null\n },\n on: {\n keyup: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.changeExpanded.apply(null, arguments)\n }\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ul\",\n {\n staticClass: \"sv-list\",\n on: {\n mousedown: function(data, e) {\n e.preventDefault()\n }\n }\n },\n _vm._l(_vm.model.items, function(item) {\n return _c(\n \"li\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: item.visible === undefined || item.visible,\n expression: \"item.visible === undefined || item.visible\"\n }\n ],\n key: item.id,\n staticClass: \"sv-list__item\",\n class: _vm.model.getItemClass(item),\n style: { paddingLeft: _vm.model.getItemIndent(item) },\n on: {\n click: function($event) {\n return _vm.model.selectItem(item)\n }\n }\n },\n [\n item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-list__item-icon\",\n attrs: { iconName: item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(item.title))])\n ],\n 1\n )\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n class: _vm.question.getDetailPanelButtonCss(_vm.row),\n attrs: {\n type: \"button\",\n \"aria-expanded\": _vm.question.getIsDetailPanelShowing(_vm.row)\n ? \"true\"\n : \"false\",\n \"aria-controls\": _vm.question.getIsDetailPanelShowing(_vm.row)\n ? _vm.row.detailPanelId\n : null\n },\n on: {\n click: function() {\n return _vm.row.showHideDetailPanelClick()\n }\n }\n },\n [_c(\"span\", { class: _vm.question.getDetailPanelIconCss(_vm.row) })]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\n/*!******************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\n \\******************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { class: _vm.question.cssClasses.iconDrag })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonRemove,\n attrs: { type: \"button\", disabled: _vm.question.isInputReadOnly },\n on: {\n click: function() {\n return _vm.question.removeRowUI(_vm.row)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locRemoveRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconRemove })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.model.isVisible,\n expression: \"model.isVisible\"\n }\n ],\n staticClass: \"sv-popup\",\n class: _vm.model.styleClass,\n attrs: { tabindex: \"-1\" },\n on: {\n keydown: function(event) {\n _vm.model.onKeyDown(event)\n },\n click: function() {\n _vm.model.clickOutside()\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"sv-popup__container\",\n style: { left: _vm.model.left, top: _vm.model.top },\n on: { click: _vm.clickInside }\n },\n [\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.model.showPointer,\n expression: \"model.showPointer\"\n }\n ],\n staticClass: \"sv-popup__pointer\",\n style: {\n left: _vm.model.pointerTarget.left,\n top: _vm.model.pointerTarget.top\n }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"sv-popup__scrolling-content\" }, [\n _c(\"div\", { staticClass: \"sv-popup__header\" }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"sv-popup__content\" },\n [\n _c(\n _vm.model.contentComponentName,\n _vm._b(\n { tag: \"component\" },\n \"component\",\n _vm.model.contentComponentData,\n false\n )\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.model.isModal\n ? _c(\"div\", { staticClass: \"sv-popup__footer\" }, [\n _c(\n \"button\",\n {\n staticClass:\n \"sv-popup__footer-item sv-popup__button sv-popup__button--cancel\",\n on: {\n click: function() {\n _vm.model.cancel()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.model.cancelButtonText) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass:\n \"sv-popup__footer-item sv-popup__button sv-popup__button--cancel\",\n on: {\n click: function() {\n _vm.model.apply()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.model.applyButtonText) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!*********************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n \\*********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n { ref: \"svgIcon\", staticClass: \"sv-svg-icon\", attrs: { role: \"img\" } },\n [_c(\"use\")]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\":\n/*!*************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec& ***!\n \\*************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"sv-title-actions\" },\n [\n _c(\n \"span\",\n { staticClass: \"sv-title-actions__title\" },\n [\n _vm.element.isPage\n ? _c(\"survey-string\", {\n attrs: { locString: _vm.element.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPage\n ? _c(\"survey-question-title-content\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sv-action-bar\", {\n staticClass: \"sv-title-actions__bar\",\n attrs: { model: _vm.toolbar }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"survey-panel\", {\n attrs: { question: _vm.contentPanel, css: _vm.css }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(_vm.getComponentName(_vm.contentQuestion), {\n tag: \"component\",\n attrs: { question: _vm.contentQuestion, css: _vm.css }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _vm.hasHtml\n ? _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.customHtml) } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasDefaultRender\n ? _c(_vm.componentName, {\n tag: \"component\",\n attrs: { question: _vm.question, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root },\n [\n !_vm.question.isReadOnly\n ? _c(\"div\", { class: _vm.question.cssClasses.selectWrapper }, [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.getControlClass(),\n attrs: {\n id: _vm.question.inputId,\n autocomplete: _vm.question.autoComplete,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null,\n \"aria-required\": _vm.question.isRequired,\n required: _vm.question.isRequired\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n )\n }\n }\n },\n [\n _vm.question.showOptionsCaption\n ? _c(\"option\", { domProps: { value: undefined } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.question.optionsCaption) +\n \"\\n \"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item) {\n return _c(\n \"option\",\n {\n attrs: { disabled: !item.isEnabled },\n domProps: { value: item.value }\n },\n [_vm._v(\"\\n \" + _vm._s(item.text) + \"\\n \")]\n )\n })\n ],\n 2\n )\n ])\n : _c(\n \"div\",\n {\n class: _vm.question.getControlClass(),\n attrs: { disabled: \"\", id: _vm.question.inputId }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isOtherSelected\n ? _vm.question.otherText\n : _vm.question.displayValue\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isOtherSelected,\n expression: \"isOtherSelected\"\n }\n ],\n attrs: { question: _vm.question }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.getRootClass(_vm.element) },\n [\n !_vm.element.isPanel && _vm.element.hasTitleOnLeftTop\n ? _c(\"survey-element-header\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.element.isPanel || !_vm.element.isCollapsed,\n expression: \"element.isPanel || !element.isCollapsed\"\n }\n ],\n class: _vm.getContentClass(_vm.element)\n },\n [\n !_vm.element.isPanel && _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(_vm.element), {\n tag: \"component\",\n attrs: { question: _vm.element, css: _vm.css }\n }),\n _vm._v(\" \"),\n _vm.element.hasComment\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.formGroup },\n [\n _c(\"div\", [_vm._v(_vm._s(_vm.element.commentText))]),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n attrs: {\n commentClass: _vm.css.comment,\n question: _vm.element\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPanel && _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"bottom\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPanel && _vm.element.hasDescriptionUnderInput\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.descriptionUnderInput },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.element.locDescription }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.element.isPanel && _vm.element.hasTitleOnBottom\n ? _c(\"survey-element-header\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: _vm.getHeaderClass(_vm.element),\n on: { click: _vm.clickTitleFunction }\n },\n [\n _vm.element.hasTitle\n ? _c(\n \"h5\",\n {\n class: _vm.getTitleClass(_vm.element),\n attrs: {\n \"aria-label\": _vm.element.locTitle.renderedHtml,\n id: _vm.element.ariaTitleId,\n tabindex: _vm.element.titleTabIndex,\n \"aria-expanded\": _vm.element.titleAriaExpanded\n },\n on: {\n click: function() {\n return _vm.element.toggleState()\n },\n keyup: function($event) {\n _vm.keyup($event)\n }\n }\n },\n [\n _c(_vm.element.getTitleComponentName(), {\n tag: \"component\",\n attrs: { element: _vm.element, css: _vm.css }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.hasDescriptionUnderTitle\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.element.locDescription }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasVisibleErrors,\n expression: \"question.hasVisibleErrors\"\n }\n ],\n class: _vm.classes,\n attrs: {\n role: \"alert\",\n \"aria-live\": \"polite\",\n id: _vm.question.id + \"_errors\"\n }\n },\n _vm._l(_vm.question.errors, function(error) {\n return _c(\"div\", [\n _c(\"span\", {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.error.icon\n : \"panel-error-icon\",\n attrs: { \"aria-hidden\": \"true\" }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.error.item\n : \"panel-error-item\"\n },\n [_c(\"survey-string\", { attrs: { locString: error.locText } })],\n 1\n )\n ])\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.text }, [\n _vm._v(_vm._s(_vm.question.displayValue))\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n !_vm.question.isReadOnly\n ? _c(\"input\", {\n class: _vm.question.cssClasses.fileInput,\n attrs: {\n type: \"file\",\n id: _vm.question.inputId,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null,\n multiple: _vm.question.allowMultiple ? \"multiple\" : undefined,\n title: _vm.question.inputTitle,\n accept: _vm.question.acceptedTypes\n },\n on: { change: _vm.doChange }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnly\n ? _c(\"input\", {\n class: _vm.getPlaceholderClass(),\n staticStyle: { color: \"transparent\" },\n attrs: { type: \"file\", disabled: \"\", placeholder: _vm.question.title }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.cssClasses.fileDecorator,\n on: { drop: _vm.onDrop, dragover: _vm.onDragOver }\n },\n [\n _c(\"div\", { class: _vm.question.cssClasses.wrapper }, [\n _c(\n \"label\",\n {\n class:\n _vm.question.cssClasses.chooseFile +\n (_vm.question.isReadOnly\n ? \" \" + _vm.question.cssClasses.controlDisabled\n : \"\"),\n attrs: {\n role: \"button\",\n for: _vm.question.inputId,\n \"aria-label\": _vm.question.chooseButtonCaption\n }\n },\n [_vm._v(_vm._s(_vm.question.chooseButtonCaption))]\n ),\n _vm._v(\" \"),\n _vm.question.isEmpty()\n ? _c(\"span\", { class: _vm.question.cssClasses.noFileChosen }, [\n _vm._v(_vm._s(_vm.question.noFileChosenCaption))\n ])\n : _vm._e()\n ])\n ]\n ),\n _vm._v(\" \"),\n !_vm.question.isReadOnly && !_vm.question.isEmpty()\n ? _c(\n \"button\",\n {\n class: _vm.question.cssClasses.removeButton,\n attrs: { type: \"button\" },\n on: { click: _vm.doClean }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.question.cleanButtonCaption) + \"\\n \")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.isEmpty()\n ? _c(\n \"div\",\n _vm._l(_vm.question.previewValue, function(val, index) {\n return _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: val,\n expression: \"val\"\n }\n ],\n key: _vm.question.inputId + \"_\" + index,\n class: _vm.question.cssClasses.preview\n },\n [\n val.name\n ? _c(\"div\", { class: _vm.question.cssClasses.fileSign }, [\n _c(\n \"a\",\n {\n attrs: {\n href: val.content,\n title: val.name,\n download: val.name,\n width: _vm.question.imageWidth\n },\n on: {\n click: function($event) {\n return _vm.doDownloadFile($event, val)\n }\n }\n },\n [_vm._v(_vm._s(val.name))]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.canPreviewImage(val)\n ? _c(\"img\", {\n attrs: {\n src: val.content,\n height: _vm.question.imageHeight,\n width: _vm.question.imageWidth,\n alt: \"File preview\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n val.name && !_vm.question.isReadOnly\n ? _c(\"div\", [\n _c(\n \"span\",\n {\n class: _vm.question.cssClasses.removeFile,\n on: {\n click: function($event) {\n return _vm.doRemoveFile(val)\n }\n }\n },\n [_vm._v(_vm._s(_vm.question.removeFileCaption))]\n ),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.removeFileSvg,\n attrs: { viewBox: \"0 0 16 16\" },\n on: {\n click: function($event) {\n return _vm.doRemoveFile(val)\n }\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M11,10l-1,1L8,9l-2,2l-1-1l2-2L5,6l1-1l2,2l2-2l1,1L9,8 L11,10z\"\n }\n })\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n val.name\n ? _c(\n \"div\",\n { class: _vm.question.cssClasses.fileSignBottom },\n [\n _c(\n \"a\",\n {\n attrs: {\n href: val.content,\n title: val.name,\n download: val.name,\n width: _vm.question.imageWidth\n },\n on: {\n click: function($event) {\n return _vm.doDownloadFile($event, val)\n }\n }\n },\n [_vm._v(_vm._s(val.name))]\n )\n ]\n )\n : _vm._e()\n ]\n )\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.isReadOnly && !_vm.question.isEmpty()\n ? _c(\n \"button\",\n {\n class: _vm.question.cssClasses.removeButtonBottom,\n attrs: { type: \"button\" },\n on: { click: _vm.doClean }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.question.cleanButtonCaption) + \"\\n \")]\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.isVisible\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.container,\n style: _vm.rootStyle\n },\n [\n _c(\n \"h4\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasTitle,\n expression: \"hasTitle\"\n }\n ],\n class: _vm.getTitleStyle(),\n on: { click: _vm.changeExpanded }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locTitle }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIcon,\n expression: \"showIcon\"\n }\n ],\n class: _vm.iconCss\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDescription }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"survey-errors\", { attrs: { question: _vm.question } }),\n _vm._v(\" \"),\n _c(\n \"f-panel\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ],\n style: { paddingLeft: _vm.question.innerPaddingLeft }\n },\n [\n _c(\"survey-flowpanelelement\", {\n attrs: { node: _vm.rootNode, panel: _vm.question, css: \"css\" }\n })\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n { style: _vm.style },\n [\n !_vm.question\n ? _c(\n _vm.tagName,\n { tag: \"component\" },\n [\n _vm._l(_vm.nodes, function(elNode) {\n return _c(\"survey-flowpanelelement\", {\n key: elNode.elementId,\n attrs: { node: elNode, panel: _vm.panel, css: \"css\" }\n })\n }),\n _vm._v(\"\\n \" + _vm._s(_vm.text) + \"\\n \")\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n !!_vm.question\n ? _c(\n \"span\",\n [\n _c(\"survey-element\", {\n key: _vm.question.idValue,\n style: {\n flexBasis: _vm.question.renderWidth,\n flexGrow: 1,\n flexShrink: 1,\n width: _vm.question.renderWidth,\n minWidth: _vm.question.minWidth,\n maxWidth: _vm.question.maxWidth\n },\n attrs: {\n id: _vm.question.id,\n element: _vm.question,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.survey.renderedHasHeader\n ? _c(\"div\", { class: _vm.survey.css.header }, [\n _vm.survey.isLogoBefore\n ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n _c(\"img\", {\n class: _vm.survey.css.logoImage,\n style: { objectFit: _vm.survey.logoFit },\n attrs: {\n src: _vm.survey.locLogo.renderedHtml,\n width: _vm.survey.logoWidth\n ? _vm.survey.logoWidth\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight\n : undefined,\n alt: _vm.survey.locTitle.renderedHtml\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.renderedHasTitle\n ? _c(\n \"div\",\n {\n class: _vm.survey.css.headerText,\n style: { maxWidth: _vm.survey.titleMaxWidth }\n },\n [\n _c(\n \"h3\",\n { class: _vm.survey.css.title },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.survey.locTitle }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"h5\",\n { class: _vm.survey.css.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.survey.locDescription }\n })\n ],\n 1\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isLogoAfter\n ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n _c(\"img\", {\n class: _vm.survey.css.logoImage,\n style: { objectFit: _vm.survey.logoFit },\n attrs: {\n src: _vm.survey.locLogo.renderedHtml,\n width: _vm.survey.logoWidth\n ? _vm.survey.logoWidth\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight\n : undefined,\n alt: _vm.survey.locTitle.renderedHtml\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isLogoAfter\n ? _c(\"div\", { staticClass: \"sv-logo--right-tail\" })\n : _vm._e()\n ])\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n class: _vm.question.cssClasses.root,\n domProps: { innerHTML: _vm._s(_vm.question.locHtml.renderedHtml) }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _vm.question.contentMode === \"image\"\n ? _c(\"img\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: _vm.question.imageLink,\n alt: _vm.question.text || _vm.question.title,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.contentMode === \"video\"\n ? _c(\"embed\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: _vm.question.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return _c(\"div\", { key: item.value, class: _vm.getItemClass(item) }, [\n _c(\"label\", { class: _vm.question.cssClasses.label }, [\n _vm.question.multiSelect\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.value,\n expression: \"question.value\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n staticStyle: { display: \"none\" },\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + item.value,\n disabled: _vm.question.isInputReadOnly || !item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: item.value,\n checked: Array.isArray(_vm.question.value)\n ? _vm._i(_vm.question.value, item.value) > -1\n : _vm.question.value\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.value,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = item.value,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"value\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"value\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"value\", $$c)\n }\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.value,\n expression: \"question.value\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n staticStyle: { display: \"none\" },\n attrs: {\n type: \"radio\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + item.value,\n disabled: _vm.question.isInputReadOnly || !item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: item.value,\n checked: _vm._q(_vm.question.value, item.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(_vm.question, \"value\", item.value)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"div\", [\n _vm.question.contentMode === \"image\"\n ? _c(\"img\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: item.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined,\n alt: item.text || item.value\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.contentMode === \"video\"\n ? _c(\"embed\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: item.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.showLabel\n ? _c(\n \"span\",\n {\n class: _vm.question.cssClasses.itemText,\n attrs: { title: item.text || item.value }\n },\n [_vm._v(_vm._s(item.text || item.value))]\n )\n : _vm._e()\n ])\n ])\n ])\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.tableWrapper }, [\n _c(\"fieldset\", [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _c(\"table\", { class: _vm.question.cssClasses.root }, [\n _vm.question.showHeader\n ? _c(\"thead\", [\n _c(\n \"tr\",\n [\n _c(\"td\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasRows,\n expression: \"question.hasRows\"\n }\n ]\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return _c(\n \"th\",\n {\n key: columnIndex,\n class: _vm.question.cssClasses.headerCell\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: column.locText }\n })\n ],\n 1\n )\n })\n ],\n 2\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n _vm._l(_vm.question.visibleRows, function(row, rowIndex) {\n return _c(\n \"tr\",\n {\n key: \"row-\" + row.name + \"-\" + rowIndex,\n class: row.rowClasses\n },\n [\n _c(\n \"td\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasRows,\n expression: \"question.hasRows\"\n }\n ],\n class: _vm.question.cssClasses.cell\n },\n [_c(\"survey-string\", { attrs: { locString: row.locText } })],\n 1\n ),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return _vm.question.hasCellText\n ? _c(\n \"td\",\n {\n key: columnIndex,\n class: _vm.question.getItemClass(row, column),\n on: {\n click: function($event) {\n return _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.getCellDisplayLocText(\n row.name,\n column\n )\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return !_vm.question.hasCellText\n ? _c(\n \"td\",\n {\n key: columnIndex,\n class: _vm.question.cssClasses.cell,\n attrs: { title: column.locText.renderedHtml },\n on: {\n click: function($event) {\n return _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\n \"label\",\n { class: _vm.question.getItemClass(row, column) },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: row.value,\n expression: \"row.value\"\n }\n ],\n class: _vm.question.cssClasses.itemValue,\n attrs: {\n type: \"radio\",\n name: row.fullName,\n disabled: _vm.question.isInputReadOnly,\n id:\n _vm.question.inputId +\n \"_\" +\n row.name +\n \"_\" +\n columnIndex,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\":\n _vm.question.locTitle.renderedHtml\n },\n domProps: {\n value: column.value,\n checked: _vm._q(row.value, column.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(row, \"value\", column.value)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class:\n _vm.question.cssClasses.materialDecorator\n },\n [\n _c(\n \"svg\",\n {\n class:\n _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"-12 -12 24 24\" }\n },\n [\n _c(\"circle\", {\n attrs: { r: \"6\", cx: \"0\", cy: \"0\" }\n })\n ]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"circle\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" }),\n _vm._v(\" \"),\n _c(\"span\", { style: { display: \"none\" } }, [\n _vm._v(\n _vm._s(_vm.question.locTitle.renderedHtml)\n )\n ])\n ]\n )\n ]\n )\n : _vm._e()\n })\n ],\n 2\n )\n }),\n 0\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"td\",\n {\n class: _vm.cell.className,\n style: _vm.getCellStyle(),\n attrs: { title: _vm.getHeaders(), colspan: _vm.cell.colSpans }\n },\n [\n _vm.cell.isActionsCell\n ? _c(\"sv-action-bar\", {\n attrs: { model: _vm.cell.item.getData(), handleClick: false }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasPanel\n ? _c(_vm.getComponentName(_vm.cell.panel), {\n tag: \"component\",\n attrs: { question: _vm.cell.panel, css: _vm.question.survey.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasQuestion\n ? _c(\n \"div\",\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.cell.question, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.cell.isChoice && _vm.cell.question.isDefaultRendering()\n ? _c(_vm.getComponentName(_vm.cell.question), {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isVisible,\n expression: \"isVisible\"\n }\n ],\n tag: \"component\",\n attrs: { question: _vm.cell.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.cell.isChoice && !_vm.cell.question.isDefaultRendering()\n ? _c(_vm.cell.question.getComponentName(), {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isVisible,\n expression: \"isVisible\"\n }\n ],\n tag: \"component\",\n attrs: { question: _vm.cell.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.isChoice && !_vm.cell.isCheckbox\n ? _c(\"survey-radiogroup-item\", {\n key: _vm.cell.item.value,\n class: _vm.getItemClass(_vm.cell.item),\n attrs: {\n question: _vm.cell.question,\n item: _vm.cell.item,\n index: \"\" + _vm.cell.index,\n hideLabel: true\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.isChoice && _vm.cell.isCheckbox\n ? _c(\"survey-checkbox-item\", {\n key: _vm.cell.item.value,\n class: _vm.getItemClass(_vm.cell.item),\n attrs: {\n question: _vm.cell.question,\n item: _vm.cell.item,\n index: \"\" + _vm.cell.index,\n hideLabel: true\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.cell.question, location: \"bottom\" }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasTitle\n ? _c(\"survey-string\", { attrs: { locString: _vm.cell.locTitle } })\n : _vm._e(),\n _vm._v(\" \"),\n !!_vm.cell.requiredText\n ? _c(\"span\", [_vm._v(_vm._s(_vm.cell.requiredText))])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { style: { overflowX: _vm.question.horizontalScroll ? \"scroll\" : \"\" } },\n [_c(\"survey-matrixtable\", { attrs: { question: _vm.question } })],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { style: { overflowX: _vm.question.horizontalScroll ? \"scroll\" : \"\" } },\n [\n _vm.question.renderedTable.showAddRowOnTop\n ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.renderedTable.showTable\n ? _c(\"survey-matrixtable\", { attrs: { question: _vm.question } })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.renderedTable.showTable\n ? _c(\"div\", { class: _vm.question.cssClasses.emptyRowsSection }, [\n _c(\n \"div\",\n { class: _vm.question.cssClasses.emptyRowsText },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locEmptyRowsText }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd +\n \" \" +\n _vm.question.cssClasses.emptyRowsButton,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.renderedTable.showAddRowOnBottom\n ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"table\", { class: _vm.question.cssClasses.root }, [\n _vm.table.showHeader\n ? _c(\"thead\", [\n _c(\n \"tr\",\n _vm._l(_vm.table.headerRow.cells, function(cell) {\n return _c(\n \"th\",\n {\n key: \"header_\" + cell.id,\n class: _vm.question.cssClasses.headerCell,\n style: { minWidth: cell.minWidth, width: cell.width }\n },\n [\n cell.hasTitle\n ? _c(\"survey-string\", {\n attrs: { locString: cell.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !!cell.requiredText\n ? _c(\"span\", [_vm._v(_vm._s(cell.requiredText))])\n : _vm._e()\n ],\n 1\n )\n }),\n 0\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n _vm._l(_vm.table.rows, function(row) {\n return _c(\n \"tr\",\n { key: _vm.question.inputId + \"_\" + row.id, class: row.className },\n _vm._l(row.cells, function(cell, cellIndex) {\n return _c(\"survey-matrixcell\", {\n key: row.id + \"_\" + cellIndex,\n attrs: { cell: cell, question: _vm.question }\n })\n }),\n 1\n )\n }),\n 0\n ),\n _vm._v(\" \"),\n _vm.table.showFooter\n ? _c(\"tfoot\", [\n _c(\n \"tr\",\n _vm._l(_vm.table.footerRow.cells, function(cell, cellIndex) {\n return _c(\"survey-matrixcell\", {\n key: \"footer_\" + cellIndex,\n attrs: { cell: cell, question: _vm.question }\n })\n }),\n 1\n )\n ])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n { class: _vm.question.cssClasses.root },\n _vm._l(_vm.question.getRows(), function(row, rowindex) {\n return _c(\n \"tr\",\n {\n key: _vm.question.inputId + \"rowkey\" + rowindex,\n class: _vm.question.cssClasses.row\n },\n [\n _vm._l(row, function(item) {\n return [\n _c(\n \"td\",\n {\n key: \"label\" + item.editor.id,\n class:\n _vm.question.cssClasses.itemTitle +\n \" \" +\n _vm.question.cssClasses.cell\n },\n [\n item.editor.isRequireTextBeforeTitle ||\n item.editor.isRequireTextOnStart\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.requiredText },\n [_vm._v(_vm._s(item.editor.requiredText))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", { attrs: { locString: item.locTitle } }),\n _vm._v(\" \"),\n item.editor.isRequireTextAfterTitle\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.requiredText },\n [_vm._v(_vm._s(item.editor.requiredText))]\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n {\n key: item.editor.id,\n attrs: { css: _vm.question.cssClasses.cell }\n },\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: item.editor, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(item.editor), {\n tag: \"component\",\n attrs: { question: item.editor }\n }),\n _vm._v(\" \"),\n _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: item.editor, location: \"bottom\" }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n })\n ],\n 2\n )\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/navigation.vue?vue&type=template&id=75eadfd6& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPrevBtn,\n expression: \"showPrevBtn\"\n }\n ],\n class: _vm.survey.cssNavigationPrev,\n attrs: { type: \"button\", value: _vm.survey.pagePrevText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.prevPage }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showNextBtn,\n expression: \"showNextBtn\"\n }\n ],\n class: _vm.survey.cssNavigationNext,\n attrs: { type: \"button\", value: _vm.survey.pageNextText },\n on: { mousedown: _vm.nextButtonMouseDown, click: _vm.nextPage }\n }),\n _vm._v(\" \"),\n _vm.survey.isPreviewButtonVisible\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.survey.isLastPage,\n expression: \"survey.isLastPage\"\n }\n ],\n class: _vm.survey.cssNavigationPreview,\n attrs: { type: \"button\", value: _vm.survey.previewText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.showPreview }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isCompleteButtonVisible\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showCompleteBtn,\n expression: \"showCompleteBtn\"\n }\n ],\n class: _vm.survey.cssNavigationComplete,\n attrs: { type: \"button\", value: _vm.survey.completeText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.completeLastPage }\n })\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"form-group\" }, [\n !_vm.question.isReadOnlyRenderDiv()\n ? _c(\"textarea\", {\n class: _vm.question.cssClasses.other || _vm.commentClass,\n attrs: {\n readonly: _vm.question.isInputReadOnly,\n disabled: _vm.question.isInputReadOnly,\n maxlength: _vm.question.getOthersMaxLength(),\n placeholder: _vm.question.otherPlaceHolder,\n \"aria-label\": _vm.question.locTitle.renderedHtml\n },\n domProps: { value: _vm.question.comment },\n on: { change: _vm.change, keyup: _vm.keyup }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnlyRenderDiv()\n ? _c(\"div\", [_vm._v(_vm._s(_vm.question.comment))])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.page.cssClasses.page.root },\n [\n _vm.showHeader\n ? _c(\n \"h4\",\n { class: _vm.page.cssClasses.page.title },\n [\n !_vm.page.hasTitleActions\n ? _c(\"survey-string\", {\n attrs: { locString: _vm.page.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.page.hasTitleActions\n ? _c(\"sv-title-actions\", { attrs: { element: _vm.page } })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showDescription\n ? _c(\n \"div\",\n { class: _vm.page.cssClasses.page.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.page.locDescription }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.rows, function(row, index) {\n return row.visible\n ? _c(\n \"div\",\n { key: _vm.page.id + \"_\" + index, class: _vm.css.row },\n [\n _c(\"survey-row\", {\n attrs: { row: row, survey: _vm.survey, css: _vm.css }\n })\n ],\n 1\n )\n : _vm._e()\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.isVisible\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.container,\n style: _vm.rootStyle\n },\n [\n _c(\n \"h4\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasTitle,\n expression: \"hasTitle\"\n }\n ],\n class: _vm.question.cssTitle,\n attrs: {\n tabindex: _vm.question.titleTabIndex,\n \"aria-expanded\": _vm.question.titleAriaExpanded\n },\n on: {\n click: function() {\n return _vm.question.toggleState()\n },\n keyup: function($event) {\n _vm.keyup($event)\n }\n }\n },\n [\n _c(_vm.question.getTitleComponentName(), {\n tag: \"component\",\n attrs: { element: _vm.question, css: _vm.css }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDescription }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"survey-errors\", { attrs: { question: _vm.question } }),\n _vm._v(\" \"),\n !_vm.isCollapsed\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.content,\n style: { paddingLeft: _vm.question.innerPaddingLeft },\n attrs: { id: _vm.question.contentId }\n },\n [\n _vm._l(_vm.rows, function(row, index) {\n return row.visible\n ? _c(\n \"div\",\n {\n key: _vm.question.id + \"_\" + index,\n class: _vm.css.row\n },\n [\n _c(\"survey-row\", {\n attrs: {\n row: row,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.question.hasEditButton\n ? _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.footer },\n [\n _c(\"input\", {\n class: _vm.survey.cssNavigationEdit,\n attrs: {\n type: \"button\",\n value: _vm.survey.editText\n },\n on: { click: _vm.cancelPreview }\n })\n ]\n )\n : _vm._e()\n ],\n 2\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root },\n [\n _vm.question.isProgressTopShowing\n ? _c(\"survey-paneldynamicprogress\", {\n attrs: { question: _vm.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.renderedPanels, function(panel) {\n return [\n _c(\n \"div\",\n { key: panel.id, class: _vm.question.getPanelWrapperCss() },\n [\n _c(\"survey-panel\", { attrs: { question: panel, css: _vm.css } }),\n _vm._v(\" \"),\n _c(\"survey-paneldynamicremove\", {\n attrs: { question: _vm.question, panel: panel }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"hr\", {\n key: \"separator\" + panel.id,\n class: _vm.question.cssClasses.separator\n })\n ]\n }),\n _vm._v(\" \"),\n _vm.question.isProgressBottomShowing\n ? _c(\"survey-paneldynamicprogress\", {\n attrs: { question: _vm.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isRenderModeList && _vm.question.canAddPanel\n ? _c(\"input\", {\n class: _vm.getButtonAddCss(_vm.question),\n attrs: { type: \"button\", value: _vm.question.panelAddText },\n on: { click: _vm.addPanelClick }\n })\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: this.cssClass, staticStyle: { clear: \"both\" } }, [\n _c(\"div\", { class: _vm.question.cssClasses.progressContainer }, [\n _c(\"div\", { attrs: { title: _vm.question.panelPrevText } }, [\n _c(\n \"svg\",\n {\n class: _vm.getButtonPrevCss(_vm.question),\n attrs: { viewBox: \"0 0 10 10\" },\n on: { click: _vm.prevPanelClick }\n },\n [_c(\"polygon\", { attrs: { points: \"2,2 0,4 5,9 10,4 8,2 5,5 \" } })]\n )\n ]),\n _vm._v(\" \"),\n _vm.question.isRangeShowing\n ? _c(\"div\", { class: _vm.question.cssClasses.progress }, [\n _c(\"div\", {\n class: _vm.question.cssClasses.progressBar,\n style: { width: _vm.progress },\n attrs: { role: \"progressbar\" }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { title: _vm.question.panelNextText } }, [\n _c(\n \"svg\",\n {\n class: _vm.getButtonNextCss(_vm.question),\n attrs: { viewBox: \"0 0 10 10\" },\n on: { click: _vm.nextPanelClick }\n },\n [_c(\"polygon\", { attrs: { points: \"2,2 0,4 5,9 10,4 8,2 5,5 \" } })]\n )\n ])\n ]),\n _vm._v(\" \"),\n _vm.question.canAddPanel\n ? _c(\"input\", {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\", value: _vm.question.panelAddText },\n on: { click: _vm.addPanelClick }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.progressText }, [\n _vm._v(\"\\n \" + _vm._s(_vm.question.progressText) + \"\\n \")\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\":\n/*!*****************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e& ***!\n \\*****************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.canRemovePanel && !_vm.question.isReadOnly\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ],\n class: _vm.question.getPanelRemoveButtonCss(),\n attrs: { type: \"button\", value: _vm.question.panelRemoveText },\n on: {\n click: function($event) {\n return _vm.removePanelClick(_vm.panel)\n }\n }\n })\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.progress }, [\n _c(\n \"div\",\n {\n class: _vm.css.progressBar,\n style: { width: _vm.progress },\n attrs: {\n role: \"progressbar\",\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\"\n }\n },\n [\n _c(\n \"span\",\n { class: _vm.css.progressText + \" \" + _vm.css.progressTextInBar },\n [_vm._v(_vm._s(_vm.survey.progressText))]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { class: _vm.css.progressText + \" \" + _vm.css.progressTextUnderBar },\n [_vm._v(_vm._s(_vm.survey.progressText))]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.progressButtonsContainerCenter }, [\n _c(\"div\", { class: _vm.css.progressButtonsContainer }, [\n _c(\"div\", {\n class: _vm.getScrollButtonCss(_vm.hasScroller, true),\n attrs: { role: \"button\" },\n on: {\n click: function($event) {\n return _vm.clickScrollButton(true)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n ref: \"progressButtonsListContainer\",\n class: _vm.css.progressButtonsListContainer\n },\n [\n _c(\n \"ul\",\n { class: _vm.css.progressButtonsList },\n _vm._l(_vm.survey.visiblePages, function(page, index) {\n return _c(\n \"li\",\n {\n key: \"listelement\" + index,\n class: _vm.getListElementCss(index),\n on: {\n click: function($event) {\n _vm.isListElementClickable(index)\n ? _vm.clickListElement(index)\n : null\n }\n }\n },\n [\n _c(\n \"div\",\n {\n class: _vm.css.progressButtonsPageTitle,\n attrs: {\n title: page.locNavigationTitle.renderedHtml || page.name\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n page.locNavigationTitle.renderedHtml || page.name\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.css.progressButtonsPageDescription,\n attrs: {\n title: page.locNavigationDescription.renderedHtml\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(page.locNavigationDescription.renderedHtml) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n class: _vm.getScrollButtonCss(_vm.hasScroller, false),\n attrs: { role: \"button\" },\n on: {\n click: function($event) {\n return _vm.clickScrollButton(false)\n }\n }\n })\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root, attrs: { role: \"radiogroup\" } },\n [\n !_vm.question.hasTitle\n ? _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return !_vm.question.hasColumns\n ? _c(\"survey-radiogroup-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: { question: _vm.question, item: item, index: index }\n })\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.columns, function(column, colIndex) {\n return _vm.question.hasColumns\n ? _c(\n \"div\",\n { class: _vm.question.getColumnClass() },\n _vm._l(column, function(item, index) {\n return _c(\"survey-radiogroup-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: {\n question: _vm.question,\n item: item,\n index: \"\" + colIndex + index\n }\n })\n }),\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.question.canShowClearButton\n ? _c(\"div\", [\n _c(\"input\", {\n class: _vm.question.cssClasses.clearButton,\n attrs: { type: \"button\", value: _vm.question.clearButtonCaption },\n on: {\n click: function() {\n _vm.question.clearValue()\n }\n }\n })\n ])\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"label\", { class: _vm.getLabelClass(_vm.item) }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"radio\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isInputReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.item.value,\n checked: _vm._q(_vm.question.renderedValue, _vm.item.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(_vm.question, \"renderedValue\", _vm.item.value)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"-12 -12 24 24\" }\n },\n [_c(\"circle\", { attrs: { r: \"6\", cx: \"0\", cy: \"0\" } })]\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" }),\n _vm._v(\" \"),\n !_vm.hideLabel\n ? _c(\n \"span\",\n {\n class: _vm.getControlLabelClass(_vm.item),\n attrs: { title: _vm.item.locText.text }\n },\n [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.item.value == _vm.question.otherItem.value\n ? _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.question.hasOther &&\n _vm.question.renderedValue &&\n _vm.question.isOtherSelected,\n expression:\n \"\\n question.hasOther && question.renderedValue && question.isOtherSelected\\n \"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { tabindex: \"0\" }, on: { keydown: _vm.handleKeydown } },\n [\n _c(\n \"div\",\n { staticStyle: { outline: \"none\" }, attrs: { tabindex: \"-1\" } },\n [\n _c(\"div\", { class: _vm.cssClasses.itemGhostNode }),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.cssClasses.itemContent }, [\n _c(\"div\", { class: _vm.cssClasses.itemIconContainer }, [\n _c(\n \"svg\",\n {\n class:\n _vm.cssClasses.itemIcon +\n \" \" +\n _vm.cssClasses.itemIconHoverMod,\n attrs: {\n width: \"10\",\n height: \"16\",\n viewBox: \"0 0 10 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M6 2C6 0.9 6.9 0 8 0C9.1 0 10 0.9 10 2C10 3.1 9.1 4 8 4C6.9 4 6 3.1 6 2ZM2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0ZM8 6C6.9 6 6 6.9 6 8C6 9.1 6.9 10 8 10C9.1 10 10 9.1 10 8C10 6.9 9.1 6 8 6ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM8 12C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16C9.1 16 10 15.1 10 14C10 12.9 9.1 12 8 12ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z\"\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n class:\n _vm.cssClasses.itemIcon +\n \" \" +\n _vm.cssClasses.itemIconFocusMod,\n attrs: {\n width: \"10\",\n height: \"24\",\n viewBox: \"0 0 10 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", { attrs: { d: \"M10 5L5 0L0 5H4V9H6V5H10Z\" } }),\n _vm._v(\" \"),\n _c(\"path\", { attrs: { d: \"M6 19V15H4V19H0L5 24L10 19H6Z\" } })\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.cssClasses.itemIndex }, [\n _vm._v(_vm._s(_vm.index))\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.cssClasses.controlLabel },\n [_c(\"survey-string\", { attrs: { locString: _vm.text } })],\n 1\n )\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.rootClass },\n _vm._l(_vm.question.rankingChoices, function(item, index) {\n return _c(\"survey-ranking-item\", {\n key: item.value + \"-\" + index + \"-item\",\n class: _vm.question.getItemClass(item),\n attrs: {\n text: item.locText,\n index: _vm.question.getNumberByIndex(index),\n handleKeydown: _vm.question.handleKeydown,\n cssClasses: _vm.question.cssClasses\n }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"div\", { class: _vm.getRootClass(_vm.question) }, [\n _c(\n \"fieldset\",\n { attrs: { role: \"radiogroup\" } },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleRateValues, function(item, index) {\n return _c(\n \"label\",\n { key: item.value, class: _vm.question.getItemClass(item) },\n [\n _c(\"input\", {\n staticClass: \"sv-visuallyhidden\",\n attrs: {\n type: \"radio\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + index,\n disabled: _vm.question.isInputReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": item.locText.text,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: { value: item.value },\n on: {\n click: function(e) {\n return _vm.question.setValueFromClick(e.target.value)\n }\n }\n }),\n _vm._v(\" \"),\n index === 0\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.minText },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.locMinRateDescription\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n { class: _vm.question.cssClasses.itemText },\n [\n _c(\"survey-string\", {\n attrs: { locString: item.locText }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n index === _vm.question.visibleRateValues.length - 1\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.maxText },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.locMaxRateDescription\n }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n })\n ],\n 2\n )\n ]),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasOther,\n expression: \"question.hasOther\"\n }\n ],\n class: _vm.question.cssClasses.other,\n attrs: { question: _vm.question }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!**************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n \\**************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"sv-vue-row-additional-div\" },\n _vm._l(_vm.row.elements, function(element) {\n return _vm.row.isNeedRender && element.isVisible\n ? _c(\n \"div\",\n {\n key: element.idValue,\n style: {\n flexBasis: element.renderWidth,\n flexGrow: 1,\n flexShrink: 1,\n width: element.renderWidth,\n minWidth: element.minWidth,\n maxWidth: element.maxWidth\n }\n },\n [\n _c(\"survey-element\", {\n style: {\n paddingLeft: element.paddingLeft,\n paddingRight: element.paddingRight\n },\n attrs: {\n id: element.id,\n role: element.ariaRole,\n \"aria-labelledby\": element.hasTitle\n ? element.ariaTitleId\n : null,\n name: element.name,\n element: element,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: _vm.question.cssClasses.root,\n style: {\n height: _vm.question.height + \"px\",\n width: _vm.question.width + \"px\"\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.needShowPlaceholder(),\n expression: \"question.needShowPlaceholder()\"\n }\n ],\n class: _vm.question.cssClasses.placeholder\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.question.placeHolderText) + \"\\n \")]\n ),\n _vm._v(\" \"),\n _vm._m(0),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.controls }, [\n _c(\n \"button\",\n {\n class: _vm.question.cssClasses.clearButton,\n attrs: { type: \"button\", title: _vm.question.clearButtonCaption }\n },\n [_vm._v(\"\\n ✖\\n \")]\n )\n ])\n ]\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [_c(\"canvas\", { attrs: { tabindex: \"0\" } })])\n }\n]\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm.locString.hasHtml\n ? _c(\"span\", {\n staticClass: \"sv-string-editor\",\n staticStyle: { position: \"static\" },\n attrs: { contenteditable: \"true\" },\n domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) },\n on: { blur: _vm.onInput, click: _vm.onClick }\n })\n : _c(\n \"span\",\n {\n staticClass: \"sv-string-editor\",\n staticStyle: { position: \"static\" },\n attrs: { contenteditable: \"true\" },\n on: { blur: _vm.onInput, click: _vm.onClick }\n },\n [_vm._v(_vm._s(_vm.locString.renderedHtml))]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm.locString.hasHtml\n ? _c(\"span\", {\n staticStyle: { position: \"static\" },\n domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) }\n })\n : _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm._v(_vm._s(_vm.locString.renderedHtml))\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(_vm.locString.renderAs, {\n tag: \"component\",\n attrs: { locString: _vm.locString }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.root }, [\n _c(\"form\", { attrs: { onsubmit: \"return false;\" } }, [\n !_vm.survey.hasLogo\n ? _c(\"div\", { staticClass: \"sv_custom_header\" })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.css.container },\n [\n _c(\"survey-header\", { attrs: { survey: _vm.survey } }),\n _vm._v(\" \"),\n _vm.survey.state === \"starting\"\n ? [\n _c(\n \"div\",\n { class: _vm.css.body },\n [\n _vm.survey.isNavigationButtonsShowingOnTop\n ? _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n class: _vm.survey.cssNavigationStart,\n attrs: {\n type: \"button\",\n value: _vm.survey.startSurveyText\n },\n on: { click: _vm.start }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-page\", {\n attrs: {\n id: _vm.survey.startedPage.id,\n survey: _vm.survey,\n page: _vm.survey.startedPage,\n css: _vm.css\n }\n }),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowingOnBottom\n ? _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n class: _vm.survey.cssNavigationStart,\n attrs: {\n type: \"button\",\n value: _vm.survey.startSurveyText\n },\n on: { click: _vm.start }\n })\n ])\n : _vm._e()\n ],\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"running\" || _vm.survey.state === \"preview\"\n ? [\n _c(\n \"div\",\n { class: _vm.css.body },\n [\n _vm.survey.isShowProgressBarOnTop\n ? _c(\n \"sv-progress-\" +\n _vm.survey.progressBarType.toLowerCase(),\n {\n tag: \"component\",\n attrs: { survey: _vm.survey, css: _vm.css }\n }\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isTimerPanelShowingOnTop\n ? _c(\"survey-timerpanel\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowingOnTop\n ? _c(\"survey-navigation\", {\n key: _vm.navId,\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-page\", {\n key: _vm.pageId,\n attrs: {\n survey: _vm.survey,\n page: _vm.survey.currentPage,\n css: _vm.css\n }\n }),\n _vm._v(\" \"),\n _vm.survey.isTimerPanelShowingOnBottom\n ? _c(\"survey-timerpanel\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isShowProgressBarOnBottom\n ? _c(\n \"sv-progress-\" +\n _vm.survey.progressBarType.toLowerCase(),\n {\n tag: \"component\",\n attrs: { survey: _vm.survey, css: _vm.css }\n }\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowingOnBottom\n ? _c(\"survey-navigation\", {\n key: _vm.navId,\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasCompletedPage\n ? _c(\"div\", [\n _c(\"div\", {\n class: _vm.getCompletedPageClasses(),\n domProps: {\n innerHTML: _vm._s(_vm.getProcessedCompletedHtml())\n }\n }),\n _vm._v(\" \"),\n _vm.survey.completedState != \"\"\n ? _c(\"div\", { class: _vm.css.saveData.root }, [\n _c(\"div\", { class: _vm.getCompletedStateClasses() }, [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.survey.completedStateText))\n ]),\n _vm._v(\" \"),\n _vm.survey.completedState == \"error\"\n ? _c(\"input\", {\n class: _vm.css.saveData.saveAgainButton,\n attrs: {\n type: \"button\",\n value: _vm.survey.getLocString(\n \"saveAgainButton\"\n )\n },\n on: { click: _vm.doTrySaveAgain }\n })\n : _vm._e()\n ])\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"completedbefore\"\n ? _c(\"div\", {\n class: _vm.css.body,\n domProps: {\n innerHTML: _vm._s(_vm.survey.processedCompletedBeforeHtml)\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"loading\"\n ? _c(\"div\", {\n class: _vm.css.body,\n domProps: { innerHTML: _vm._s(_vm.survey.processedLoadingHtml) }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"empty\"\n ? _c(\"div\", { class: _vm.css.bodyEmpty }, [\n _vm._v(\n \"\\n \" + _vm._s(_vm.survey.emptySurveyText) + \"\\n \"\n )\n ])\n : _vm._e()\n ],\n 2\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\"input\", {\n class: _vm.question.getControlClass(),\n style: _vm.inputStyle,\n attrs: {\n disabled: _vm.question.isInputReadOnly,\n type: _vm.question.inputType,\n maxlength: _vm.question.getMaxLength(),\n min: _vm.question.renderedMin,\n max: _vm.question.renderedMax,\n step: _vm.question.renderedStep,\n size: _vm.question.inputSize,\n id: _vm.question.inputId,\n list: _vm.question.dataListId,\n placeholder: _vm.question.renderedPlaceHolder,\n autocomplete: _vm.question.autoComplete,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: { value: _vm.question.value },\n on: { change: _vm.change, keyup: _vm.keyup }\n }),\n _vm._v(\" \"),\n _vm.question.dataListId\n ? _c(\n \"datalist\",\n { attrs: { id: _vm.question.dataListId } },\n _vm._l(_vm.question.dataList, function(item) {\n return _c(\"option\", { domProps: { value: item } })\n }),\n 0\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [_vm._v(_vm._s(_vm.text))])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _vm.element.isRequireTextOnStart\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.requiredText))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.no\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.number,\n staticStyle: { position: \"static\" },\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.no))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.isRequireTextBeforeTitle\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.requiredText))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", { attrs: { locString: _vm.element.locTitle } }),\n _vm._v(\" \"),\n _vm.element.isRequireTextAfterTitle\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.requiredText))]\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=template&id=62f588b2&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/window.vue?vue&type=template&id=62f588b2& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.surveyWindow.isShowing,\n expression: \"surveyWindow.isShowing\"\n }\n ],\n class: _vm.css.window.root,\n staticStyle: {\n position: \"fixed\",\n bottom: \"3px\",\n right: \"10px\",\n \"max-width\": \"60%\"\n }\n },\n [\n _c(\"div\", { class: _vm.css.window.header.root }, [\n _c(\n \"span\",\n {\n staticStyle: { width: \"100%\", cursor: \"pointer\" },\n on: { click: _vm.doExpand }\n },\n [\n _c(\n \"span\",\n {\n class: _vm.css.window.header.title,\n staticStyle: { \"padding-right\": \"10px\" }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.windowSurvey.locTitle }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"span\", {\n class: _vm.expandedCss,\n attrs: { \"aria-hidden\": \"true\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _vm.isExpandedSurvey\n ? _c(\n \"span\",\n {\n staticStyle: { float: \"right\", cursor: \"pointer\" },\n on: { click: _vm.doExpand }\n },\n [\n _c(\n \"span\",\n {\n class: _vm.css.window.header.title,\n staticStyle: { \"padding-right\": \"10px\" }\n },\n [_vm._v(\"X\")]\n )\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isExpandedSurvey,\n expression: \"isExpandedSurvey\"\n }\n ],\n class: _vm.css.window.body\n },\n [_c(\"survey\", { attrs: { survey: _vm.windowSurvey } })],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!\n \\********************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Emit.js ***!\n \\********************************************************************/\n/*! exports provided: Emit */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Emit\", function() { return Emit; });\nvar __spreadArrays = (undefined && undefined.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\n// Code copied from Vue/src/shared/util.js\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); };\n/**\n * decorator of an event-emitter function\n * @param event The name of the event\n * @return MethodDecorator\n */\nfunction Emit(event) {\n return function (_target, propertyKey, descriptor) {\n var key = hyphenate(propertyKey);\n var original = descriptor.value;\n descriptor.value = function emitter() {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var emit = function (returnValue) {\n var emitName = event || key;\n if (returnValue === undefined) {\n if (args.length === 0) {\n _this.$emit(emitName);\n }\n else if (args.length === 1) {\n _this.$emit(emitName, args[0]);\n }\n else {\n _this.$emit.apply(_this, __spreadArrays([emitName], args));\n }\n }\n else {\n args.unshift(returnValue);\n _this.$emit.apply(_this, __spreadArrays([emitName], args));\n }\n };\n var returnValue = original.apply(this, args);\n if (isPromise(returnValue)) {\n returnValue.then(emit);\n }\n else {\n emit(returnValue);\n }\n return returnValue;\n };\n };\n}\nfunction isPromise(obj) {\n return obj instanceof Promise || (obj && typeof obj.then === 'function');\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Inject.js ***!\n \\**********************************************************************/\n/*! exports provided: Inject */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Inject\", function() { return Inject; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of an inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction Inject(options) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n if (typeof componentOptions.inject === 'undefined') {\n componentOptions.inject = {};\n }\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject[key] = options || key;\n }\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js ***!\n \\******************************************************************************/\n/*! exports provided: InjectReactive */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"InjectReactive\", function() { return InjectReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction InjectReactive(options) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n if (typeof componentOptions.inject === 'undefined') {\n componentOptions.inject = {};\n }\n if (!Array.isArray(componentOptions.inject)) {\n var fromKey_1 = !!options ? options.from || options : key;\n var defaultVal_1 = (!!options && options.default) || undefined;\n if (!componentOptions.computed)\n componentOptions.computed = {};\n componentOptions.computed[key] = function () {\n var obj = this[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]];\n return obj ? obj[fromKey_1] : defaultVal_1;\n };\n componentOptions.inject[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]] = _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"];\n }\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Model.js ***!\n \\*********************************************************************/\n/*! exports provided: Model */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return Model; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of model\n * @param event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction Model(event, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n componentOptions.model = { prop: k, event: event || k };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\":\n/*!*************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/ModelSync.js ***!\n \\*************************************************************************/\n/*! exports provided: ModelSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ModelSync\", function() { return ModelSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of synced model and prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction ModelSync(propName, event, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n componentOptions.model = { prop: propName, event: event || k };\n (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n get: function () {\n return this[propName];\n },\n set: function (value) {\n // @ts-ignore\n this.$emit(event, value);\n },\n };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Prop.js ***!\n \\********************************************************************/\n/*! exports provided: Prop */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Prop\", function() { return Prop; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a prop\n * @param options the options for the prop\n * @return PropertyDecorator | void\n */\nfunction Prop(options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/PropSync.js ***!\n \\************************************************************************/\n/*! exports provided: PropSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PropSync\", function() { return PropSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a synced prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param options the options for the synced prop\n * @return PropertyDecorator | void\n */\nfunction PropSync(propName, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n get: function () {\n return this[propName];\n },\n set: function (value) {\n this.$emit(\"update:\" + propName, value);\n },\n };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Provide.js ***!\n \\***********************************************************************/\n/*! exports provided: Provide */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Provide\", function() { return Provide; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction Provide(key) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n var provide = componentOptions.provide;\n Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n }\n provide.managed[k] = key || k;\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js ***!\n \\*******************************************************************************/\n/*! exports provided: ProvideReactive */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProvideReactive\", function() { return ProvideReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction ProvideReactive(key) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n var provide = componentOptions.provide;\n Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n }\n provide.managedReactive[k] = key || k;\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Ref.js ***!\n \\*******************************************************************/\n/*! exports provided: Ref */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ref\", function() { return Ref; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of a ref prop\n * @param refKey the ref key defined in template\n */\nfunction Ref(refKey) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (options, key) {\n options.computed = options.computed || {};\n options.computed[key] = {\n cache: false,\n get: function () {\n return this.$refs[refKey || key];\n },\n };\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/VModel.js ***!\n \\**********************************************************************/\n/*! exports provided: VModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VModel\", function() { return VModel; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator for capturings v-model binding to component\n * @param options the options for the prop\n */\nfunction VModel(options) {\n if (options === void 0) { options = {}; }\n var valueKey = 'value';\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[valueKey] = options;\n (componentOptions.computed || (componentOptions.computed = {}))[key] = {\n get: function () {\n return this[valueKey];\n },\n set: function (value) {\n this.$emit('input', value);\n },\n };\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Watch.js ***!\n \\*********************************************************************/\n/*! exports provided: Watch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Watch\", function() { return Watch; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of a watch function\n * @param path the path or the expression to observe\n * @param WatchOption\n * @return MethodDecorator\n */\nfunction Watch(path, options) {\n if (options === void 0) { options = {}; }\n var _a = options.deep, deep = _a === void 0 ? false : _a, _b = options.immediate, immediate = _b === void 0 ? false : _b;\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, handler) {\n if (typeof componentOptions.watch !== 'object') {\n componentOptions.watch = Object.create(null);\n }\n var watch = componentOptions.watch;\n if (typeof watch[path] === 'object' && !Array.isArray(watch[path])) {\n watch[path] = [watch[path]];\n }\n else if (typeof watch[path] === 'undefined') {\n watch[path] = [];\n }\n watch[path].push({ handler: handler, deep: deep, immediate: immediate });\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/helpers/metadata.js ***!\n \\*********************************************************************/\n/*! exports provided: applyMetadata */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"applyMetadata\", function() { return applyMetadata; });\n/** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */\nvar reflectMetadataIsSupported = typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined';\nfunction applyMetadata(options, target, key) {\n if (reflectMetadataIsSupported) {\n if (!Array.isArray(options) &&\n typeof options !== 'function' &&\n !options.hasOwnProperty('type') &&\n typeof options.type === 'undefined') {\n var type = Reflect.getMetadata('design:type', target, key);\n if (type !== Object) {\n options.type = type;\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/helpers/provideInject.js ***!\n \\**************************************************************************/\n/*! exports provided: needToProduceProvide, produceProvide, reactiveInjectKey, inheritInjected */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"needToProduceProvide\", function() { return needToProduceProvide; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"produceProvide\", function() { return produceProvide; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reactiveInjectKey\", function() { return reactiveInjectKey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"inheritInjected\", function() { return inheritInjected; });\nfunction needToProduceProvide(original) {\n return (typeof original !== 'function' ||\n (!original.managed && !original.managedReactive));\n}\nfunction produceProvide(original) {\n var provide = function () {\n var _this = this;\n var rv = typeof original === 'function' ? original.call(this) : original;\n rv = Object.create(rv || null);\n // set reactive services (propagates previous services if necessary)\n rv[reactiveInjectKey] = Object.create(this[reactiveInjectKey] || {});\n for (var i in provide.managed) {\n rv[provide.managed[i]] = this[i];\n }\n var _loop_1 = function (i) {\n rv[provide.managedReactive[i]] = this_1[i]; // Duplicates the behavior of `@Provide`\n Object.defineProperty(rv[reactiveInjectKey], provide.managedReactive[i], {\n enumerable: true,\n configurable: true,\n get: function () { return _this[i]; },\n });\n };\n var this_1 = this;\n for (var i in provide.managedReactive) {\n _loop_1(i);\n }\n return rv;\n };\n provide.managed = {};\n provide.managedReactive = {};\n return provide;\n}\n/** Used for keying reactive provide/inject properties */\nvar reactiveInjectKey = '__reactiveInject__';\nfunction inheritInjected(componentOptions) {\n // inject parent reactive services (if any)\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject = componentOptions.inject || {};\n componentOptions.inject[reactiveInjectKey] = {\n from: reactiveInjectKey,\n default: {},\n };\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/index.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/index.js ***!\n \\**********************************************************/\n/*! exports provided: Component, Vue, Mixins, Emit, Inject, InjectReactive, Model, ModelSync, Prop, PropSync, Provide, ProvideReactive, Ref, VModel, Watch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Vue\", function() { return vue__WEBPACK_IMPORTED_MODULE_0___default.a; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Component\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Mixins\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"mixins\"]; });\n\n/* harmony import */ var _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decorators/Emit */ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Emit\", function() { return _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__[\"Emit\"]; });\n\n/* harmony import */ var _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./decorators/Inject */ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Inject\", function() { return _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__[\"Inject\"]; });\n\n/* harmony import */ var _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./decorators/InjectReactive */ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"InjectReactive\", function() { return _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__[\"InjectReactive\"]; });\n\n/* harmony import */ var _decorators_Model__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./decorators/Model */ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _decorators_Model__WEBPACK_IMPORTED_MODULE_5__[\"Model\"]; });\n\n/* harmony import */ var _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./decorators/ModelSync */ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ModelSync\", function() { return _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__[\"ModelSync\"]; });\n\n/* harmony import */ var _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./decorators/Prop */ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Prop\", function() { return _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__[\"Prop\"]; });\n\n/* harmony import */ var _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./decorators/PropSync */ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PropSync\", function() { return _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__[\"PropSync\"]; });\n\n/* harmony import */ var _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./decorators/Provide */ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Provide\", function() { return _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__[\"Provide\"]; });\n\n/* harmony import */ var _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./decorators/ProvideReactive */ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProvideReactive\", function() { return _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__[\"ProvideReactive\"]; });\n\n/* harmony import */ var _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./decorators/Ref */ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ref\", function() { return _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__[\"Ref\"]; });\n\n/* harmony import */ var _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./decorators/VModel */ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VModel\", function() { return _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__[\"VModel\"]; });\n\n/* harmony import */ var _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./decorators/Watch */ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Watch\", function() { return _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__[\"Watch\"]; });\n\n/** vue-property-decorator verson 9.1.2 MIT LICENSE copyright 2020 kaorun343 */\n/// \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/action.ts\":\n/*!*******************************!*\\\n !*** ./src/actions/action.ts ***!\n \\*******************************/\n/*! exports provided: Action */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return Action; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Action = /** @class */ (function (_super) {\n __extends(Action, _super);\n function Action(item) {\n var _this = _super.call(this) || this;\n Object.assign(_this, item);\n return _this;\n }\n Object.defineProperty(Action.prototype, \"disabled\", {\n get: function () {\n return this.enabled !== undefined && !this.enabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"hasTitle\", {\n get: function () {\n return (((this.mode != \"small\" &&\n (this.showTitle || this.showTitle === undefined)) ||\n !this.iconName) &&\n !!this.title);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"isVisible\", {\n get: function () {\n return this.mode !== \"popup\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"canShrink\", {\n get: function () {\n return !!this.iconName;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"id\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"iconName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"visible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"title\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"tooltip\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"enabled\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"showTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"action\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"css\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"innerCss\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"data\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"popupModel\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"needSeparator\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"active\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"template\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"component\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"items\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"visibleIndex\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"large\" })\n ], Action.prototype, \"mode\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"disableTabStop\", void 0);\n return Action;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/adaptive-container.ts\":\n/*!*******************************************!*\\\n !*** ./src/actions/adaptive-container.ts ***!\n \\*******************************************/\n/*! exports provided: AdaptiveActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return AdaptiveActionContainer; });\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../list */ \"./src/list.ts\");\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../popup */ \"./src/popup.ts\");\n/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action */ \"./src/actions/action.ts\");\n/* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./container */ \"./src/actions/container.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar AdaptiveActionContainer = /** @class */ (function (_super) {\n __extends(AdaptiveActionContainer, _super);\n function AdaptiveActionContainer() {\n var _this = _super.call(this) || this;\n _this.invisibleItemsListModel = new _list__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]([], function (item) {\n _this.invisibleItemSelected(item);\n _this.dotsItemPopupModel.toggleVisibility();\n }, false);\n _this.dotsItemPopupModel = new _popup__WEBPACK_IMPORTED_MODULE_1__[\"PopupModel\"](\"sv-list\", {\n model: _this.invisibleItemsListModel\n });\n _this.dotsItem = new _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"]({\n id: \"dotsItem-id\",\n component: \"sv-action-bar-item-dropdown\",\n css: \"sv-dots\",\n innerCss: \"sv-dots__item\",\n iconName: \"icon-dots\",\n // showTitle: true,\n // title: \"...\",\n action: function (item) {\n _this.dotsItemPopupModel.toggleVisibility();\n },\n popupModel: _this.dotsItemPopupModel\n });\n return _this;\n }\n Object.defineProperty(AdaptiveActionContainer.prototype, \"visibleItems\", {\n get: function () {\n return this.actions.filter(function (item) { return item.mode !== \"popup\"; });\n },\n enumerable: false,\n configurable: true\n });\n AdaptiveActionContainer.prototype.setItems = function (items, sortByVisibleIndex) {\n if (sortByVisibleIndex === void 0) { sortByVisibleIndex = true; }\n var actions = items.map(function (item) { return (item instanceof _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"] ? item : new _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"](item)); });\n if (sortByVisibleIndex) {\n this.actions = this.sortItems(actions);\n }\n else {\n this.actions = actions;\n }\n };\n AdaptiveActionContainer.prototype.sortItems = function (items) {\n return []\n .concat(items.filter(function (item) { return item.visibleIndex >= 0 || item.visibleIndex === undefined; }))\n .sort(function (firstItem, secondItem) {\n return firstItem.visibleIndex - secondItem.visibleIndex;\n });\n };\n Object.defineProperty(AdaptiveActionContainer.prototype, \"hasItems\", {\n get: function () {\n return (this.actions || []).length > 0;\n },\n enumerable: false,\n configurable: true\n });\n AdaptiveActionContainer.prototype.invisibleItemSelected = function (item) {\n if (!!item && typeof item.action === \"function\") {\n item.action();\n }\n };\n AdaptiveActionContainer.prototype.showFirstN = function (visibleItemsCount) {\n var _this = this;\n var leftItemsToShow = visibleItemsCount;\n var invisibleItems = [];\n this.actions.forEach(function (item) {\n if (item === _this.dotsItem) {\n return;\n }\n if (leftItemsToShow <= 0) {\n item.mode = \"popup\";\n invisibleItems.push(item);\n }\n leftItemsToShow--;\n });\n this.invisibleItemsListModel.items = invisibleItems;\n this.addDotsButton(visibleItemsCount);\n };\n AdaptiveActionContainer.prototype.removeDotsButton = function () {\n var index = this.actions.indexOf(this.dotsItem);\n if (index !== -1) {\n this.actions.splice(index, 1);\n }\n };\n AdaptiveActionContainer.prototype.addDotsButton = function (newIndex) {\n if (newIndex < this.actions.length) {\n this.actions.splice(newIndex, 0, this.dotsItem);\n }\n };\n return AdaptiveActionContainer;\n}(_container__WEBPACK_IMPORTED_MODULE_3__[\"ActionContainer\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/container.ts\":\n/*!**********************************!*\\\n !*** ./src/actions/container.ts ***!\n \\**********************************/\n/*! exports provided: ActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return ActionContainer; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base */ \"./src/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ActionContainer = /** @class */ (function (_super) {\n __extends(ActionContainer, _super);\n function ActionContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ActionContainer.prototype, \"hasItems\", {\n get: function () {\n return (this.actions || []).length > 0;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"])()\n ], ActionContainer.prototype, \"actions\", void 0);\n return ActionContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/base.ts\":\n/*!*********************!*\\\n !*** ./src/base.ts ***!\n \\*********************/\n/*! exports provided: Bindings, Base, ArrayChanges, Event, EventBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Bindings\", function() { return Bindings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return Base; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return ArrayChanges; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return Event; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventBase\", function() { return EventBase; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\nvar Bindings = /** @class */ (function () {\n function Bindings(obj) {\n this.obj = obj;\n this.properties = null;\n this.values = null;\n }\n Bindings.prototype.getType = function () {\n return \"bindings\";\n };\n Bindings.prototype.getNames = function () {\n var res = [];\n this.fillProperties();\n for (var i = 0; i < this.properties.length; i++) {\n if (this.properties[i].isVisible(\"\", this.obj)) {\n res.push(this.properties[i].name);\n }\n }\n return res;\n };\n Bindings.prototype.getProperties = function () {\n var res = [];\n this.fillProperties();\n for (var i = 0; i < this.properties.length; i++) {\n res.push(this.properties[i]);\n }\n return res;\n };\n Bindings.prototype.setBinding = function (propertyName, valueName) {\n if (!this.values)\n this.values = {};\n if (!!valueName) {\n this.values[propertyName] = valueName;\n }\n else {\n delete this.values[propertyName];\n if (Object.keys(this.values).length == 0) {\n this.values = null;\n }\n }\n };\n Bindings.prototype.clearBinding = function (propertyName) {\n this.setBinding(propertyName, \"\");\n };\n Bindings.prototype.isEmpty = function () {\n return !this.values;\n };\n Bindings.prototype.getValueNameByPropertyName = function (propertyName) {\n if (!this.values)\n return undefined;\n return this.values[propertyName];\n };\n Bindings.prototype.getPropertiesByValueName = function (valueName) {\n if (!this.values)\n return [];\n var res = [];\n for (var key in this.values) {\n if (this.values[key] == valueName) {\n res.push(key);\n }\n }\n return res;\n };\n Bindings.prototype.getJson = function () {\n if (this.isEmpty())\n return null;\n var res = {};\n for (var key in this.values) {\n res[key] = this.values[key];\n }\n return res;\n };\n Bindings.prototype.setJson = function (value) {\n this.values = null;\n if (!value)\n return;\n this.values = {};\n for (var key in value) {\n this.values[key] = value[key];\n }\n };\n Bindings.prototype.fillProperties = function () {\n if (this.properties !== null)\n return;\n this.properties = [];\n var objProperties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].getPropertiesByObj(this.obj);\n for (var i = 0; i < objProperties.length; i++) {\n if (objProperties[i].isBindable) {\n this.properties.push(objProperties[i]);\n }\n }\n };\n return Bindings;\n}());\n\n/**\n * The base class for SurveyJS objects.\n */\nvar Base = /** @class */ (function () {\n function Base() {\n this.propertyHash = {};\n this.eventList = [];\n this.isLoadingFromJsonValue = false;\n this.loadingOwner = null;\n /**\n * Event that raise on property change of the sender object\n * sender - the object that owns the property\n * options.name - the property name that has been changed\n * options.oldValue - old value. Please note, it equals to options.newValue if property is an array\n * options.newValue - new value.\n */\n this.onPropertyChanged = this.addEvent();\n /**\n * Event that raised on changing property of the ItemValue object.\n * sender - the object that owns the property\n * options.propertyName - the property name to which ItemValue array is belong. It can be \"choices\" for dropdown question\n * options.obj - the instance of ItemValue object which property has been changed\n * options.name - the property of ItemObject that has been changed\n * options.oldValue - old value\n * options.newValue - new value\n */\n this.onItemValuePropertyChanged = this.addEvent();\n this.isCreating = true;\n this.bindingsValue = new Bindings(this);\n _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"CustomPropertiesCollection\"].createProperties(this);\n this.onBaseCreating();\n this.isCreating = false;\n }\n Object.defineProperty(Base, \"commentPrefix\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentPrefix;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentPrefix = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns true if a value undefined, null, empty string or empty array.\n *\n * @param value\n * @param trimString a boolean parameter, default value true. If true then it trims the string and functions returns true for a string that contains white spaces only.\n */\n Base.prototype.isValueEmpty = function (value, trimString) {\n if (trimString === void 0) { trimString = true; }\n if (trimString) {\n value = this.trimValue(value);\n }\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isValueEmpty(value);\n };\n Base.prototype.trimValue = function (value) {\n if (!!value && (typeof value === \"string\" || value instanceof String))\n return value.trim();\n return value;\n };\n Base.prototype.IsPropertyEmpty = function (value) {\n return value !== \"\" && this.isValueEmpty(value);\n };\n Base.prototype.dispose = function () {\n for (var i = 0; i < this.eventList.length; i++) {\n this.eventList[i].clear();\n }\n this.isDisposedValue = true;\n };\n Object.defineProperty(Base.prototype, \"isDisposed\", {\n get: function () {\n return this.isDisposedValue === true;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.addEvent = function () {\n var res = new EventBase();\n this.eventList.push(res);\n return res;\n };\n Base.prototype.onBaseCreating = function () { };\n /**\n * Returns the type of the object as a string as it represents in the json. It should be in lowcase.\n */\n Base.prototype.getType = function () {\n return \"base\";\n };\n Base.prototype.getSurvey = function (isLive) {\n if (isLive === void 0) { isLive = false; }\n return null;\n };\n Object.defineProperty(Base.prototype, \"inSurvey\", {\n /**\n * Returns true if the object is inluded into survey, otherwise returns false.\n */\n get: function () {\n return !!this.getSurvey(true);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Base.prototype, \"bindings\", {\n get: function () {\n return this.bindingsValue;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.checkBindings = function (valueName, value) { };\n Base.prototype.updateBindings = function (propertyName, value) {\n var valueName = this.bindings.getValueNameByPropertyName(propertyName);\n if (!!valueName) {\n this.updateBindingValue(valueName, value);\n }\n };\n Base.prototype.updateBindingValue = function (valueName, value) { };\n /**\n * Returns the element template name without prefix. Typically it equals to getType().\n * @see getType\n */\n Base.prototype.getTemplate = function () {\n return this.getType();\n };\n Object.defineProperty(Base.prototype, \"isLoadingFromJson\", {\n /**\n * Returns true if the object is loading from Json at the current moment.\n */\n get: function () {\n return this.getIsLoadingFromJson();\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.getIsLoadingFromJson = function () {\n if (!!this.loadingOwner && this.loadingOwner.isLoadingFromJson)\n return true;\n return this.isLoadingFromJsonValue;\n };\n Base.prototype.startLoadingFromJson = function () {\n this.isLoadingFromJsonValue = true;\n };\n Base.prototype.endLoadingFromJson = function () {\n this.isLoadingFromJsonValue = false;\n };\n /**\n * Deserialized the current object into JSON\n * @see fromJSON\n */\n Base.prototype.toJSON = function () {\n return new _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"JsonObject\"]().toJsonObject(this);\n };\n /**\n * Load object properties and elements. It doesn't reset properties that was changed before and they are not defined in the json parameter.\n * @param json the object JSON definition\n * @see toJSON\n */\n Base.prototype.fromJSON = function (json) {\n return new _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"JsonObject\"]().toObject(json, this);\n };\n /**\n * Make a clone of the existing object. Create a new object of the same type and load all properties into it.\n */\n Base.prototype.clone = function () {\n var clonedObj = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].createClass(this.getType());\n clonedObj.fromJSON(this.toJSON());\n return clonedObj;\n };\n /**\n * Returns the serializable property that belongs to this instance by property name. It returns null if the property is not exists.\n * @param propName property name\n * @returns\n */\n Base.prototype.getPropertyByName = function (propName) {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.getType(), propName);\n };\n Base.prototype.isPropertyVisible = function (propName) {\n var prop = this.getPropertyByName(propName);\n return !!prop ? prop.isVisible(\"\", this) : false;\n };\n Base.createProgressInfo = function () {\n return {\n questionCount: 0,\n answeredQuestionCount: 0,\n requiredQuestionCount: 0,\n requiredAnsweredQuestionCount: 0,\n };\n };\n Base.prototype.getProgressInfo = function () {\n return Base.createProgressInfo();\n };\n Base.prototype.localeChanged = function () { };\n Base.prototype.locStrsChanged = function () {\n if (!!this.arraysInfo) {\n for (var key in this.arraysInfo) {\n var item = this.arraysInfo[key];\n if (item && item.isItemValues) {\n var arr = this.getPropertyValue(key);\n if (arr && !!Base.itemValueLocStrChanged)\n Base.itemValueLocStrChanged(arr);\n }\n }\n }\n if (!!this.localizableStrings) {\n for (var key in this.localizableStrings) {\n var item = this.getLocalizableString(key);\n if (item)\n item.strChanged();\n }\n }\n };\n /**\n * Returns the property value by name\n * @param name property name\n */\n Base.prototype.getPropertyValue = function (name, defaultValue) {\n if (defaultValue === void 0) { defaultValue = null; }\n var res = this.getPropertyValueCore(this.propertyHash, name);\n if (this.IsPropertyEmpty(res)) {\n if (defaultValue != null)\n return defaultValue;\n var prop = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.getType(), name);\n if (!!prop && (!prop.isCustom || !this.isCreating)) {\n if (!this.IsPropertyEmpty(prop.defaultValue) &&\n !Array.isArray(prop.defaultValue))\n return prop.defaultValue;\n if (prop.type == \"boolean\" || prop.type == \"switch\")\n return false;\n if (prop.isCustom && !!prop.onGetValue)\n return prop.onGetValue(this);\n }\n }\n return res;\n };\n Base.prototype.getPropertyValueCore = function (propertiesHash, name) {\n if (this.getPropertyValueCoreHandler)\n return this.getPropertyValueCoreHandler(propertiesHash, name);\n else\n return propertiesHash[name];\n };\n Base.prototype.geValueFromHash = function () {\n return this.propertyHash[\"value\"];\n };\n Base.prototype.setPropertyValueCore = function (propertiesHash, name, val) {\n if (this.setPropertyValueCoreHandler && !this.isDisposedValue)\n this.setPropertyValueCoreHandler(propertiesHash, name, val);\n else\n propertiesHash[name] = val;\n };\n Object.defineProperty(Base.prototype, \"isEditingSurveyElement\", {\n get: function () {\n var survey = this.getSurvey();\n return !!survey && survey.isEditingSurveyElement;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.iteratePropertiesHash = function (func) {\n var _this = this;\n var keys = [];\n for (var key in this.propertyHash) {\n if (key === \"value\" &&\n this.isEditingSurveyElement &&\n Array.isArray(this.value))\n continue;\n keys.push(key);\n }\n keys.forEach(function (key) { return func(_this.propertyHash, key); });\n };\n /**\n * set property value\n * @param name property name\n * @param val new property value\n */\n Base.prototype.setPropertyValue = function (name, val) {\n var oldValue = this.getPropertyValue(name);\n if (oldValue && Array.isArray(oldValue)) {\n if (this.isTwoValueEquals(oldValue, val))\n return;\n var arrayInfo = this.arraysInfo[name];\n this.setArray(name, oldValue, val, arrayInfo ? arrayInfo.isItemValues : false, arrayInfo ? arrayInfo.onPush : null);\n }\n else {\n this.setPropertyValueCore(this.propertyHash, name, val);\n if (!this.isDisposedValue && !this.isTwoValueEquals(oldValue, val)) {\n this.propertyValueChanged(name, oldValue, val);\n }\n }\n };\n Base.prototype.clearPropertyValue = function (name) {\n this.setPropertyValueCore(this.propertyHash, name, null);\n delete this.propertyHash[name];\n };\n Base.prototype.onPropertyValueChangedCallback = function (name, oldValue, newValue, sender, arrayChanges) { };\n Base.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n this.onItemValuePropertyChanged.fire(this, {\n obj: item,\n name: name,\n oldValue: oldValue,\n newValue: newValue,\n propertyName: item.ownerPropertyName,\n });\n };\n Base.prototype.onPropertyValueChanged = function (name, oldValue, newValue) { };\n Base.prototype.propertyValueChanged = function (name, oldValue, newValue, arrayChanges, target) {\n if (this.isLoadingFromJson)\n return;\n this.updateBindings(name, newValue);\n this.onPropertyValueChanged(name, oldValue, newValue);\n this.onPropertyChanged.fire(this, {\n name: name,\n oldValue: oldValue,\n newValue: newValue,\n });\n this.doPropertyValueChangedCallback(name, oldValue, newValue, arrayChanges, this);\n if (!this.onPropChangeFunctions)\n return;\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n if (this.onPropChangeFunctions[i].name == name)\n this.onPropChangeFunctions[i].func(newValue);\n }\n };\n Object.defineProperty(Base.prototype, \"isInternal\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.doPropertyValueChangedCallback = function (name, oldValue, newValue, arrayChanges, target) {\n if (this.isInternal)\n return;\n if (!target)\n target = this;\n var notifier = this.getSurvey();\n if (!notifier)\n notifier = this;\n if (!!notifier.doPropertyValueChangedCallback) {\n notifier.onPropertyValueChangedCallback(name, oldValue, newValue, target, arrayChanges);\n }\n };\n /**\n * Register a function that will be called on a property value changed.\n * @param name the property name\n * @param func the function with no parameters that will be called on property changed.\n * @param key an optional parameter. If there is already a registered function for this property with the same key, it will be overwritten.\n */\n Base.prototype.registerFunctionOnPropertyValueChanged = function (name, func, key) {\n if (key === void 0) { key = null; }\n if (!this.onPropChangeFunctions) {\n this.onPropChangeFunctions = [];\n }\n if (key) {\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n var item = this.onPropChangeFunctions[i];\n if (item.name == name && item.key == key) {\n item.func = func;\n return;\n }\n }\n }\n this.onPropChangeFunctions.push({ name: name, func: func, key: key });\n };\n /**\n * Register a function that will be called on a property value changed from the names list.\n * @param names the list of properties names\n * @param func the function with no parameters that will be called on property changed.\n * @param key an optional parameter. If there is already a registered function for this property with the same key, it will be overwritten.\n */\n Base.prototype.registerFunctionOnPropertiesValueChanged = function (names, func, key) {\n if (key === void 0) { key = null; }\n for (var i = 0; i < names.length; i++) {\n this.registerFunctionOnPropertyValueChanged(names[i], func, key);\n }\n };\n /**\n * Unregister notification on property value changed\n * @param name the property name\n * @param key the key with which you have registered the notification for this property. It can be null.\n */\n Base.prototype.unRegisterFunctionOnPropertyValueChanged = function (name, key) {\n if (key === void 0) { key = null; }\n if (!this.onPropChangeFunctions)\n return;\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n var item = this.onPropChangeFunctions[i];\n if (item.name == name && item.key == key) {\n this.onPropChangeFunctions.splice(i, 1);\n return;\n }\n }\n };\n /**\n * Unregister notification on property value changed for all properties in the names list.\n * @param names the list of properties names\n * @param key the key with which you have registered the notification for this property. It can be null.\n */\n Base.prototype.unRegisterFunctionOnPropertiesValueChanged = function (names, key) {\n if (key === void 0) { key = null; }\n for (var i = 0; i < names.length; i++) {\n this.unRegisterFunctionOnPropertyValueChanged(names[i], key);\n }\n };\n Base.prototype.createCustomLocalizableObj = function (name) {\n var locStr = this.getLocalizableString(name);\n if (locStr || !this.getLocale)\n return;\n this.createLocalizableString(name, this);\n };\n Base.prototype.createLocalizableString = function (name, owner, useMarkDown) {\n var _this = this;\n if (useMarkDown === void 0) { useMarkDown = false; }\n var locStr = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](owner, useMarkDown, name);\n locStr.onStrChanged = function (oldValue, newValue) {\n _this.propertyValueChanged(name, oldValue, newValue);\n };\n if (!this.localizableStrings) {\n this.localizableStrings = {};\n }\n this.localizableStrings[name] = locStr;\n return locStr;\n };\n Base.prototype.getLocalizableString = function (name) {\n return !!this.localizableStrings ? this.localizableStrings[name] : null;\n };\n Base.prototype.getLocalizableStringText = function (name, defaultStr) {\n if (defaultStr === void 0) { defaultStr = \"\"; }\n var locStr = this.getLocalizableString(name);\n if (!locStr)\n return \"\";\n var res = locStr.text;\n return res ? res : defaultStr;\n };\n Base.prototype.setLocalizableStringText = function (name, value) {\n var locStr = this.getLocalizableString(name);\n if (!locStr)\n return;\n locStr.text = value;\n };\n Base.prototype.addUsedLocales = function (locales) {\n if (!!this.localizableStrings) {\n for (var key in this.localizableStrings) {\n var item = this.getLocalizableString(key);\n if (item)\n this.AddLocStringToUsedLocales(item, locales);\n }\n }\n if (!!this.arraysInfo) {\n for (var key in this.arraysInfo) {\n var items = this.getPropertyValue(key);\n if (!items || !items.length)\n continue;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (item && item.addUsedLocales) {\n item.addUsedLocales(locales);\n }\n }\n }\n }\n };\n Base.prototype.searchText = function (text, founded) {\n var strs = [];\n this.getSearchableLocalizedStrings(strs);\n for (var i = 0; i < strs.length; i++) {\n if (strs[i].setFindText(text)) {\n founded.push({ element: this, str: strs[i] });\n }\n }\n };\n Base.prototype.getSearchableLocalizedStrings = function (arr) {\n if (!!this.localizableStrings) {\n var keys_1 = [];\n this.getSearchableLocKeys(keys_1);\n for (var i = 0; i < keys_1.length; i++) {\n var item = this.getLocalizableString(keys_1[i]);\n if (item)\n arr.push(item);\n }\n }\n if (!this.arraysInfo)\n return;\n var keys = [];\n this.getSearchableItemValueKeys(keys);\n for (var i = 0; i < keys.length; i++) {\n var items = this.getPropertyValue(keys[i]);\n if (!items)\n continue;\n for (var j = 0; j < items.length; j++) {\n arr.push(items[j].locText);\n }\n }\n };\n Base.prototype.getSearchableLocKeys = function (keys) { };\n Base.prototype.getSearchableItemValueKeys = function (keys) { };\n Base.prototype.AddLocStringToUsedLocales = function (locStr, locales) {\n var locs = locStr.getLocales();\n for (var i = 0; i < locs.length; i++) {\n if (locales.indexOf(locs[i]) < 0) {\n locales.push(locs[i]);\n }\n }\n };\n Base.prototype.createItemValues = function (name) {\n var self = this;\n var result = this.createNewArray(name, function (item) {\n item.locOwner = self;\n item.ownerPropertyName = name;\n });\n this.arraysInfo[name].isItemValues = true;\n return result;\n };\n Base.prototype.notifyArrayChanged = function (ar, arrayChanges) {\n !!ar.onArrayChanged && ar.onArrayChanged(arrayChanges);\n };\n Base.prototype.createNewArrayCore = function (name) {\n var res = null;\n if (!!this.createArrayCoreHandler) {\n res = this.createArrayCoreHandler(this.propertyHash, name);\n }\n if (!res) {\n res = new Array();\n this.setPropertyValueCore(this.propertyHash, name, res);\n }\n return res;\n };\n Base.prototype.ensureArray = function (name, onPush, onRemove) {\n if (onPush === void 0) { onPush = null; }\n if (onRemove === void 0) { onRemove = null; }\n if (this.arraysInfo && this.arraysInfo[name]) {\n return;\n }\n return this.createNewArray(name, onPush, onRemove);\n };\n Base.prototype.createNewArray = function (name, onPush, onRemove) {\n if (onPush === void 0) { onPush = null; }\n if (onRemove === void 0) { onRemove = null; }\n var newArray = this.createNewArrayCore(name);\n if (!this.arraysInfo) {\n this.arraysInfo = {};\n }\n this.arraysInfo[name] = { onPush: onPush, isItemValues: false };\n var self = this;\n newArray.push = function (value) {\n var result = Object.getPrototypeOf(newArray).push.call(newArray, value);\n if (!self.isDisposedValue) {\n if (onPush)\n onPush(value, newArray.length - 1);\n var arrayChanges = new ArrayChanges(newArray.length - 1, 0, [value], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n newArray.unshift = function (value) {\n var result = Object.getPrototypeOf(newArray).unshift.call(newArray, value);\n if (!self.isDisposedValue) {\n if (onPush)\n onPush(value, newArray.length - 1);\n var arrayChanges = new ArrayChanges(0, 0, [value], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n newArray.pop = function () {\n var result = Object.getPrototypeOf(newArray).pop.call(newArray);\n if (!self.isDisposedValue) {\n if (onRemove)\n onRemove(result);\n var arrayChanges = new ArrayChanges(newArray.length - 1, 1, [], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n newArray.splice = function (start, deleteCount) {\n var _a;\n var items = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n items[_i - 2] = arguments[_i];\n }\n if (!start)\n start = 0;\n if (!deleteCount)\n deleteCount = 0;\n var result = (_a = Object.getPrototypeOf(newArray).splice).call.apply(_a, __spreadArray([newArray,\n start,\n deleteCount], items));\n if (!items)\n items = [];\n if (!self.isDisposedValue) {\n if (onRemove && result) {\n for (var i = 0; i < result.length; i++) {\n onRemove(result[i]);\n }\n }\n if (onPush) {\n for (var i = 0; i < items.length; i++) {\n onPush(items[i], start + i);\n }\n }\n var arrayChanges = new ArrayChanges(start, deleteCount, items, result);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n return newArray;\n };\n Base.prototype.getItemValueType = function () {\n return undefined;\n };\n Base.prototype.setArray = function (name, src, dest, isItemValues, onPush) {\n var deletedItems = [].concat(src);\n Object.getPrototypeOf(src).splice.call(src, 0, src.length);\n if (!!dest) {\n for (var i = 0; i < dest.length; i++) {\n var item = dest[i];\n if (isItemValues) {\n if (!!Base.createItemValue) {\n item = Base.createItemValue(item, this.getItemValueType());\n }\n }\n Object.getPrototypeOf(src).push.call(src, item);\n if (onPush)\n onPush(src[i]);\n }\n }\n var arrayChanges = new ArrayChanges(0, deletedItems.length, src, deletedItems);\n this.propertyValueChanged(name, deletedItems, src, arrayChanges);\n this.notifyArrayChanged(src, arrayChanges);\n };\n Base.prototype.isTwoValueEquals = function (x, y, caseInSensitive, trimString) {\n if (caseInSensitive === void 0) { caseInSensitive = false; }\n if (trimString === void 0) { trimString = false; }\n if (caseInSensitive) {\n x = this.getValueInLowCase(x);\n y = this.getValueInLowCase(y);\n }\n if (trimString) {\n x = this.trimValue(x);\n y = this.trimValue(y);\n }\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isTwoValueEquals(x, y);\n };\n Base.copyObject = function (dst, src) {\n for (var key in src) {\n var source = src[key];\n if (typeof source === \"object\") {\n source = {};\n this.copyObject(source, src[key]);\n }\n dst[key] = source;\n }\n };\n Base.prototype.copyCssClasses = function (dest, source) {\n if (!source)\n return;\n if (typeof source === \"string\" || source instanceof String) {\n dest[\"root\"] = source;\n }\n else {\n Base.copyObject(dest, source);\n }\n };\n Base.prototype.getValueInLowCase = function (val) {\n if (!!val && typeof val == \"string\")\n return val.toLowerCase();\n return val;\n };\n return Base;\n}());\n\nvar ArrayChanges = /** @class */ (function () {\n function ArrayChanges(index, deleteCount, itemsToAdd, deletedItems) {\n this.index = index;\n this.deleteCount = deleteCount;\n this.itemsToAdd = itemsToAdd;\n this.deletedItems = deletedItems;\n }\n return ArrayChanges;\n}());\n\nvar Event = /** @class */ (function () {\n function Event() {\n }\n Object.defineProperty(Event.prototype, \"isEmpty\", {\n get: function () {\n return !this.callbacks || this.callbacks.length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Event.prototype.fire = function (sender, options) {\n if (!this.callbacks)\n return;\n for (var i = 0; i < this.callbacks.length; i++) {\n this.callbacks[i](sender, options);\n if (!this.callbacks)\n return;\n }\n };\n Event.prototype.clear = function () {\n this.callbacks = undefined;\n };\n Event.prototype.add = function (func) {\n if (this.hasFunc(func))\n return;\n if (!this.callbacks) {\n this.callbacks = new Array();\n }\n this.callbacks.push(func);\n this.fireCallbackChanged();\n };\n Event.prototype.remove = function (func) {\n if (this.hasFunc(func)) {\n var index = this.callbacks.indexOf(func, 0);\n this.callbacks.splice(index, 1);\n this.fireCallbackChanged();\n }\n };\n Event.prototype.hasFunc = function (func) {\n if (this.callbacks == null)\n return false;\n return this.callbacks.indexOf(func, 0) > -1;\n };\n Event.prototype.fireCallbackChanged = function () {\n if (!!this.onCallbacksChanged) {\n this.onCallbacksChanged();\n }\n };\n return Event;\n}());\n\nvar EventBase = /** @class */ (function (_super) {\n __extends(EventBase, _super);\n function EventBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return EventBase;\n}(Event));\n\n\n\n/***/ }),\n\n/***/ \"./src/calculatedValue.ts\":\n/*!********************************!*\\\n !*** ./src/calculatedValue.ts ***!\n \\********************************/\n/*! exports provided: CalculatedValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return CalculatedValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n/**\n * The calculated value is a way to define the variable in Survey Creator.\n * It has two main properties: name and expression. Based on expression the value read-only property is automatically calculated.\n * The name property should be unique though all calculated values.\n * It uses survey.getVariable/seruvey.setVariable functions to get/set its value. The class do not store its value internally.\n * You may set includeIntoResult property to true to store this calculated value into survey result.\n */\nvar CalculatedValue = /** @class */ (function (_super) {\n __extends(CalculatedValue, _super);\n function CalculatedValue(name, expression) {\n if (name === void 0) { name = null; }\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.expressionIsRunning = false;\n _this.isCalculated = false;\n if (!!name) {\n _this.name = name;\n }\n if (!!expression) {\n _this.expression = expression;\n }\n return _this;\n }\n CalculatedValue.prototype.setOwner = function (data) {\n this.data = data;\n this.rerunExpression();\n };\n CalculatedValue.prototype.getType = function () {\n return \"calculatedvalue\";\n };\n CalculatedValue.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.data && !!this.data[\"getSurvey\"]\n ? this.data.getSurvey()\n : null;\n };\n Object.defineProperty(CalculatedValue.prototype, \"owner\", {\n get: function () {\n return this.data;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"name\", {\n /**\n * The calculated value name. It should be non empty and unique.\n */\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"name\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"includeIntoResult\", {\n /**\n * Set this property to true to include the non-empty calculated value into survey result, survey.data property.\n */\n get: function () {\n return this.getPropertyValue(\"includeIntoResult\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"includeIntoResult\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"expression\", {\n /**\n * The Expression that used to calculate the value. You may use standard operators like +, -, * and /, squares (). Here is the example of accessing the question value {questionname}.\n *
Example: \"({quantity} * {price}) * (100 - {discount}) / 100\"\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n this.rerunExpression();\n },\n enumerable: false,\n configurable: true\n });\n CalculatedValue.prototype.locCalculation = function () {\n this.expressionIsRunning = true;\n };\n CalculatedValue.prototype.unlocCalculation = function () {\n this.expressionIsRunning = false;\n };\n CalculatedValue.prototype.resetCalculation = function () {\n this.isCalculated = false;\n };\n CalculatedValue.prototype.doCalculation = function (calculatedValues, values, properties) {\n if (this.isCalculated)\n return;\n this.runExpressionCore(calculatedValues, values, properties);\n this.isCalculated = true;\n };\n CalculatedValue.prototype.runExpression = function (values, properties) {\n this.runExpressionCore(null, values, properties);\n };\n Object.defineProperty(CalculatedValue.prototype, \"value\", {\n get: function () {\n if (!this.data)\n return undefined;\n return this.data.getVariable(this.name);\n },\n enumerable: false,\n configurable: true\n });\n CalculatedValue.prototype.setValue = function (val) {\n if (!this.data)\n return;\n this.data.setVariable(this.name, val);\n };\n Object.defineProperty(CalculatedValue.prototype, \"canRunExpression\", {\n get: function () {\n return (!!this.data &&\n !this.isLoadingFromJson &&\n !!this.expression &&\n !this.expressionIsRunning &&\n !!this.name);\n },\n enumerable: false,\n configurable: true\n });\n CalculatedValue.prototype.rerunExpression = function () {\n if (!this.canRunExpression)\n return;\n this.runExpression(this.data.getFilteredValues(), this.data.getFilteredProperties());\n };\n CalculatedValue.prototype.runExpressionCore = function (calculatedValues, values, properties) {\n if (!this.canRunExpression)\n return;\n this.ensureExpression(values);\n this.locCalculation();\n if (!!calculatedValues) {\n this.runDependentExpressions(calculatedValues, values, properties);\n }\n this.expressionRunner.run(values, properties);\n };\n CalculatedValue.prototype.runDependentExpressions = function (calculatedValues, values, properties) {\n var variables = this.expressionRunner.getVariables();\n if (!variables)\n return;\n for (var i = 0; i < calculatedValues.length; i++) {\n var calcItem = calculatedValues[i];\n if (calcItem === this || variables.indexOf(calcItem.name) < 0)\n continue;\n calcItem.doCalculation(calculatedValues, values, properties);\n values[calcItem.name] = calcItem.value;\n }\n };\n CalculatedValue.prototype.ensureExpression = function (values) {\n var _this = this;\n if (!!this.expressionRunner)\n return;\n this.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_2__[\"ExpressionRunner\"](this.expression);\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, _this.value)) {\n _this.setValue(newValue);\n }\n _this.unlocCalculation();\n };\n };\n return CalculatedValue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"calculatedvalue\", [\n { name: \"!name\", isUnique: true },\n \"expression:expression\",\n \"includeIntoResult:boolean\",\n], function () {\n return new CalculatedValue();\n}, \"base\");\n\n\n/***/ }),\n\n/***/ \"./src/choicesRestful.ts\":\n/*!*******************************!*\\\n !*** ./src/choicesRestful.ts ***!\n \\*******************************/\n/*! exports provided: ChoicesRestful, ChoicesRestfull */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return ChoicesRestful; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return ChoicesRestfull; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar XmlParser = /** @class */ (function () {\n function XmlParser() {\n this.parser = new DOMParser();\n }\n XmlParser.prototype.assignValue = function (target, name, value) {\n if (Array.isArray(target[name])) {\n target[name].push(value);\n }\n else if (target[name] !== undefined) {\n target[name] = [target[name]].concat(value);\n }\n else if (typeof value === \"object\" &&\n Object.keys(value).length === 1 &&\n Object.keys(value)[0] === name) {\n target[name] = value[name];\n }\n else {\n target[name] = value;\n }\n };\n XmlParser.prototype.xml2Json = function (xmlNode, result) {\n if (xmlNode.children && xmlNode.children.length > 0) {\n for (var i = 0; i < xmlNode.children.length; i++) {\n var childNode = xmlNode.children[i];\n var childObject = {};\n this.xml2Json(childNode, childObject);\n this.assignValue(result, childNode.nodeName, childObject);\n }\n }\n else {\n this.assignValue(result, xmlNode.nodeName, xmlNode.textContent);\n }\n };\n XmlParser.prototype.parseXmlString = function (xmlString) {\n var xmlRoot = this.parser.parseFromString(xmlString, \"text/xml\");\n var json = {};\n this.xml2Json(xmlRoot, json);\n return json;\n };\n return XmlParser;\n}());\n/**\n * A definition for filling choices for checkbox, dropdown and radiogroup questions from resfull services.\n * The run method call a restful service and results can be get on getResultCallback.\n */\nvar ChoicesRestful = /** @class */ (function (_super) {\n __extends(ChoicesRestful, _super);\n function ChoicesRestful() {\n var _this = _super.call(this) || this;\n _this.lastObjHash = \"\";\n _this.isRunningValue = false;\n _this.processedUrl = \"\";\n _this.processedPath = \"\";\n _this.isUsingCacheFromUrl = undefined;\n _this.error = null;\n _this.createItemValue = function (value) {\n return new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value);\n };\n return _this;\n }\n Object.defineProperty(ChoicesRestful, \"EncodeParameters\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters = val;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.clearCache = function () {\n ChoicesRestful.itemsResult = {};\n ChoicesRestful.sendingSameRequests = {};\n };\n ChoicesRestful.addSameRequest = function (obj) {\n if (!obj.isUsingCache)\n return false;\n var hash = obj.objHash;\n var res = ChoicesRestful.sendingSameRequests[hash];\n if (!res) {\n ChoicesRestful.sendingSameRequests[obj.objHash] = [];\n return false;\n }\n res.push(obj);\n obj.isRunningValue = true;\n return true;\n };\n ChoicesRestful.unregisterSameRequests = function (obj, items) {\n if (!obj.isUsingCache)\n return;\n var res = ChoicesRestful.sendingSameRequests[obj.objHash];\n delete ChoicesRestful.sendingSameRequests[obj.objHash];\n if (!res)\n return;\n for (var i = 0; i < res.length; i++) {\n res[i].isRunningValue = false;\n if (!!res[i].getResultCallback) {\n res[i].getResultCallback(items);\n }\n }\n };\n ChoicesRestful.getCachedItemsResult = function (obj) {\n var hash = obj.objHash;\n var res = ChoicesRestful.itemsResult[hash];\n if (!res)\n return false;\n if (obj.getResultCallback) {\n obj.getResultCallback(res);\n }\n return true;\n };\n ChoicesRestful.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.owner ? this.owner.survey : null;\n };\n ChoicesRestful.prototype.run = function (textProcessor) {\n if (textProcessor === void 0) { textProcessor = null; }\n if (!this.url || !this.getResultCallback)\n return;\n this.processedText(textProcessor);\n if (!this.processedUrl) {\n this.doEmptyResultCallback({});\n this.lastObjHash = this.objHash;\n return;\n }\n if (this.lastObjHash === this.objHash)\n return;\n this.lastObjHash = this.objHash;\n this.error = null;\n if (this.useChangedItemsResults())\n return;\n if (ChoicesRestful.addSameRequest(this))\n return;\n this.sendRequest();\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isUsingCache\", {\n get: function () {\n if (this.isUsingCacheFromUrl === true)\n return true;\n if (this.isUsingCacheFromUrl === false)\n return false;\n return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].useCachingForChoicesRestful;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"isRunning\", {\n get: function () {\n return this.getIsRunning();\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.getIsRunning = function () {\n return this.isRunningValue;\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isWaitingForParameters\", {\n get: function () {\n return this.url && !this.processedUrl;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.useChangedItemsResults = function () {\n return ChoicesRestful.getCachedItemsResult(this);\n };\n ChoicesRestful.prototype.doEmptyResultCallback = function (serverResult) {\n var items = [];\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, serverResult);\n }\n this.getResultCallback(items);\n };\n ChoicesRestful.prototype.processedText = function (textProcessor) {\n var urlText = this.url;\n if (!!urlText) {\n urlText = urlText\n .replace(ChoicesRestful.cacheText, \"\")\n .replace(ChoicesRestful.noCacheText, \"\");\n }\n if (textProcessor) {\n var pUrl = textProcessor.processTextEx(urlText, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters);\n var pPath = textProcessor.processTextEx(this.path, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters);\n if (!pUrl.hasAllValuesOnLastRun || !pPath.hasAllValuesOnLastRun) {\n this.processedUrl = \"\";\n this.processedPath = \"\";\n }\n else {\n this.processedUrl = pUrl.text;\n this.processedPath = pPath.text;\n }\n }\n else {\n this.processedUrl = urlText;\n this.processedPath = this.path;\n }\n if (this.onProcessedUrlCallback) {\n this.onProcessedUrlCallback(this.processedUrl, this.processedPath);\n }\n };\n ChoicesRestful.prototype.parseResponse = function (response) {\n var parsedResponse;\n if (!!response &&\n typeof response.indexOf === \"function\" &&\n response.indexOf(\"<\") === 0) {\n var parser = new XmlParser();\n parsedResponse = parser.parseXmlString(response);\n }\n else {\n try {\n parsedResponse = JSON.parse(response);\n }\n catch (_a) {\n parsedResponse = (response || \"\")\n .split(\"\\n\")\n .map(function (s) { return s.trim(\" \"); })\n .filter(function (s) { return !!s; });\n }\n }\n return parsedResponse;\n };\n ChoicesRestful.prototype.sendRequest = function () {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", this.processedUrl);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n var loadingObjHash = this.objHash;\n xhr.onload = function () {\n self.beforeLoadRequest();\n if (xhr.status === 200) {\n self.onLoad(self.parseResponse(xhr.response), loadingObjHash);\n }\n else {\n self.onError(xhr.statusText, xhr.responseText);\n }\n };\n var options = { request: xhr };\n if (!!ChoicesRestful.onBeforeSendRequest) {\n ChoicesRestful.onBeforeSendRequest(this, options);\n }\n this.beforeSendRequest();\n options.request.send();\n };\n ChoicesRestful.prototype.getType = function () {\n return \"choicesByUrl\";\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isEmpty\", {\n get: function () {\n return (!this.url &&\n !this.path &&\n !this.valueName &&\n !this.titleName &&\n !this.imageLinkName);\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.getCustomPropertiesNames = function () {\n var properties = this.getCustomProperties();\n var res = new Array();\n for (var i = 0; i < properties.length; i++) {\n res.push(this.getCustomPropertyName(properties[i].name));\n }\n return res;\n };\n ChoicesRestful.prototype.getCustomPropertyName = function (propertyName) {\n return propertyName + \"Name\";\n };\n ChoicesRestful.prototype.getCustomProperties = function () {\n var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].getProperties(this.itemValueType);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].name === \"value\" ||\n properties[i].name === \"text\" ||\n properties[i].name === \"visibleIf\" ||\n properties[i].name === \"enableIf\")\n continue;\n res.push(properties[i]);\n }\n return res;\n };\n ChoicesRestful.prototype.setData = function (json) {\n this.clear();\n if (json.url)\n this.url = json.url;\n if (json.path)\n this.path = json.path;\n if (json.valueName)\n this.valueName = json.valueName;\n if (json.titleName)\n this.titleName = json.titleName;\n if (json.imageLinkName)\n this.imageLinkName = json.imageLinkName;\n if (json.allowEmptyResponse !== undefined)\n this.allowEmptyResponse = json.allowEmptyResponse;\n if (json.attachOriginalItems !== undefined)\n this.attachOriginalItems = json.attachOriginalItems;\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (json[properties[i]])\n this[properties[i]] = json[properties[i]];\n }\n };\n ChoicesRestful.prototype.getData = function () {\n if (this.isEmpty)\n return null;\n var res = {};\n if (this.url)\n res[\"url\"] = this.url;\n if (this.path)\n res[\"path\"] = this.path;\n if (this.valueName)\n res[\"valueName\"] = this.valueName;\n if (this.titleName)\n res[\"titleName\"] = this.titleName;\n if (this.imageLinkName)\n res[\"imageLinkName\"] = this.imageLinkName;\n if (this.allowEmptyResponse)\n res[\"allowEmptyResponse\"] = this.allowEmptyResponse;\n if (this.attachOriginalItems)\n res[\"attachOriginalItems\"] = this.attachOriginalItems;\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (this[properties[i]])\n res[properties[i]] = this[properties[i]];\n }\n return res;\n };\n Object.defineProperty(ChoicesRestful.prototype, \"url\", {\n /**\n * Gets or sets a link to a web service. You can use text preprocessing here.\n * For example, the following url: _https://restcountries.eu/rest/v2/region/{region}_ is changed based on the _region_ question's value.\n * SurveyJS automatically gets data from the web service when the value of the _region_ question changes.\n * @see path\n * @see valueName\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"url\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"url\", val);\n this.isUsingCacheFromUrl = undefined;\n if (!val)\n return;\n if (val.indexOf(ChoicesRestful.cacheText) > -1) {\n this.isUsingCacheFromUrl = true;\n }\n else {\n if (val.indexOf(ChoicesRestful.noCacheText) > -1) {\n this.isUsingCacheFromUrl = false;\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"path\", {\n /**\n * Use this property, if a web service returns a lot of information and you need only a part of it.\n * For example, a web service returns a list of countries and a list of capitals.\n * If you need a list of countries, set a correct path from which SurveyJS obtains the data, like: _DataList1\\DataList2_\n * @see url\n * @see valueName\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"path\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"path\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"valueName\", {\n /**\n * Gets or sets the name of a property (in the obtained data object) to which SurveyJS binds to provide values for choice items.\n * @see url\n * @see path\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"valueName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"valueName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"titleName\", {\n /**\n * Gets or sets the name of a property (in the obtained data object) to which SurveyJS binds to provide display texts for choice items.\n * @see url\n * @see path\n * @see valueeName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"titleName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"titleName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"imageLinkName\", {\n get: function () {\n return this.getPropertyValue(\"imageLinkName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageLinkName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"allowEmptyResponse\", {\n get: function () {\n return this.getPropertyValue(\"allowEmptyResponse\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"allowEmptyResponse\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"attachOriginalItems\", {\n get: function () {\n return this.getPropertyValue(\"attachOriginalItems\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"attachOriginalItems\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"itemValueType\", {\n get: function () {\n if (!this.owner)\n return \"itemvalue\";\n var prop = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.owner.getType(), \"choices\");\n if (!prop)\n return \"itemvalue\";\n if (prop.type == \"itemvalue[]\")\n return \"itemvalue\";\n return prop.type;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.clear = function () {\n this.url = \"\";\n this.path = \"\";\n this.valueName = \"\";\n this.titleName = \"\";\n this.imageLinkName = \"\";\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (this[properties[i]])\n this[properties[i]] = \"\";\n }\n };\n ChoicesRestful.prototype.beforeSendRequest = function () {\n this.isRunningValue = true;\n if (!!this.beforeSendRequestCallback) {\n this.beforeSendRequestCallback();\n }\n };\n ChoicesRestful.prototype.beforeLoadRequest = function () {\n this.isRunningValue = false;\n };\n ChoicesRestful.prototype.onLoad = function (result, loadingObjHash) {\n if (loadingObjHash === void 0) { loadingObjHash = null; }\n if (!loadingObjHash) {\n loadingObjHash = this.objHash;\n }\n var items = new Array();\n var updatedResult = this.getResultAfterPath(result);\n if (updatedResult && updatedResult[\"length\"]) {\n for (var i = 0; i < updatedResult.length; i++) {\n var itemValue = updatedResult[i];\n if (!itemValue)\n continue;\n var value = !!this.getItemValueCallback\n ? this.getItemValueCallback(itemValue)\n : this.getValue(itemValue);\n var item = this.createItemValue(value);\n this.setTitle(item, itemValue);\n this.setCustomProperties(item, itemValue);\n if (this.attachOriginalItems) {\n item.originalItem = itemValue;\n }\n var imageLink = this.getImageLink(itemValue);\n if (!!imageLink) {\n item.imageLink = imageLink;\n }\n items.push(item);\n }\n }\n else {\n if (!this.allowEmptyResponse) {\n this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestEmptyError\"](null, this.owner);\n }\n }\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, result);\n }\n if (this.isUsingCache) {\n ChoicesRestful.itemsResult[loadingObjHash] = items;\n }\n this.callResultCallback(items, loadingObjHash);\n ChoicesRestful.unregisterSameRequests(this, items);\n };\n ChoicesRestful.prototype.callResultCallback = function (items, loadingObjHash) {\n if (loadingObjHash != this.objHash)\n return;\n this.getResultCallback(items);\n };\n ChoicesRestful.prototype.setCustomProperties = function (item, itemValue) {\n var properties = this.getCustomProperties();\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n var val = this.getValueCore(itemValue, this.getPropertyBinding(prop.name));\n if (!this.isValueEmpty(val)) {\n item[prop.name] = val;\n }\n }\n };\n ChoicesRestful.prototype.getPropertyBinding = function (propertyName) {\n if (this[this.getCustomPropertyName(propertyName)])\n return this[this.getCustomPropertyName(propertyName)];\n if (this[propertyName])\n return this[propertyName];\n return propertyName;\n };\n ChoicesRestful.prototype.onError = function (status, response) {\n this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestError\"](status, response, this.owner);\n this.doEmptyResultCallback(response);\n ChoicesRestful.unregisterSameRequests(this, []);\n };\n ChoicesRestful.prototype.getResultAfterPath = function (result) {\n if (!result)\n return result;\n if (!this.processedPath)\n return result;\n var pathes = this.getPathes();\n for (var i = 0; i < pathes.length; i++) {\n result = result[pathes[i]];\n if (!result)\n return null;\n }\n return result;\n };\n ChoicesRestful.prototype.getPathes = function () {\n var pathes = [];\n if (this.processedPath.indexOf(\";\") > -1) {\n pathes = this.path.split(\";\");\n }\n else {\n pathes = this.processedPath.split(\",\");\n }\n if (pathes.length == 0)\n pathes.push(this.processedPath);\n return pathes;\n };\n ChoicesRestful.prototype.getValue = function (item) {\n if (!item)\n return null;\n if (this.valueName)\n return this.getValueCore(item, this.valueName);\n if (!(item instanceof Object))\n return item;\n var len = Object.keys(item).length;\n if (len < 1)\n return null;\n return item[Object.keys(item)[0]];\n };\n ChoicesRestful.prototype.setTitle = function (item, itemValue) {\n var title = this.titleName ? this.titleName : \"title\";\n var val = this.getValueCore(itemValue, title);\n if (!val)\n return;\n if (typeof val === \"string\") {\n item.text = val;\n }\n else {\n item.locText.setJson(val);\n }\n };\n ChoicesRestful.prototype.getImageLink = function (item) {\n var imageLink = this.imageLinkName ? this.imageLinkName : \"imageLink\";\n return this.getValueCore(item, imageLink);\n };\n ChoicesRestful.prototype.getValueCore = function (item, property) {\n if (!item)\n return null;\n if (property.indexOf(\".\") < 0)\n return item[property];\n var properties = property.split(\".\");\n for (var i = 0; i < properties.length; i++) {\n item = item[properties[i]];\n if (!item)\n return null;\n }\n return item;\n };\n Object.defineProperty(ChoicesRestful.prototype, \"objHash\", {\n get: function () {\n return (this.processedUrl +\n \";\" +\n this.processedPath +\n \";\" +\n this.valueName +\n \";\" +\n this.titleName +\n \";\" +\n this.imageLinkName);\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.cacheText = \"{CACHE}\";\n ChoicesRestful.noCacheText = \"{NOCACHE}\";\n ChoicesRestful.itemsResult = {};\n ChoicesRestful.sendingSameRequests = {};\n return ChoicesRestful;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * Obsolete, please use ChoicesRestful\n */\nvar ChoicesRestfull = /** @class */ (function (_super) {\n __extends(ChoicesRestfull, _super);\n function ChoicesRestfull() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ChoicesRestfull, \"EncodeParameters\", {\n get: function () {\n return ChoicesRestful.EncodeParameters;\n },\n set: function (val) {\n ChoicesRestful.EncodeParameters = val;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestfull.clearCache = function () {\n ChoicesRestful.clearCache();\n };\n Object.defineProperty(ChoicesRestfull, \"onBeforeSendRequest\", {\n get: function () {\n return ChoicesRestful.onBeforeSendRequest;\n },\n set: function (val) {\n ChoicesRestful.onBeforeSendRequest = val;\n },\n enumerable: false,\n configurable: true\n });\n return ChoicesRestfull;\n}(ChoicesRestful));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"choicesByUrl\", [\n \"url\",\n \"path\",\n \"valueName\",\n \"titleName\",\n {\n name: \"imageLinkName\",\n visibleIf: function (obj) {\n return !!obj && !!obj.owner && obj.owner.getType() == \"imagepicker\";\n },\n },\n { name: \"allowEmptyResponse:boolean\", default: false },\n { name: \"attachOriginalItems:boolean\", default: false, visible: false },\n], function () {\n return new ChoicesRestful();\n});\n\n\n/***/ }),\n\n/***/ \"./src/conditionProcessValue.ts\":\n/*!**************************************!*\\\n !*** ./src/conditionProcessValue.ts ***!\n \\**************************************/\n/*! exports provided: ProcessValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return ProcessValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n\nvar ProcessValue = /** @class */ (function () {\n function ProcessValue() {\n this.values = null;\n this.properties = null;\n }\n ProcessValue.prototype.getFirstName = function (text, obj) {\n if (obj === void 0) { obj = null; }\n if (!text)\n return text;\n var res = \"\";\n if (!!obj) {\n res = this.getFirstPropertyName(text, obj);\n if (!!res)\n return res;\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n if (ch == \".\" || ch == \"[\")\n break;\n res += ch;\n }\n return res;\n };\n ProcessValue.prototype.hasValue = function (text, values) {\n if (values === void 0) { values = null; }\n if (!values)\n values = this.values;\n var res = this.getValueCore(text, values);\n return res.hasValue;\n };\n ProcessValue.prototype.getValue = function (text, values) {\n if (values === void 0) { values = null; }\n if (!values)\n values = this.values;\n var res = this.getValueCore(text, values);\n return res.value;\n };\n ProcessValue.prototype.setValue = function (obj, text, value) {\n if (!text)\n return;\n var nonNestedObj = this.getNonNestedObject(obj, text, true);\n if (!nonNestedObj)\n return;\n obj = nonNestedObj.value;\n text = nonNestedObj.text;\n if (!!obj && !!text) {\n obj[text] = value;\n }\n };\n ProcessValue.prototype.getValueInfo = function (valueInfo) {\n if (!!valueInfo.path) {\n valueInfo.value = this.getValueFromPath(valueInfo.path, this.values);\n valueInfo.hasValue =\n valueInfo.value !== null && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(valueInfo.value);\n if (!valueInfo.hasValue &&\n valueInfo.path.length > 1 &&\n valueInfo.path[valueInfo.path.length - 1] == \"length\") {\n valueInfo.hasValue = true;\n valueInfo.value = 0;\n }\n return;\n }\n var res = this.getValueCore(valueInfo.name, this.values);\n valueInfo.value = res.value;\n valueInfo.hasValue = res.hasValue;\n valueInfo.path = res.hasValue ? res.path : null;\n };\n ProcessValue.prototype.getValueFromPath = function (path, values) {\n var index = 0;\n while (!!values && index < path.length) {\n var ind_name = path[index];\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(ind_name) &&\n Array.isArray(values) &&\n ind_name >= values.length)\n return null;\n values = values[ind_name];\n index++;\n }\n return values;\n };\n ProcessValue.prototype.getValueCore = function (text, values) {\n var res = { hasValue: false, value: null, path: null };\n var curValue = values;\n if (!curValue && curValue !== 0 && curValue !== false)\n return res;\n if (text &&\n text.lastIndexOf(\".length\") > -1 &&\n text.lastIndexOf(\".length\") === text.length - \".length\".length) {\n res.value = 0;\n res.hasValue = true;\n }\n var nonNestedObj = this.getNonNestedObject(curValue, text, false);\n if (!nonNestedObj)\n return res;\n res.path = nonNestedObj.path;\n res.value = !!nonNestedObj.text\n ? this.getObjectValue(nonNestedObj.value, nonNestedObj.text)\n : nonNestedObj.value;\n res.hasValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(res.value);\n return res;\n };\n ProcessValue.prototype.getNonNestedObject = function (obj, text, createPath) {\n var curName = this.getFirstPropertyName(text, obj, createPath);\n var path = !!curName ? [curName] : null;\n while (text != curName && !!obj) {\n var isArray = text[0] == \"[\";\n if (!isArray) {\n if (!curName && text == this.getFirstName(text))\n return { value: obj, text: text, path: path };\n obj = this.getObjectValue(obj, curName);\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(obj) && !createPath)\n return null;\n text = text.substr(curName.length);\n }\n else {\n var objInArray = this.getObjInArray(obj, text);\n if (!objInArray)\n return null;\n obj = objInArray.value;\n text = objInArray.text;\n path.push(objInArray.index);\n }\n if (!!text && text[0] == \".\") {\n text = text.substr(1);\n }\n curName = this.getFirstPropertyName(text, obj, createPath);\n if (!!curName) {\n path.push(curName);\n }\n }\n return { value: obj, text: text, path: path };\n };\n ProcessValue.prototype.getObjInArray = function (curValue, text) {\n if (!Array.isArray(curValue))\n return null;\n var index = 1;\n var str = \"\";\n while (index < text.length && text[index] != \"]\") {\n str += text[index];\n index++;\n }\n text = index < text.length ? text.substr(index + 1) : \"\";\n index = this.getIntValue(str);\n if (index < 0 || index >= curValue.length)\n return null;\n return { value: curValue[index], text: text, index: index };\n };\n ProcessValue.prototype.getFirstPropertyName = function (name, obj, createProp) {\n if (createProp === void 0) { createProp = false; }\n if (!name)\n return name;\n if (!obj)\n obj = {};\n if (obj.hasOwnProperty(name))\n return name;\n var nameInLow = name.toLowerCase();\n var A = nameInLow[0];\n var a = A.toUpperCase();\n for (var key in obj) {\n var first = key[0];\n if (first === a || first === A) {\n var keyName = key.toLowerCase();\n if (keyName == nameInLow)\n return key;\n if (nameInLow.length <= keyName.length)\n continue;\n var ch = nameInLow[keyName.length];\n if (ch != \".\" && ch != \"[\")\n continue;\n if (keyName == nameInLow.substr(0, keyName.length))\n return key;\n }\n }\n if (createProp && name[0] !== \"[\") {\n var ind = name.indexOf(\".\");\n if (ind > -1) {\n name = name.substr(0, ind);\n obj[name] = {};\n }\n return name;\n }\n return \"\";\n };\n ProcessValue.prototype.getObjectValue = function (obj, name) {\n if (!name)\n return null;\n return obj[name];\n };\n ProcessValue.prototype.getIntValue = function (str) {\n if (str == \"0\" || ((str | 0) > 0 && str % 1 == 0))\n return Number(str);\n return -1;\n };\n return ProcessValue;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/conditions.ts\":\n/*!***************************!*\\\n !*** ./src/conditions.ts ***!\n \\***************************/\n/*! exports provided: ExpressionRunnerBase, ConditionRunner, ExpressionRunner */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunnerBase\", function() { return ExpressionRunnerBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return ConditionRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return ExpressionRunner; });\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conditionsParser */ \"./src/conditionsParser.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar ExpressionRunnerBase = /** @class */ (function () {\n function ExpressionRunnerBase(expression) {\n this.processValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]();\n this.parser = new _conditionsParser__WEBPACK_IMPORTED_MODULE_1__[\"ConditionsParser\"]();\n this.isAsyncValue = false;\n this.hasFunctionValue = false;\n this.expression = expression;\n }\n Object.defineProperty(ExpressionRunnerBase.prototype, \"expression\", {\n get: function () {\n return this.expressionValue;\n },\n set: function (value) {\n if (this.expression === value)\n return;\n this.expressionValue = value;\n this.operand = this.parser.parseExpression(value);\n this.hasFunctionValue = this.canRun() ? this.operand.hasFunction() : false;\n this.isAsyncValue = this.hasFunction()\n ? this.operand.hasAsyncFunction()\n : false;\n },\n enumerable: false,\n configurable: true\n });\n ExpressionRunnerBase.prototype.getVariables = function () {\n if (!this.operand)\n return [];\n var variables = [];\n this.operand.setVariables(variables);\n return variables;\n };\n ExpressionRunnerBase.prototype.hasFunction = function () {\n return this.hasFunctionValue;\n };\n Object.defineProperty(ExpressionRunnerBase.prototype, \"isAsync\", {\n get: function () {\n return this.isAsyncValue;\n },\n enumerable: false,\n configurable: true\n });\n ExpressionRunnerBase.prototype.canRun = function () {\n return !!this.operand;\n };\n ExpressionRunnerBase.prototype.runCore = function (values, properties) {\n var _this = this;\n if (properties === void 0) { properties = null; }\n if (!this.operand)\n return null;\n this.processValue.values = values;\n this.processValue.properties = properties;\n if (!this.isAsync)\n return this.runValues();\n this.asyncFuncList = [];\n this.operand.addToAsyncList(this.asyncFuncList);\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n this.asyncFuncList[i].onAsyncReady = function () {\n _this.doAsyncFunctionReady();\n };\n }\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n this.asyncFuncList[i].evaluateAsync(this.processValue);\n }\n return false;\n };\n ExpressionRunnerBase.prototype.doAsyncFunctionReady = function () {\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n if (!this.asyncFuncList[i].isReady)\n return;\n }\n this.runValues();\n };\n ExpressionRunnerBase.prototype.runValues = function () {\n var res = this.operand.evaluate(this.processValue);\n this.doOnComplete(res);\n return res;\n };\n ExpressionRunnerBase.prototype.doOnComplete = function (res) { };\n return ExpressionRunnerBase;\n}());\n\nvar ConditionRunner = /** @class */ (function (_super) {\n __extends(ConditionRunner, _super);\n function ConditionRunner() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ConditionRunner.prototype.run = function (values, properties) {\n if (properties === void 0) { properties = null; }\n return this.runCore(values, properties) == true;\n };\n ConditionRunner.prototype.doOnComplete = function (res) {\n if (!!this.onRunComplete)\n this.onRunComplete(res == true);\n };\n return ConditionRunner;\n}(ExpressionRunnerBase));\n\nvar ExpressionRunner = /** @class */ (function (_super) {\n __extends(ExpressionRunner, _super);\n function ExpressionRunner() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ExpressionRunner.prototype.run = function (values, properties) {\n if (properties === void 0) { properties = null; }\n return this.runCore(values, properties);\n };\n ExpressionRunner.prototype.doOnComplete = function (res) {\n if (!!this.onRunComplete)\n this.onRunComplete(res);\n };\n return ExpressionRunner;\n}(ExpressionRunnerBase));\n\n\n\n/***/ }),\n\n/***/ \"./src/conditionsParser.ts\":\n/*!*********************************!*\\\n !*** ./src/conditionsParser.ts ***!\n \\*********************************/\n/*! exports provided: ConditionsParserError, ConditionsParser */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParserError\", function() { return ConditionsParserError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return ConditionsParser; });\n/* harmony import */ var _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expressions/expressionParser */ \"./src/expressions/expressionParser.ts\");\n\nvar ConditionsParserError = /** @class */ (function () {\n function ConditionsParserError(at, code) {\n this.at = at;\n this.code = code;\n }\n return ConditionsParserError;\n}());\n\nvar ConditionsParser = /** @class */ (function () {\n function ConditionsParser() {\n }\n ConditionsParser.prototype.patchExpression = function (text) {\n return text\n .replace(/=>/g, \">=\")\n .replace(/=/g, \"!=\")\n .replace(/==/g, \"= \")\n .replace(/equals/g, \"equal \")\n .replace(/notequals/g, \"notequal \");\n };\n ConditionsParser.prototype.createCondition = function (text) {\n return this.parseExpression(text);\n };\n ConditionsParser.prototype.parseExpression = function (text) {\n try {\n var result = ConditionsParser.parserCache[text];\n if (result === undefined) {\n result = Object(_expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"parse\"])(this.patchExpression(text));\n if (!result.hasAsyncFunction()) {\n ConditionsParser.parserCache[text] = result;\n }\n }\n return result;\n }\n catch (e) {\n if (e instanceof _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"SyntaxError\"]) {\n this.conditionError = new ConditionsParserError(e.location.start.offset, e.message);\n }\n }\n };\n Object.defineProperty(ConditionsParser.prototype, \"error\", {\n get: function () {\n return this.conditionError;\n },\n enumerable: false,\n configurable: true\n });\n ConditionsParser.parserCache = {};\n return ConditionsParser;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssbootstrap.ts\":\n/*!****************************************!*\\\n !*** ./src/defaultCss/cssbootstrap.ts ***!\n \\****************************************/\n/*! exports provided: defaultBootstrapCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return defaultBootstrapCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar defaultBootstrapCss = {\n root: \"sv_main sv_bootstrap_css\",\n container: \"sv_container\",\n header: \"panel-heading card-header\",\n body: \"panel-body card-block mt-4\",\n bodyEmpty: \"panel-body card-block mt-4 sv_body_empty\",\n footer: \"panel-footer card-footer\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"\",\n navigation: {\n complete: \"btn sv_complete_btn\",\n prev: \"btn sv_prev_btn\",\n next: \"btn sv_next_btn\",\n start: \"btn sv_start_btn\",\n preview: \"btn sv_preview_btn\",\n edit: \"btn sv_edit_btn\",\n },\n progress: \"progress center-block mx-auto mb-4\",\n progressBar: \"progress-bar\",\n progressTextUnderBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"\",\n title: \"\",\n description: \"small\",\n },\n pageTitle: \"\",\n pageDescription: \"small\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_qstn\",\n flowRoot: \"sv_q_flow sv_qstn\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n title: \"\",\n titleExpandable: \"sv_q_title_expandable\",\n number: \"sv_q_num\",\n description: \"small\",\n descriptionUnderInput: \"small\",\n requiredText: \"sv_q_required_text\",\n comment: \"form-control\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"has-error\",\n indent: 20,\n formGroup: \"form-group\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n titleOnError: \"\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"small sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\n },\n error: {\n root: \"alert alert-danger\",\n icon: \"glyphicon glyphicon-exclamation-sign\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qbln form-inline checkbox\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx form-inline\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\n itemInline: \"sv_q_checkbox_inline\",\n itemControl: \"\",\n itemDecorator: \"sv-hidden\",\n label: \"\",\n labelChecked: \"\",\n controlLabel: \"\",\n materialDecorator: \"checkbox-material\",\n other: \"sv_q_checkbox_other form-control\",\n column: \"sv_q_select_column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n comment: \"form-control\",\n dropdown: {\n root: \"\",\n control: \"form-control\",\n other: \"sv_q_dd_other form-control\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"table sv_q_matrix\",\n label: \"sv_q_m_label\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n cellLabel: \"sv_q_m_cell_label\",\n },\n matrixdropdown: {\n root: \"table\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n root: \"table\",\n button: \"button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n iconDrag: \"sv-matrixdynamic__drag-icon\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\n },\n paneldynamic: {\n root: \"\",\n navigation: \"sv-paneldynamic__navigation\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n title: \"sv-title sv-question__title\",\n button: \"button\",\n buttonAdd: \"button sv-paneldynamic__add-btn\",\n buttonRemove: \"sv_p_remove_btn\",\n buttonRemoveRight: \"button sv-paneldynamic__remove-btn--right\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\n },\n multipletext: {\n root: \"table\",\n itemTitle: \"\",\n itemValue: \"sv_q_mt_item_value form-control\",\n },\n radiogroup: {\n root: \"sv_qcbc form-inline\",\n item: \"radio\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n label: \"\",\n labelChecked: \"\",\n itemControl: \"\",\n itemDecorator: \"sv-hidden\",\n controlLabel: \"\",\n materialDecorator: \"circle\",\n other: \"sv_q_radiogroup_other form-control\",\n clearButton: \"sv_q_radiogroup_clear button\",\n column: \"sv_q_select_column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemHover: \"sv-button-group__item--hover\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_imagepicker_inline\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"btn-group\",\n item: \"btn btn-default btn-secondary\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n disabled: \"\",\n },\n text: \"form-control\",\n expression: \"form-control\",\n file: {\n root: \"sv_q_file\",\n placeholderInput: \"sv_q_file_placeholder\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv_q_file_input\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-hidden\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"alert alert-info\",\n error: \"alert alert-danger\",\n success: \"alert alert-success\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"modal-content\",\n body: \"modal-body\",\n header: {\n root: \"modal-header panel-title\",\n title: \"pull-left\",\n button: \"glyphicon pull-right\",\n buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n },\n },\n};\n_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"bootstrap\"] = defaultBootstrapCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssbootstrapmaterial.ts\":\n/*!************************************************!*\\\n !*** ./src/defaultCss/cssbootstrapmaterial.ts ***!\n \\************************************************/\n/*! exports provided: defaultBootstrapMaterialCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return defaultBootstrapMaterialCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar defaultBootstrapMaterialCss = {\n root: \"sv_main sv_bootstrapmaterial_css\",\n container: \"sv_container\",\n header: \"card-heading\",\n body: \"card-body\",\n bodyEmpty: \"card-body sv_body_empty\",\n footer: \"card-footer\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"\",\n navigation: {\n complete: \"btn sv_complete_btn btn-primary\",\n prev: \"btn sv_prev_btn btn-primary\",\n next: \"btn sv_next_btn btn-primary\",\n start: \"btn sv_start_btn btn-primary\",\n preview: \"btn sv_preview_btn btn-primary\",\n edit: \"btn sv_edit_btn btn-primary\",\n },\n progress: \"progress center-block mx-auto mb-4\",\n progressBar: \"progress-bar\",\n progressTextUnderBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"\",\n title: \"\",\n description: \"small\",\n },\n pageTitle: \"\",\n pageDescription: \"small\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_qstn form-group bmd-form-group\",\n flowRoot: \"sv_q_flow form-group bmd-form-group\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n requiredText: \"sv_q_required_text\",\n title: \"\",\n titleExpandable: \"sv_q_title_expandable\",\n number: \"sv_q_num\",\n description: \"small\",\n descriptionUnderInput: \"small\",\n comment: \"form-control\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"has-error\",\n indent: 20,\n formGroup: \"form-group bmd-form-group\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n titleOnError: \"\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"small sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\n },\n error: {\n root: \"alert alert-danger\",\n icon: \"glyphicon glyphicon-exclamation-sign\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qbln checkbox\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbx\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\n itemInline: \"sv_q_checkbox_inline\",\n itemDecorator: \"sv-hidden\",\n itemControl: \"\",\n label: \"\",\n labelChecked: \"\",\n controlLabel: \"\",\n materialDecorator: \"checkbox-decorator\",\n other: \"sv_q_checkbox_other form-control\",\n column: \"sv_q_select_column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n comment: \"form-control\",\n dropdown: {\n root: \"\",\n control: \"form-control\",\n other: \"sv_q_dd_other form-control\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"table sv_q_matrix\",\n row: \"form-group bmd-form-group\",\n label: \"sv_q_m_label radio-inline\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n cellLabel: \"sv_q_m_cell_label\",\n itemValue: \"form-control\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n materialDecorator: \"bmd-radio\",\n },\n matrixdropdown: {\n root: \"table\",\n itemValue: \"form-group bmd-form-group\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n mainRoot: \"sv_qstn\",\n flowRoot: \"sv_q_flow\",\n root: \"table\",\n button: \"btn btn-primary\",\n itemValue: \"form-group bmd-form-group\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n iconDrag: \"sv-matrixdynamic__drag-icon\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\n },\n paneldynamic: {\n root: \"\",\n navigation: \"sv-paneldynamic__navigation\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n title: \"sv-title sv-question__title\",\n button: \"button\",\n buttonAdd: \"button sv-paneldynamic__add-btn btn btn-primary\",\n buttonRemove: \"button sv-paneldynamic__remove-btn btn btn-primary\",\n buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\n },\n multipletext: {\n root: \"table\",\n itemTitle: \"\",\n row: \"form-group bmd-form-group\",\n itemValue: \"sv_q_mt_item_value form-control\",\n },\n radiogroup: {\n root: \"\",\n item: \"radio\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n itemDecorator: \"sv-hidden\",\n label: \"\",\n labelChecked: \"\",\n itemControl: \"\",\n controlLabel: \"sv_q_radiogroup_control_label\",\n materialDecorator: \"bmd-radio\",\n other: \"sv_q_radiogroup_other form-control\",\n clearButton: \"sv_q_radiogroup_clear button btn btn-primary\",\n column: \"sv_q_select_column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemHover: \"sv-button-group__item--hover\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_imagepicker_inline\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"btn-group\",\n item: \"btn btn-default btn-secondary\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n disabled: \"\",\n },\n text: \"form-control\",\n expression: \"form-control\",\n file: {\n root: \"form-group bmd-form-group is-fileinput sv_q_file\",\n placeholderInput: \"\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv_q_file_input\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-hidden\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"alert alert-info\",\n error: \"alert alert-danger\",\n success: \"alert alert-success\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"modal-content\",\n body: \"modal-body\",\n header: {\n root: \"modal-header card-title\",\n title: \"pull-left\",\n button: \"glyphicon pull-right\",\n buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n },\n },\n};\n_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"bootstrapmaterial\"] = defaultBootstrapMaterialCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssmodern.ts\":\n/*!*************************************!*\\\n !*** ./src/defaultCss/cssmodern.ts ***!\n \\*************************************/\n/*! exports provided: modernCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return modernCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar modernCss = {\n root: \"sv-root-modern\",\n container: \"sv-container-modern\",\n header: \"sv-title sv-container-modern__title\",\n body: \"sv-body\",\n bodyEmpty: \"sv-body sv-body--empty\",\n footer: \"sv-footer sv-body__footer sv-clearfix\",\n title: \"\",\n description: \"\",\n logo: \"sv-logo\",\n logoImage: \"sv-logo__image\",\n headerText: \"sv-header__text\",\n navigationButton: \"\",\n completedPage: \"sv-completedpage\",\n navigation: {\n complete: \"sv-btn sv-footer__complete-btn\",\n prev: \"sv-btn sv-footer__prev-btn\",\n next: \"sv-btn sv-footer__next-btn\",\n start: \"sv-btn sv-footer__start-btn\",\n preview: \"sv-btn sv-footer__preview-btn\",\n edit: \"sv-btn sv-footer__edit-btn\",\n },\n panel: {\n title: \"sv-title sv-panel__title\",\n titleExpandable: \"sv-panel__title--expandable\",\n titleOnError: \"sv-panel__title--error\",\n description: \"sv-description sv-panel__description\",\n container: \"sv-panel sv-row__panel\",\n content: \"sv-panel__content\",\n icon: \"sv-panel__icon\",\n iconExpanded: \"sv-panel__icon--expanded\",\n footer: \"sv-panel__footer\",\n requiredText: \"sv-panel__required-text\",\n number: \"sv-question__num\",\n },\n paneldynamic: {\n root: \"sv-paneldynamic\",\n navigation: \"sv-paneldynamic__navigation\",\n title: \"sv-title sv-question__title\",\n button: \"sv-btn\",\n buttonRemove: \"sv-paneldynamic__remove-btn\",\n buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\n buttonAdd: \"sv-paneldynamic__add-btn\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n separator: \"sv-paneldynamic__separator\",\n panelWrapper: \"sv-paneldynamic__panel-wrapper\",\n panelWrapperInRow: \"sv-paneldynamic__panel-wrapper--in-row\",\n },\n progress: \"sv-progress sv-body__progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-progress__text\",\n progressTextInBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"sv-page sv-body__page\",\n title: \"sv-title sv-page__title\",\n description: \"sv-description sv-page__description\",\n },\n pageTitle: \"sv-title sv-page__title\",\n pageDescription: \"sv-description sv-page__description\",\n row: \"sv-row sv-clearfix\",\n question: {\n mainRoot: \"sv-question sv-row__question\",\n flowRoot: \"sv-question sv-row__question sv-row__question--flow\",\n asCell: \"sv-table__cell\",\n header: \"sv-question__header\",\n headerLeft: \"sv-question__header--location--left\",\n headerTop: \"sv-question__header--location--top\",\n headerBottom: \"sv-question__header--location--bottom\",\n content: \"sv-question__content\",\n contentLeft: \"sv-question__content--left\",\n titleLeftRoot: \"\",\n titleOnAnswer: \"sv-question__title--answer\",\n titleOnError: \"sv-question__title--error\",\n title: \"sv-title sv-question__title\",\n titleExpandable: \"sv-question__title--expandable\",\n icon: \"sv-question__icon\",\n iconExpanded: \"sv-question__icon--expanded\",\n requiredText: \"sv-question__required-text\",\n number: \"sv-question__num\",\n description: \"sv-description sv-question__description\",\n descriptionUnderInput: \"sv-description sv-question__description\",\n comment: \"sv-comment\",\n required: \"sv-question--required\",\n titleRequired: \"sv-question__title--required\",\n indent: 20,\n footer: \"sv-question__footer\",\n formGroup: \"sv-question__form-group\",\n hasError: \"\",\n disabled: \"sv-question--disabled\",\n },\n image: { root: \"sv-image\", image: \"sv_image_image\" },\n error: {\n root: \"sv-question__erbox\",\n icon: \"\",\n item: \"\",\n locationTop: \"sv-question__erbox--location--top\",\n locationBottom: \"sv-question__erbox--location--bottom\",\n },\n checkbox: {\n root: \"sv-selectbase\",\n item: \"sv-item sv-checkbox sv-selectbase__item\",\n itemSelectAll: \"sv-checkbox--selectall\",\n itemNone: \"sv-checkbox--none\",\n itemDisabled: \"sv-item--disabled sv-checkbox--disabled\",\n itemChecked: \"sv-checkbox--checked\",\n itemHover: \"sv-checkbox--allowhover\",\n itemInline: \"sv-selectbase__item--inline\",\n label: \"sv-selectbase__label\",\n labelChecked: \"\",\n itemControl: \"sv-visuallyhidden sv-item__control\",\n itemDecorator: \"sv-item__svg sv-checkbox__svg\",\n controlLabel: \"sv-item__control-label\",\n materialDecorator: \"sv-item__decorator sv-checkbox__decorator\",\n other: \"sv-comment sv-question__other\",\n column: \"sv-selectbase__column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n radiogroup: {\n root: \"sv-selectbase\",\n item: \"sv-item sv-radio sv-selectbase__item\",\n itemInline: \"sv-selectbase__item--inline\",\n label: \"sv-selectbase__label\",\n labelChecked: \"\",\n itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n itemChecked: \"sv-radio--checked\",\n itemHover: \"sv-radio--allowhover\",\n itemControl: \"sv-visuallyhidden sv-item__control\",\n itemDecorator: \"sv-item__svg sv-radio__svg\",\n controlLabel: \"sv-item__control-label\",\n materialDecorator: \"sv-item__decorator sv-radio__decorator\",\n other: \"sv-comment sv-question__other\",\n clearButton: \"sv-btn sv-selectbase__clear-btn\",\n column: \"sv-selectbase__column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemHover: \"sv-button-group__item--hover\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n boolean: {\n root: \"sv_qbln\",\n small: \"sv-row__question--small\",\n item: \"sv-boolean sv-item\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-item--disabled sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n text: {\n root: \"sv-text\",\n small: \"sv-row__question--small\",\n onError: \"sv-text--error\",\n },\n multipletext: {\n root: \"sv-multipletext\",\n item: \"sv-multipletext__item\",\n itemTitle: \"sv-multipletext__item-title\",\n row: \"sv-multipletext__row\",\n cell: \"sv-multipletext__cell\",\n },\n dropdown: {\n root: \"\",\n small: \"sv-row__question--small\",\n control: \"sv-dropdown\",\n selectWrapper: \"\",\n other: \"sv-comment sv-question__other\",\n onError: \"sv-dropdown--error\",\n },\n imagepicker: {\n root: \"sv-imagepicker\",\n item: \"sv-imagepicker__item\",\n itemInline: \"sv-imagepicker__item--inline\",\n itemChecked: \"sv-imagepicker__item--checked\",\n itemDisabled: \"sv-imagepicker__item--disabled\",\n itemHover: \"sv-imagepicker__item--allowhover\",\n label: \"sv-imagepicker__label\",\n itemControl: \"sv-imagepicker__control\",\n image: \"sv-imagepicker__image\",\n itemText: \"sv-imagepicker__text\",\n clearButton: \"sv-btn\",\n other: \"sv-comment sv-question__other\",\n },\n matrix: {\n tableWrapper: \"sv-matrix\",\n root: \"sv-table sv-matrix-root\",\n rowError: \"sv-matrix__row--error\",\n cell: \"sv-table__cell sv-matrix__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n label: \"sv-item sv-radio sv-matrix__label\",\n itemValue: \"sv-visuallyhidden sv-item__control sv-radio__control\",\n itemChecked: \"sv-radio--checked\",\n itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n itemHover: \"sv-radio--allowhover\",\n materialDecorator: \"sv-item__decorator sv-radio__decorator\",\n itemDecorator: \"sv-item__svg sv-radio__svg\",\n cellText: \"sv-matrix__text\",\n cellTextSelected: \"sv-matrix__text--checked\",\n cellTextDisabled: \"sv-matrix__text--disabled\",\n },\n matrixdropdown: {\n root: \"sv-table sv-matrixdropdown\",\n cell: \"sv-table__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n row: \"sv-table__row\",\n detailRow: \"sv-table__row sv-table__row--detail\",\n detailRowText: \"sv-table__cell--detail-rowtext\",\n detailCell: \"sv-table__cell--detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv-table__cell--detail-button\",\n detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n detailIcon: \"sv-detail-panel__icon\",\n detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n detailPanelCell: \"sv-table__cell--detail-panel\",\n actionsCell: \"sv-table__cell sv-table__cell--actions\",\n },\n matrixdynamic: {\n root: \"sv-table sv-matrixdynamic\",\n cell: \"sv-table__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n button: \"sv-btn\",\n buttonAdd: \"sv-matrixdynamic__add-btn\",\n buttonRemove: \"sv-matrixdynamic__remove-btn\",\n iconAdd: \"\",\n iconRemove: \"\",\n iconDrag: \"sv-matrixdynamic__drag-icon\",\n row: \"sv-table__row\",\n detailRow: \"sv-table__row sv-table__row--detail\",\n detailCell: \"sv-table__cell--detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv-table__cell--detail-button\",\n detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n detailIcon: \"sv-detail-panel__icon\",\n detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n detailPanelCell: \"sv-table__cell--detail-panel\",\n actionsCell: \"sv-table__cell sv-table__cell--actions\",\n emptyRowsSection: \"sv-table__empty--rows--section\",\n emptyRowsText: \"sv-table__empty--rows--text\",\n emptyRowsButton: \"\",\n },\n rating: {\n root: \"sv-rating\",\n item: \"sv-rating__item\",\n selected: \"sv-rating__item--selected\",\n minText: \"sv-rating__min-text\",\n itemText: \"sv-rating__item-text\",\n maxText: \"sv-rating__max-text\",\n itemDisabled: \"sv-rating--disabled\",\n },\n comment: {\n root: \"sv-comment\",\n small: \"sv-row__question--small\",\n },\n expression: \"\",\n file: {\n root: \"sv-file\",\n other: \"sv-comment sv-question__other\",\n placeholderInput: \"sv-visuallyhidden\",\n preview: \"sv-file__preview\",\n fileSign: \"sv-hidden\",\n fileSignBottom: \"sv-file__sign\",\n fileDecorator: \"sv-file__decorator\",\n fileInput: \"sv-visuallyhidden\",\n noFileChosen: \"sv-description sv-file__no-file-chosen\",\n chooseFile: \"sv-btn sv-file__choose-btn\",\n controlDisabled: \"sv-file__choose-btn--disabled\",\n removeButton: \"sv-hidden\",\n removeButtonBottom: \"sv-btn sv-file__clean-btn\",\n removeFile: \"sv-hidden\",\n removeFileSvg: \"sv-file__remove-svg\",\n wrapper: \"sv-file__wrapper\",\n },\n signaturepad: {\n root: \"sv-signaturepad sjs_sp_container\",\n small: \"sv-row__question--small\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"\",\n error: \"\",\n success: \"\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"sv_window\",\n body: \"sv_window_content\",\n header: {\n root: \"sv_window_title\",\n title: \"\",\n button: \"\",\n buttonExpanded: \"\",\n buttonCollapsed: \"\",\n },\n },\n};\n_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"modern\"] = modernCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssstandard.ts\":\n/*!***************************************!*\\\n !*** ./src/defaultCss/cssstandard.ts ***!\n \\***************************************/\n/*! exports provided: surveyCss, defaultStandardCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return surveyCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return defaultStandardCss; });\nvar surveyCss = {\n currentType: \"\",\n getCss: function () {\n var loc = this.currentType ? this[this.currentType] : defaultStandardCss;\n if (!loc)\n loc = defaultStandardCss;\n return loc;\n },\n};\nvar defaultStandardCss = {\n root: \"sv_main sv_default_css\",\n container: \"sv_container\",\n header: \"sv_header\",\n body: \"sv_body\",\n bodyEmpty: \"sv_body sv_body_empty\",\n footer: \"sv_nav\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"sv_completed_page\",\n navigation: {\n complete: \"sv_complete_btn\",\n prev: \"sv_prev_btn\",\n next: \"sv_next_btn\",\n start: \"sv_start_btn\",\n preview: \"sv_preview_btn\",\n edit: \"sv_edit_btn\",\n },\n progress: \"sv_progress\",\n progressBar: \"sv_progress_bar\",\n progressTextInBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"sv_p_root\",\n title: \"sv_page_title\",\n description: \"\",\n },\n // TODO: move to the page object\n pageTitle: \"sv_page_title\",\n pageDescription: \"\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_q sv_qstn\",\n flowRoot: \"sv_q_flow sv_qstn\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n requiredText: \"sv_q_required_text\",\n title: \"sv_q_title\",\n titleExpandable: \"sv_q_title_expandable\",\n number: \"sv_q_num\",\n description: \"sv_q_description\",\n comment: \"\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"\",\n indent: 20,\n footer: \"sv_q_footer\",\n formGroup: \"form-group\",\n asCell: \"sv_matrix_cell\",\n icon: \"sv_question_icon\",\n iconExpanded: \"sv_expanded\",\n disabled: \"sv_q--disabled\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n titleOnError: \"\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\n },\n error: {\n root: \"sv_q_erbox\",\n icon: \"\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qcbc sv_qbln\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n sliderText: \"sv-hidden\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx\",\n item: \"sv_q_checkbox\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_checkbox_inline\",\n label: \"sv_q_checkbox_label\",\n labelChecked: \"\",\n itemControl: \"sv_q_checkbox_control_item\",\n itemDecorator: \"sv-hidden\",\n controlLabel: \"sv_q_checkbox_control_label\",\n materialDecorator: \"checkbox-material\",\n other: \"sv_q_other sv_q_checkbox_other\",\n column: \"sv_q_select_column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n comment: \"\",\n dropdown: {\n root: \"\",\n control: \"sv_q_dropdown_control\",\n selectWrapper: \"sv_select_wrapper\",\n other: \"sv_q_dd_other\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"sv_q_matrix\",\n label: \"sv_q_m_label\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n cell: \"sv_q_m_cell\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected\",\n cellLabel: \"sv_q_m_cell_label\",\n },\n matrixdropdown: {\n root: \"sv_q_matrix_dropdown\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n root: \"sv_q_matrix_dynamic\",\n button: \"sv_matrix_dynamic_button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n iconDrag: \"sv-matrixdynamic__drag-icon\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\n },\n paneldynamic: {\n root: \"sv_panel_dynamic\",\n title: \"sv_p_title\",\n button: \"\",\n buttonAdd: \"sv-paneldynamic__add-btn\",\n buttonRemove: \"sv_p_remove_btn\",\n buttonRemoveRight: \"sv_p_remove_btn_right\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\n },\n multipletext: {\n root: \"sv_q_mt\",\n itemTitle: \"sv_q_mt_title\",\n row: \"sv_q_mt_row\",\n itemValue: \"sv_q_mt_item_value sv_q_text_root\",\n },\n radiogroup: {\n root: \"sv_qcbc\",\n item: \"sv_q_radiogroup\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n itemDecorator: \"sv-hidden\",\n label: \"sv_q_radiogroup_label\",\n labelChecked: \"\",\n itemControl: \"sv_q_radiogroup_control_item\",\n controlLabel: \"\",\n materialDecorator: \"circle\",\n other: \"sv_q_other sv_q_radiogroup_other\",\n clearButton: \"sv_q_radiogroup_clear\",\n column: \"sv_q_select_column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemHover: \"sv-button-group__item--hover\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemInline: \"sv_q_imagepicker_inline\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"sv_q_rating\",\n item: \"sv_q_rating_item\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n },\n text: \"sv_q_text_root\",\n expression: \"\",\n file: {\n root: \"sv_q_file\",\n placeholderInput: \"sv-visuallyhidden\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv-visuallyhidden\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-file__decorator\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n chooseFile: \"sv_q_file_choose_button\",\n noFileChosen: \"sv_q_file_placeholder\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"\",\n error: \"\",\n success: \"\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"sv_window\",\n body: \"sv_window_content\",\n header: {\n root: \"sv_window_title\",\n title: \"\",\n button: \"\",\n buttonExpanded: \"\",\n buttonCollapsed: \"\",\n },\n },\n};\nsurveyCss[\"standard\"] = defaultStandardCss;\n\n\n/***/ }),\n\n/***/ \"./src/dragdrophelper.ts\":\n/*!*******************************!*\\\n !*** ./src/dragdrophelper.ts ***!\n \\*******************************/\n/*! exports provided: DragDropHelper */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return DragDropHelper; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar DragDropHelper = /** @class */ (function (_super) {\n __extends(DragDropHelper, _super);\n function DragDropHelper(surveyValue, creator) {\n var _this = _super.call(this) || this;\n _this.surveyValue = surveyValue;\n _this.creator = creator;\n _this.onBeforeDrop = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n _this.onAfterDrop = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n _this.draggedSurveyElement = null;\n _this.dropTargetSurveyElement = null;\n _this.draggedElementShortcut = null;\n _this.scrollIntervalId = null;\n _this.ghostSurveyElement = null;\n _this.isBottom = null;\n _this.isEdge = null;\n _this.pageOrPanel = null;\n _this.itemValueParentQuestion = null;\n _this.moveDraggedElement = function (event) {\n _this.moveShortcutElement(event);\n if (_this.isItemValueBeingDragged()) {\n _this.handleItemValueDragOver(event);\n }\n else {\n _this.handleSurveyElementDragOver(event);\n }\n };\n _this.handleEscapeButton = function (event) {\n if (event.keyCode == 27) {\n _this.clear();\n }\n };\n _this.banDropHere = function () {\n _this.dropTargetSurveyElement = null;\n _this.isBottom = null;\n _this.isEdge = null;\n _this.draggedElementShortcut.style.cursor = \"not-allowed\";\n };\n _this.banDropSurveyElement = function () {\n _this.removeGhostElementFromSurvey();\n _this.banDropHere();\n };\n _this.drop = function () {\n if (_this.isItemValueBeingDragged()) {\n _this.doDropItemValue();\n }\n else {\n _this.doDropSurveyElement();\n }\n _this.clear();\n };\n _this.doDropItemValue = function () {\n var isTop = !_this.isBottom;\n var choices = _this.itemValueParentQuestion.choices;\n var oldIndex = choices.indexOf(_this.draggedSurveyElement);\n var newIndex = choices.indexOf(_this.dropTargetSurveyElement);\n if (oldIndex < newIndex && isTop) {\n newIndex--;\n }\n else if (oldIndex > newIndex && _this.isBottom) {\n newIndex++;\n }\n _this.onBeforeDrop.fire(_this, null);\n choices.splice(oldIndex, 1);\n choices.splice(newIndex, 0, _this.draggedSurveyElement);\n _this.onAfterDrop.fire(_this, {\n draggedElement: _this.itemValueParentQuestion,\n });\n };\n _this.clear = function () {\n clearInterval(_this.scrollIntervalId);\n document.removeEventListener(\"pointermove\", _this.moveDraggedElement);\n document.removeEventListener(\"keydown\", _this.handleEscapeButton);\n _this.draggedElementShortcut.removeEventListener(\"pointerup\", _this.drop);\n document.body.removeChild(_this.draggedElementShortcut);\n _this.removeGhostElementFromSurvey();\n var prevEvent = DragDropHelper.prevEvent;\n prevEvent.element = null;\n prevEvent.x = -1;\n prevEvent.y = -1;\n _this.dropTargetSurveyElement = null;\n _this.draggedElementShortcut = null;\n _this.ghostSurveyElement = null;\n _this.draggedSurveyElement = null;\n _this.pageOrPanel = null;\n _this.itemValueParentQuestion = null;\n _this.isBottom = null;\n _this.isEdge = null;\n _this.scrollIntervalId = null;\n };\n return _this;\n }\n DragDropHelper.prototype.isItemValueBeingDragged = function () {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].isDescendantOf(this.draggedSurveyElement.getType(), \"itemvalue\");\n };\n Object.defineProperty(DragDropHelper.prototype, \"dropTargetDataAttributeName\", {\n get: function () {\n if (this.isItemValueBeingDragged()) {\n return \"[data-svc-drop-target-item-value]\";\n }\n return \"[data-svc-drop-target-element-name]\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DragDropHelper.prototype, \"survey\", {\n get: function () {\n return this.surveyValue || this.creator.survey;\n },\n enumerable: false,\n configurable: true\n });\n DragDropHelper.prototype.startDragToolboxItem = function (event, draggedElementJson) {\n var draggedElement = this.createElementFromJson(draggedElementJson);\n this.startDragSurveyElement(event, draggedElement);\n };\n DragDropHelper.prototype.startDragSurveyElement = function (event, draggedElement) {\n this.startDrag(event, draggedElement);\n };\n DragDropHelper.prototype.startDragItemValue = function (event, question, item) {\n var draggedElement = item;\n this.itemValueParentQuestion = question;\n this.startDrag(event, draggedElement);\n };\n DragDropHelper.prototype.startDrag = function (event, draggedElement) {\n this.draggedSurveyElement = draggedElement;\n this.ghostSurveyElement = this.createGhostSurveyElement();\n this.draggedElementShortcut = this.createDraggedElementShortcut();\n document.body.append(this.draggedElementShortcut);\n this.moveShortcutElement(event);\n document.addEventListener(\"pointermove\", this.moveDraggedElement);\n document.addEventListener(\"keydown\", this.handleEscapeButton);\n this.draggedElementShortcut.addEventListener(\"pointerup\", this.drop);\n };\n DragDropHelper.prototype.getItemValueGhostPosition = function (item) {\n if (this.dropTargetSurveyElement !== item)\n return null;\n if (this.isBottom)\n return \"bottom\";\n return \"top\";\n };\n DragDropHelper.prototype.createGhostSurveyElement = function () {\n var startWithNewLine = this.draggedSurveyElement.startWithNewLine;\n var className = \"svc-drag-drop-ghost\";\n var json = {\n type: \"html\",\n name: DragDropHelper.ghostSurveyElementName,\n html: \"
\",\n };\n var element = this.createElementFromJson(json);\n element.startWithNewLine = startWithNewLine;\n return element;\n };\n DragDropHelper.prototype.createDraggedElementShortcut = function () {\n var draggedElementShortcut = document.createElement(\"div\");\n var draggedElement = this.draggedSurveyElement;\n draggedElementShortcut.innerText =\n draggedElement[\"title\"] ||\n draggedElement[\"text\"] ||\n draggedElement[\"name\"];\n draggedElementShortcut.className = \"svc-drag-shortcut\";\n return draggedElementShortcut;\n };\n DragDropHelper.prototype.moveShortcutElement = function (event) {\n this.doScroll(event.clientY, event.clientX);\n var shortcutHeight = this.draggedElementShortcut.offsetHeight;\n var shortcutWidth = this.draggedElementShortcut.offsetWidth;\n var shortcutXCenter = shortcutWidth / 2;\n var shortcutYCenter = shortcutHeight / 2;\n var documentClientHeight = document.documentElement.clientHeight;\n var documentClientWidth = document.documentElement.clientWidth;\n if (event.clientX + shortcutXCenter >= documentClientWidth) {\n this.draggedElementShortcut.style.left =\n event.pageX -\n event.clientX +\n documentClientWidth -\n shortcutWidth +\n \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYCenter + \"px\";\n return;\n }\n if (event.clientX - shortcutXCenter <= 0) {\n this.draggedElementShortcut.style.left =\n event.pageX - event.clientX + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYCenter + \"px\";\n return;\n }\n if (event.clientY + shortcutYCenter >= documentClientHeight) {\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXCenter + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY -\n event.clientY +\n documentClientHeight -\n shortcutHeight +\n \"px\";\n return;\n }\n if (event.clientY - shortcutYCenter <= 0) {\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXCenter + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - event.clientY + \"px\";\n return;\n }\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXCenter + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYCenter + \"px\";\n };\n DragDropHelper.prototype.doScroll = function (clientY, clientX) {\n clearInterval(this.scrollIntervalId);\n var startScrollBoundary = 50;\n // need to import getScrollableParent method\n // let scrollableParentElement = getScrollableParent(dropZoneElement)\n // .parentNode;\n var scrollableParentElement = document.querySelector(\".svc-tab-designer.sd-root-modern\");\n var top = scrollableParentElement.getBoundingClientRect().top;\n var bottom = scrollableParentElement.getBoundingClientRect().bottom;\n var left = scrollableParentElement.getBoundingClientRect().left;\n var right = scrollableParentElement.getBoundingClientRect().right;\n if (clientY - top <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollTop -= 5;\n }, 10);\n }\n else if (bottom - clientY <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollTop += 5;\n }, 10);\n }\n else if (right - clientX <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollLeft += 5;\n }, 10);\n }\n else if (clientX - left <= startScrollBoundary) {\n this.scrollIntervalId = setInterval(function () {\n scrollableParentElement.scrollLeft -= 5;\n }, 10);\n }\n };\n DragDropHelper.prototype.handleItemValueDragOver = function (event) {\n this.draggedElementShortcut.style.cursor = \"grabbing\";\n var dragInfo = this.getDragInfo(event);\n var dropTargetSurveyElement = dragInfo.dropTargetSurveyElement;\n var isEdge = dragInfo.isEdge;\n var isBottom = dragInfo.isBottom;\n var choices = this.itemValueParentQuestion.choices;\n // shouldn't allow to drop on \"adorners\" (selectall, none, other)\n if (choices.indexOf(dropTargetSurveyElement) === -1) {\n this.banDropHere();\n return;\n }\n //drag over next item\n if (choices.indexOf(dropTargetSurveyElement) -\n choices.indexOf(this.draggedSurveyElement) ===\n 1) {\n isBottom = true;\n }\n //drag over prev item\n if (choices.indexOf(this.draggedSurveyElement) -\n choices.indexOf(dropTargetSurveyElement) ===\n 1) {\n isBottom = false;\n }\n if (dropTargetSurveyElement === this.draggedSurveyElement) {\n this.banDropHere();\n return true;\n }\n if (dropTargetSurveyElement === this.dropTargetSurveyElement &&\n isEdge === this.isEdge &&\n isBottom === this.isBottom)\n return;\n this.dropTargetSurveyElement = dropTargetSurveyElement;\n this.isEdge = isEdge;\n this.isBottom = isBottom;\n };\n DragDropHelper.prototype.handleSurveyElementDragOver = function (event) {\n this.draggedElementShortcut.style.cursor = \"grabbing\";\n var dragInfo = this.getDragInfo(event);\n var dropTargetSurveyElement = dragInfo.dropTargetSurveyElement;\n var isEdge = dragInfo.isEdge;\n var isBottom = dragInfo.isBottom;\n if (!dropTargetSurveyElement) {\n this.banDropSurveyElement();\n return;\n }\n if (DragDropHelper.restrictDragQuestionBetweenPages &&\n dropTargetSurveyElement[\"page\"] !==\n this.draggedSurveyElement[\"page\"]) {\n this.banDropSurveyElement();\n return;\n }\n if (dropTargetSurveyElement === this.ghostSurveyElement) {\n return;\n }\n if (dropTargetSurveyElement === this.dropTargetSurveyElement &&\n isEdge === this.isEdge &&\n isBottom === this.isBottom)\n return;\n this.isEdge = isEdge;\n this.isBottom = isBottom;\n this.dropTargetSurveyElement = dropTargetSurveyElement;\n this.insertGhostElementIntoSurvey();\n };\n DragDropHelper.prototype.getDragInfo = function (event) {\n var dropTargetHTMLElement = this.findDropTargetHTMLElementFromPoint(event.clientX, event.clientY);\n if (!dropTargetHTMLElement) {\n return { dropTargetSurveyElement: null, isEdge: true, isBottom: true };\n }\n var dropTargetSurveyElement = this.getDropTargetSurveyElementFromHTMLElement(dropTargetHTMLElement);\n var isEdge = true;\n if (!this.isItemValueBeingDragged()) {\n if (dropTargetSurveyElement.isPanel) {\n var panelDragInfo = this.getPanelDragInfo(dropTargetHTMLElement, dropTargetSurveyElement, event);\n dropTargetSurveyElement = panelDragInfo.dropTargetSurveyElement;\n isEdge = panelDragInfo.isEdge;\n }\n }\n if (dropTargetSurveyElement === this.draggedSurveyElement) {\n dropTargetSurveyElement = null;\n }\n var isBottom = this.calculateIsBottom(dropTargetHTMLElement, event.clientY);\n if (\n // TODO we can't drop on not empty page directly for now\n dropTargetSurveyElement &&\n dropTargetSurveyElement.getType() === \"page\" &&\n dropTargetSurveyElement.elements.length !== 0) {\n var elements = dropTargetSurveyElement.elements;\n dropTargetSurveyElement = isBottom\n ? elements[elements.length - 1]\n : elements[0];\n }\n return { dropTargetSurveyElement: dropTargetSurveyElement, isEdge: isEdge, isBottom: isBottom };\n };\n DragDropHelper.prototype.getPanelDragInfo = function (HTMLElement, surveyElement, event) {\n var isEdge = this.calculateIsEdge(HTMLElement, event.clientY);\n var dropTargetSurveyElement = surveyElement;\n if (!isEdge) {\n HTMLElement = this.findDeepestDropTargetChild(HTMLElement);\n dropTargetSurveyElement = this.getDropTargetSurveyElementFromHTMLElement(HTMLElement);\n }\n return { dropTargetSurveyElement: dropTargetSurveyElement, isEdge: isEdge };\n };\n DragDropHelper.prototype.getDropTargetSurveyElementName = function (element) {\n var dropTargetSurveyElementName = element.dataset.svcDropTargetElementName;\n if (!dropTargetSurveyElementName) {\n dropTargetSurveyElementName = element.dataset.svcDropTargetItemValue;\n }\n return dropTargetSurveyElementName;\n };\n DragDropHelper.prototype.getDropTargetSurveyElementFromHTMLElement = function (element) {\n var result = undefined;\n var dropTargetName = this.getDropTargetSurveyElementName(element);\n var isDragOverInnerPanel = false;\n if (!dropTargetName) {\n var nearestDropTargetElement = element.parentElement.closest(this.dropTargetDataAttributeName);\n dropTargetName = this.getDropTargetSurveyElementName(nearestDropTargetElement);\n isDragOverInnerPanel =\n nearestDropTargetElement !== element && !!dropTargetName;\n }\n if (!dropTargetName) {\n throw new Error(\"Can't find drop target survey element name\");\n }\n if (dropTargetName === DragDropHelper.ghostSurveyElementName) {\n return this.ghostSurveyElement;\n }\n // drop to page\n if (dropTargetName === \"newGhostPage\") {\n result = DragDropHelper.newGhostPage;\n }\n else {\n result = this.survey.getPageByName(dropTargetName);\n }\n // drop to element (question or panel)\n if (!result) {\n var element_1;\n this.survey.pages.forEach(function (page) {\n element_1 = page.getElementByName(dropTargetName);\n if (element_1)\n result = element_1;\n });\n if (!!result &&\n result.getType() === \"paneldynamic\" &&\n isDragOverInnerPanel) {\n var page = result.page;\n result = result.template;\n result.page = page;\n }\n }\n // drop to item-value\n if (!result) {\n result = this.itemValueParentQuestion.choices.filter(function (choice) { return choice.value === dropTargetName; })[0];\n }\n return result;\n };\n DragDropHelper.prototype.calculateMiddleOfHTMLElement = function (HTMLElement) {\n var rect = HTMLElement.getBoundingClientRect();\n return rect.y + rect.height / 2;\n };\n DragDropHelper.prototype.calculateIsBottom = function (HTMLElement, clientY) {\n var middle = this.calculateMiddleOfHTMLElement(HTMLElement);\n return clientY >= middle;\n };\n DragDropHelper.prototype.calculateIsEdge = function (HTMLElement, clientY) {\n var middle = this.calculateMiddleOfHTMLElement(HTMLElement);\n return Math.abs(clientY - middle) >= DragDropHelper.edgeHeight;\n };\n DragDropHelper.prototype.findDropTargetHTMLElement = function (draggedOverNode) {\n if (!draggedOverNode)\n return null;\n var selector = this.dropTargetDataAttributeName;\n var dropTargetHTMLElement = draggedOverNode.querySelector(selector) ||\n draggedOverNode.closest(selector);\n return dropTargetHTMLElement;\n };\n DragDropHelper.prototype.findDropTargetHTMLElementFromPoint = function (clientX, clientY) {\n this.draggedElementShortcut.hidden = true;\n var draggedOverNode = document.elementFromPoint(clientX, clientY);\n this.draggedElementShortcut.hidden = false;\n return this.findDropTargetHTMLElement(draggedOverNode);\n };\n DragDropHelper.prototype.findDeepestDropTargetChild = function (parent) {\n var selector = \"[data-svc-drop-target-element-name]\";\n var result = parent;\n while (!!parent) {\n result = parent;\n parent = parent.querySelector(selector);\n }\n return result;\n };\n DragDropHelper.prototype.insertGhostElementIntoSurvey = function () {\n this.removeGhostElementFromSurvey();\n this.ghostSurveyElement.name = DragDropHelper.ghostSurveyElementName; //TODO why do we need setup it manually see createGhostSurveyElement method\n this.pageOrPanel = this.dropTargetSurveyElement.isPage\n ? this.dropTargetSurveyElement\n : this.dropTargetSurveyElement[\"page\"];\n this.pageOrPanel.dragDropStart(this.draggedSurveyElement, this.ghostSurveyElement, DragDropHelper.nestedPanelDepth);\n return this.pageOrPanel.dragDropMoveTo(this.dropTargetSurveyElement, this.isBottom, this.isEdge);\n };\n DragDropHelper.prototype.insertRealElementIntoSurvey = function () {\n this.removeGhostElementFromSurvey();\n // ghost new page\n if (this.dropTargetSurveyElement.isPage &&\n this.dropTargetSurveyElement[\"_isGhost\"]) {\n this.dropTargetSurveyElement[\"_addGhostPageViewMobel\"]();\n }\n // EO ghost new page\n // fake target element (need only for \"startWithNewLine:false\" feature)\n //TODO need for dragDrop helper in library\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(this.draggedSurveyElement);\n json[\"type\"] = this.draggedSurveyElement.getType();\n var fakeTargetElement = this.createFakeTargetElement(this.draggedSurveyElement.name, json);\n // EO fake target element\n this.pageOrPanel.dragDropStart(this.draggedSurveyElement, fakeTargetElement, DragDropHelper.nestedPanelDepth);\n this.pageOrPanel.dragDropMoveTo(this.dropTargetSurveyElement, this.isBottom, this.isEdge);\n this.onBeforeDrop.fire(this, null);\n var newElement = this.pageOrPanel.dragDropFinish();\n this.onAfterDrop.fire(this, { draggedElement: newElement });\n };\n DragDropHelper.prototype.removeGhostElementFromSurvey = function () {\n if (!!this.pageOrPanel)\n this.pageOrPanel.dragDropFinish(true);\n };\n DragDropHelper.prototype.createElementFromJson = function (json) {\n var element = this.createNewElement(json);\n if (element[\"setSurveyImpl\"]) {\n element[\"setSurveyImpl\"](this.survey);\n }\n else {\n element[\"setData\"](this.survey);\n }\n element.renderWidth = \"100%\";\n return element;\n };\n DragDropHelper.prototype.createNewElement = function (json) {\n var newElement = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(json[\"type\"]);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, newElement);\n return newElement;\n };\n DragDropHelper.prototype.createFakeTargetElement = function (elementName, json) {\n if (!elementName || !json)\n return null;\n var targetElement = null;\n targetElement = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(json[\"type\"]);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, targetElement);\n targetElement.name = elementName;\n if (targetElement[\"setSurveyImpl\"]) {\n targetElement[\"setSurveyImpl\"](this.survey);\n }\n else {\n targetElement[\"setData\"](this.survey);\n }\n targetElement.renderWidth = \"100%\";\n return targetElement;\n };\n DragDropHelper.prototype.doDropSurveyElement = function () {\n if (this.dropTargetSurveyElement) {\n this.insertRealElementIntoSurvey();\n }\n };\n DragDropHelper.restrictDragQuestionBetweenPages = false;\n DragDropHelper.edgeHeight = 30;\n DragDropHelper.nestedPanelDepth = -1;\n DragDropHelper.prevEvent = {\n element: null,\n x: -1,\n y: -1,\n };\n DragDropHelper.newGhostPage = null;\n DragDropHelper.ghostSurveyElementName = \"svc-drag-drop-ghost-survey-element-name\"; // before renaming use globa search (we have also css selectors)\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], DragDropHelper.prototype, \"dropTargetSurveyElement\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], DragDropHelper.prototype, \"isBottom\", void 0);\n return DragDropHelper;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dxSurveyService.ts\":\n/*!********************************!*\\\n !*** ./src/dxSurveyService.ts ***!\n \\********************************/\n/*! exports provided: dxSurveyService */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return dxSurveyService; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n\n/**\n * The class contains methods to work with api.surveyjs.io service.\n */\nvar dxSurveyService = /** @class */ (function () {\n function dxSurveyService() {\n }\n Object.defineProperty(dxSurveyService, \"serviceUrl\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].surveyServiceUrl;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].surveyServiceUrl = val;\n },\n enumerable: false,\n configurable: true\n });\n dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getSurvey?surveyId=\" + surveyId);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n xhr.onload = function () {\n var result = JSON.parse(xhr.response);\n onLoad(xhr.status == 200, result, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.getSurveyJsonAndIsCompleted = function (surveyId, clientId, onLoad) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", dxSurveyService.serviceUrl +\n \"/getSurveyAndIsCompleted?surveyId=\" +\n surveyId +\n \"&clientId=\" +\n clientId);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n xhr.onload = function () {\n var result = JSON.parse(xhr.response);\n var surveyJson = result ? result.survey : null;\n var isCompleted = result ? result.isCompleted : null;\n onLoad(xhr.status == 200, surveyJson, isCompleted, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) {\n if (clientId === void 0) { clientId = null; }\n if (isPartialCompleted === void 0) { isPartialCompleted = false; }\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/post/\");\n xhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n var data = { postId: postId, surveyResult: JSON.stringify(result) };\n if (clientId)\n data[\"clientId\"] = clientId;\n if (isPartialCompleted)\n data[\"isPartialCompleted\"] = true;\n var dataStringify = JSON.stringify(data);\n var self = this;\n xhr.onload = xhr.onerror = function () {\n if (!onSendResult)\n return;\n onSendResult(xhr.status === 200, xhr.response, xhr);\n };\n xhr.send(dataStringify);\n };\n dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) {\n var xhr = new XMLHttpRequest();\n xhr.onload = xhr.onerror = function () {\n if (!onSendFile)\n return;\n onSendFile(xhr.status == 200, JSON.parse(xhr.response));\n };\n xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/upload/\", true);\n var formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"postId\", postId);\n xhr.send(formData);\n };\n dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) {\n var xhr = new XMLHttpRequest();\n var data = \"resultId=\" + resultId + \"&name=\" + name;\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getResult?\" + data);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n xhr.onload = function () {\n var result = null;\n var list = null;\n if (xhr.status == 200) {\n result = JSON.parse(xhr.response);\n list = [];\n for (var key in result.QuestionResult) {\n var el = { name: key, value: result.QuestionResult[key] };\n list.push(el);\n }\n }\n onGetResult(xhr.status == 200, result, list, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) {\n var xhr = new XMLHttpRequest();\n var data = \"resultId=\" + resultId + \"&clientId=\" + clientId;\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/isCompleted?\" + data);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n xhr.onload = function () {\n var result = null;\n if (xhr.status == 200) {\n result = JSON.parse(xhr.response);\n }\n onIsCompleted(xhr.status == 200, result, xhr.response);\n };\n xhr.send();\n };\n return dxSurveyService;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/chunks/localization.ts\":\n/*!********************************************!*\\\n !*** ./src/entries/chunks/localization.ts ***!\n \\********************************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _localization_arabic__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../localization/arabic */ \"./src/localization/arabic.ts\");\n/* harmony import */ var _localization_basque__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../localization/basque */ \"./src/localization/basque.ts\");\n/* harmony import */ var _localization_bulgarian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../localization/bulgarian */ \"./src/localization/bulgarian.ts\");\n/* harmony import */ var _localization_catalan__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../localization/catalan */ \"./src/localization/catalan.ts\");\n/* harmony import */ var _localization_croatian__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../localization/croatian */ \"./src/localization/croatian.ts\");\n/* harmony import */ var _localization_czech__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../localization/czech */ \"./src/localization/czech.ts\");\n/* harmony import */ var _localization_danish__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../localization/danish */ \"./src/localization/danish.ts\");\n/* harmony import */ var _localization_dutch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../localization/dutch */ \"./src/localization/dutch.ts\");\n/* harmony import */ var _localization_estonian__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../localization/estonian */ \"./src/localization/estonian.ts\");\n/* harmony import */ var _localization_finnish__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../localization/finnish */ \"./src/localization/finnish.ts\");\n/* harmony import */ var _localization_french__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../localization/french */ \"./src/localization/french.ts\");\n/* harmony import */ var _localization_georgian__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../localization/georgian */ \"./src/localization/georgian.ts\");\n/* harmony import */ var _localization_german__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../localization/german */ \"./src/localization/german.ts\");\n/* harmony import */ var _localization_greek__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../localization/greek */ \"./src/localization/greek.ts\");\n/* harmony import */ var _localization_hebrew__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../localization/hebrew */ \"./src/localization/hebrew.ts\");\n/* harmony import */ var _localization_hindi__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../localization/hindi */ \"./src/localization/hindi.ts\");\n/* harmony import */ var _localization_hungarian__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../localization/hungarian */ \"./src/localization/hungarian.ts\");\n/* harmony import */ var _localization_icelandic__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../localization/icelandic */ \"./src/localization/icelandic.ts\");\n/* harmony import */ var _localization_indonesian__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../localization/indonesian */ \"./src/localization/indonesian.ts\");\n/* harmony import */ var _localization_italian__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../localization/italian */ \"./src/localization/italian.ts\");\n/* harmony import */ var _localization_japanese__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../localization/japanese */ \"./src/localization/japanese.ts\");\n/* harmony import */ var _localization_kazakh__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../localization/kazakh */ \"./src/localization/kazakh.ts\");\n/* harmony import */ var _localization_korean__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../localization/korean */ \"./src/localization/korean.ts\");\n/* harmony import */ var _localization_latvian__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../localization/latvian */ \"./src/localization/latvian.ts\");\n/* harmony import */ var _localization_lithuanian__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../localization/lithuanian */ \"./src/localization/lithuanian.ts\");\n/* harmony import */ var _localization_macedonian__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../localization/macedonian */ \"./src/localization/macedonian.ts\");\n/* harmony import */ var _localization_norwegian__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../localization/norwegian */ \"./src/localization/norwegian.ts\");\n/* harmony import */ var _localization_persian__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../localization/persian */ \"./src/localization/persian.ts\");\n/* harmony import */ var _localization_polish__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../localization/polish */ \"./src/localization/polish.ts\");\n/* harmony import */ var _localization_portuguese__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../localization/portuguese */ \"./src/localization/portuguese.ts\");\n/* harmony import */ var _localization_portuguese_br__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../localization/portuguese-br */ \"./src/localization/portuguese-br.ts\");\n/* harmony import */ var _localization_romanian__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../localization/romanian */ \"./src/localization/romanian.ts\");\n/* harmony import */ var _localization_russian__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../localization/russian */ \"./src/localization/russian.ts\");\n/* harmony import */ var _localization_serbian__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../localization/serbian */ \"./src/localization/serbian.ts\");\n/* harmony import */ var _localization_simplified_chinese__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../localization/simplified-chinese */ \"./src/localization/simplified-chinese.ts\");\n/* harmony import */ var _localization_spanish__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../localization/spanish */ \"./src/localization/spanish.ts\");\n/* harmony import */ var _localization_swahili__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../localization/swahili */ \"./src/localization/swahili.ts\");\n/* harmony import */ var _localization_swedish__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../localization/swedish */ \"./src/localization/swedish.ts\");\n/* harmony import */ var _localization_tajik__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../localization/tajik */ \"./src/localization/tajik.ts\");\n/* harmony import */ var _localization_thai__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../localization/thai */ \"./src/localization/thai.ts\");\n/* harmony import */ var _localization_traditional_chinese__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../localization/traditional-chinese */ \"./src/localization/traditional-chinese.ts\");\n/* harmony import */ var _localization_turkish__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../localization/turkish */ \"./src/localization/turkish.ts\");\n/* harmony import */ var _localization_ukrainian__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../localization/ukrainian */ \"./src/localization/ukrainian.ts\");\n/* harmony import */ var _localization_vietnamese__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../localization/vietnamese */ \"./src/localization/vietnamese.ts\");\n/* harmony import */ var _localization_welsh__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../../localization/welsh */ \"./src/localization/welsh.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/chunks/model.ts\":\n/*!*************************************!*\\\n !*** ./src/entries/chunks/model.ts ***!\n \\*************************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, ArrayChanges, SurveyError, SurveyElement, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2Click, loadFileFromBase64, createSvg, surveyCss, DragDropHelper */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return Version; });\n/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../main.scss */ \"./src/main.scss\");\n/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_main_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../settings */ \"./src/settings.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../helpers */ \"./src/helpers.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"]; });\n\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../validator */ \"./src/validator.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ValidatorRunner\"]; });\n\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../itemvalue */ \"./src/itemvalue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"]; });\n\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../base */ \"./src/base.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"ArrayChanges\"]; });\n\n/* harmony import */ var _survey_error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../survey-error */ \"./src/survey-error.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _survey_error__WEBPACK_IMPORTED_MODULE_6__[\"SurveyError\"]; });\n\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../survey-element */ \"./src/survey-element.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_7__[\"SurveyElement\"]; });\n\n/* harmony import */ var _calculatedValue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../calculatedValue */ \"./src/calculatedValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _calculatedValue__WEBPACK_IMPORTED_MODULE_8__[\"CalculatedValue\"]; });\n\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../error */ \"./src/error.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"ExceedSizeError\"]; });\n\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../localizablestring */ \"./src/localizablestring.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableStrings\"]; });\n\n/* harmony import */ var _expressionItems__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../expressionItems */ \"./src/expressionItems.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_11__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_11__[\"UrlConditionItem\"]; });\n\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_12__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_12__[\"ChoicesRestfull\"]; });\n\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_13__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_13__[\"registerFunction\"]; });\n\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../conditions */ \"./src/conditions.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ExpressionRunner\"]; });\n\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"ArrayOperand\"]; });\n\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../conditionsParser */ \"./src/conditionsParser.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _conditionsParser__WEBPACK_IMPORTED_MODULE_16__[\"ConditionsParser\"]; });\n\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__[\"ProcessValue\"]; });\n\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"propertyArray\"]; });\n\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony import */ var _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../question_matrixdropdown */ \"./src/question_matrixdropdown.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_20__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_20__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony import */ var _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../question_matrixdynamic */ \"./src/question_matrixdynamic.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_21__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_21__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony import */ var _question_matrix__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../question_matrix */ \"./src/question_matrix.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_22__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_22__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_22__[\"QuestionMatrixModel\"]; });\n\n/* harmony import */ var _question_multipletext__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../question_multipletext */ \"./src/question_multipletext.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_23__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_23__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../panel */ \"./src/panel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_24__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _panel__WEBPACK_IMPORTED_MODULE_24__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_24__[\"QuestionRowModel\"]; });\n\n/* harmony import */ var _flowpanel__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../flowpanel */ \"./src/flowpanel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _flowpanel__WEBPACK_IMPORTED_MODULE_25__[\"FlowPanelModel\"]; });\n\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../page */ \"./src/page.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _page__WEBPACK_IMPORTED_MODULE_26__[\"PageModel\"]; });\n\n/* harmony import */ var _template_renderer__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../template-renderer */ \"./src/template-renderer.ts\");\n/* empty/unused harmony star reexport *//* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../question */ \"./src/question.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _question__WEBPACK_IMPORTED_MODULE_28__[\"Question\"]; });\n\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _questionnonvalue__WEBPACK_IMPORTED_MODULE_29__[\"QuestionNonValue\"]; });\n\n/* harmony import */ var _question_empty__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../question_empty */ \"./src/question_empty.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _question_empty__WEBPACK_IMPORTED_MODULE_30__[\"QuestionEmptyModel\"]; });\n\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_31__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_31__[\"QuestionSelectBase\"]; });\n\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _question_checkbox__WEBPACK_IMPORTED_MODULE_32__[\"QuestionCheckboxModel\"]; });\n\n/* harmony import */ var _question_ranking__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../question_ranking */ \"./src/question_ranking.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _question_ranking__WEBPACK_IMPORTED_MODULE_33__[\"QuestionRankingModel\"]; });\n\n/* harmony import */ var _question_comment__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../question_comment */ \"./src/question_comment.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _question_comment__WEBPACK_IMPORTED_MODULE_34__[\"QuestionCommentModel\"]; });\n\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _question_dropdown__WEBPACK_IMPORTED_MODULE_35__[\"QuestionDropdownModel\"]; });\n\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../questionfactory */ \"./src/questionfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_36__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_36__[\"ElementFactory\"]; });\n\n/* harmony import */ var _question_file__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../question_file */ \"./src/question_file.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _question_file__WEBPACK_IMPORTED_MODULE_37__[\"QuestionFileModel\"]; });\n\n/* harmony import */ var _question_html__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../question_html */ \"./src/question_html.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _question_html__WEBPACK_IMPORTED_MODULE_38__[\"QuestionHtmlModel\"]; });\n\n/* harmony import */ var _question_radiogroup__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../question_radiogroup */ \"./src/question_radiogroup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _question_radiogroup__WEBPACK_IMPORTED_MODULE_39__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony import */ var _question_rating__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../question_rating */ \"./src/question_rating.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _question_rating__WEBPACK_IMPORTED_MODULE_40__[\"QuestionRatingModel\"]; });\n\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../question_expression */ \"./src/question_expression.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _question_expression__WEBPACK_IMPORTED_MODULE_41__[\"QuestionExpressionModel\"]; });\n\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../question_text */ \"./src/question_text.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _question_text__WEBPACK_IMPORTED_MODULE_42__[\"QuestionTextModel\"]; });\n\n/* harmony import */ var _question_boolean__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../question_boolean */ \"./src/question_boolean.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _question_boolean__WEBPACK_IMPORTED_MODULE_43__[\"QuestionBooleanModel\"]; });\n\n/* harmony import */ var _question_imagepicker__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../../question_imagepicker */ \"./src/question_imagepicker.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_44__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_44__[\"ImageItemValue\"]; });\n\n/* harmony import */ var _question_image__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../../question_image */ \"./src/question_image.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _question_image__WEBPACK_IMPORTED_MODULE_45__[\"QuestionImageModel\"]; });\n\n/* harmony import */ var _question_signaturepad__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../../question_signaturepad */ \"./src/question_signaturepad.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _question_signaturepad__WEBPACK_IMPORTED_MODULE_46__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony import */ var _question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../../question_paneldynamic */ \"./src/question_paneldynamic.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_47__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../../surveytimer */ \"./src/surveytimer.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _surveytimer__WEBPACK_IMPORTED_MODULE_48__[\"SurveyTimer\"]; });\n\n/* harmony import */ var _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../../surveyProgressButtons */ \"./src/surveyProgressButtons.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_49__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../../survey */ \"./src/survey.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _survey__WEBPACK_IMPORTED_MODULE_50__[\"SurveyModel\"]; });\n\n/* harmony import */ var _trigger__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../../trigger */ \"./src/trigger.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_51__[\"Trigger\"]; });\n\n/* harmony import */ var _surveyWindow__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../../surveyWindow */ \"./src/surveyWindow.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _surveyWindow__WEBPACK_IMPORTED_MODULE_52__[\"SurveyWindowModel\"]; });\n\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../../textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _textPreProcessor__WEBPACK_IMPORTED_MODULE_53__[\"TextPreProcessor\"]; });\n\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../../dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _dxSurveyService__WEBPACK_IMPORTED_MODULE_54__[\"dxSurveyService\"]; });\n\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../../localization/english */ \"./src/localization/english.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _localization_english__WEBPACK_IMPORTED_MODULE_55__[\"englishStrings\"]; });\n\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../../surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_56__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_56__[\"surveyStrings\"]; });\n\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../../questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_57__[\"CustomWidgetCollection\"]; });\n\n/* harmony import */ var _question_custom__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../../question_custom */ \"./src/question_custom.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_58__[\"ComponentCollection\"]; });\n\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../../stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _stylesmanager__WEBPACK_IMPORTED_MODULE_59__[\"StylesManager\"]; });\n\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../../list */ \"./src/list.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _list__WEBPACK_IMPORTED_MODULE_60__[\"ListModel\"]; });\n\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../../popup */ \"./src/popup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_61__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_61__[\"PopupBaseViewModel\"]; });\n\n/* harmony import */ var _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../../question_buttongroup */ \"./src/question_buttongroup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_62__[\"ButtonGroupItemValue\"]; });\n\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../../utils/is-mobile */ \"./src/utils/is-mobile.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _utils_is_mobile__WEBPACK_IMPORTED_MODULE_63__[\"IsMobile\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ../../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"doKey2Click\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_64__[\"createSvg\"]; });\n\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ../../defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_65__[\"surveyCss\"]; });\n\n/* harmony import */ var _dragdrophelper__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ../../dragdrophelper */ \"./src/dragdrophelper.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return _dragdrophelper__WEBPACK_IMPORTED_MODULE_66__[\"DragDropHelper\"]; });\n\n// styles\n\n//import \"../../modern.scss\";\nvar Version;\nVersion = \"\" + \"1.8.58\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// export { cultureInfo } from \"../../cultureInfo\";\n\n\n\n\n\n\n\n\n\n//Uncomment to include the \"date\" question type.\n//export {default as QuestionDateModel} from \"../../plugins/question_date\";\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/core.ts\":\n/*!*****************************!*\\\n !*** ./src/entries/core.ts ***!\n \\*****************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, ArrayChanges, SurveyError, SurveyElement, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2Click, loadFileFromBase64, createSvg, surveyCss, DragDropHelper, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, Action, AdaptiveActionContainer, ActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chunks_model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunks/model */ \"./src/entries/chunks/model.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2Click\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropHelper\"]; });\n\n/* harmony import */ var _chunks_localization__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunks/localization */ \"./src/entries/chunks/localization.ts\");\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__[\"defaultStandardCss\"]; });\n\n/* harmony import */ var _defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../defaultCss/cssbootstrap */ \"./src/defaultCss/cssbootstrap.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return _defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__[\"defaultBootstrapCss\"]; });\n\n/* harmony import */ var _defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaultCss/cssbootstrapmaterial */ \"./src/defaultCss/cssbootstrapmaterial.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return _defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__[\"defaultBootstrapMaterialCss\"]; });\n\n/* harmony import */ var _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../defaultCss/cssmodern */ \"./src/defaultCss/cssmodern.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__[\"modernCss\"]; });\n\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return _rendererFactory__WEBPACK_IMPORTED_MODULE_6__[\"RendererFactory\"]; });\n\n/* harmony import */ var _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/responsivity-manager */ \"./src/utils/responsivity-manager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_7__[\"VerticalResponsivityManager\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"unwrap\"]; });\n\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../actions/action */ \"./src/actions/action.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_9__[\"Action\"]; });\n\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_10__[\"AdaptiveActionContainer\"]; });\n\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../actions/container */ \"./src/actions/container.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return _actions_container__WEBPACK_IMPORTED_MODULE_11__[\"ActionContainer\"]; });\n\n// model\n\n// localization\n\n// css standard classes\n\n// css bootstrap classes\n\n// css bootstrap + material classes\n\n// css modern classes\n\n// utils\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue-ui.ts\":\n/*!*******************************!*\\\n !*** ./src/entries/vue-ui.ts ***!\n \\*******************************/\n/*! exports provided: Model, WindowModel, Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, Window, Page, Radiogroup, RadiogroupItem, OtherChoice, Rating, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, Boolean, BooleanSwitch, BooleanCheckbox, Empty, MultipleText, Matrix, Dropdown, File, MatrixCell, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, PanelDynamic, PanelDynamicRemove, PanelDynamicProgress, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../vue/surveyModel */ \"./src/vue/surveyModel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__[\"VueSurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowModel\", function() { return _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__[\"VueSurveyWindowModel\"]; });\n\n/* harmony import */ var _vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../vue/survey.vue */ \"./src/vue/survey.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony import */ var _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue/customwidget.vue */ \"./src/vue/customwidget.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__[\"CustomWidget\"]; });\n\n/* harmony import */ var _vue_string_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../vue/string.vue */ \"./src/vue/string.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _vue_string_vue__WEBPACK_IMPORTED_MODULE_3__[\"SurveyString\"]; });\n\n/* harmony import */ var _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../vue/string-viewer.vue */ \"./src/vue/string-viewer.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../vue/string-editor.vue */ \"./src/vue/string-editor.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _vue_element_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../vue/element.vue */ \"./src/vue/element.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _vue_element_vue__WEBPACK_IMPORTED_MODULE_6__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _vue_window_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../vue/window.vue */ \"./src/vue/window.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _vue_window_vue__WEBPACK_IMPORTED_MODULE_7__[\"Window\"]; });\n\n/* harmony import */ var _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../vue/page.vue */ \"./src/vue/page.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__[\"Page\"]; });\n\n/* harmony import */ var _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../vue/radiogroup.vue */ \"./src/vue/radiogroup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__[\"Radiogroup\"]; });\n\n/* harmony import */ var _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../vue/radiogroupitem.vue */ \"./src/vue/radiogroupitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../vue/otherChoice.vue */ \"./src/vue/otherChoice.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__[\"OtherChoice\"]; });\n\n/* harmony import */ var _vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../vue/rating.vue */ \"./src/vue/rating.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__[\"Rating\"]; });\n\n/* harmony import */ var _vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../vue/comment.vue */ \"./src/vue/comment.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__[\"Comment\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../vue/ranking/ranking.vue */ \"./src/vue/ranking/ranking.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__[\"Ranking\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../vue/ranking/ranking-item.vue */ \"./src/vue/ranking/ranking-item.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__[\"RankingItem\"]; });\n\n/* harmony import */ var _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../vue/checkbox.vue */ \"./src/vue/checkbox.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__[\"Checkbox\"]; });\n\n/* harmony import */ var _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../vue/checkboxitem.vue */ \"./src/vue/checkboxitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../vue/buttongroup.vue */ \"./src/vue/buttongroup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../vue/buttongroupitem.vue */ \"./src/vue/buttongroupitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _vue_text_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../vue/text.vue */ \"./src/vue/text.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _vue_text_vue__WEBPACK_IMPORTED_MODULE_20__[\"QuestionText\"]; });\n\n/* harmony import */ var _vue_boolean__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../vue/boolean */ \"./src/vue/boolean.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return _vue_boolean__WEBPACK_IMPORTED_MODULE_21__[\"Boolean\"]; });\n\n/* harmony import */ var _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../vue/boolean-switch.vue */ \"./src/vue/boolean-switch.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../vue/boolean-checkbox.vue */ \"./src/vue/boolean-checkbox.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../vue/empty.vue */ \"./src/vue/empty.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__[\"Empty\"]; });\n\n/* harmony import */ var _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../vue/multipletext.vue */ \"./src/vue/multipletext.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__[\"MultipleText\"]; });\n\n/* harmony import */ var _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../vue/matrix.vue */ \"./src/vue/matrix.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__[\"Matrix\"]; });\n\n/* harmony import */ var _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../vue/dropdown.vue */ \"./src/vue/dropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__[\"Dropdown\"]; });\n\n/* harmony import */ var _vue_file_vue__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../vue/file.vue */ \"./src/vue/file.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _vue_file_vue__WEBPACK_IMPORTED_MODULE_28__[\"File\"]; });\n\n/* harmony import */ var _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../vue/matrixcell.vue */ \"./src/vue/matrixcell.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__[\"MatrixCell\"]; });\n\n/* harmony import */ var _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../vue/matrixtable.vue */ \"./src/vue/matrixtable.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__[\"MatrixTable\"]; });\n\n/* harmony import */ var _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../vue/matrixdropdown.vue */ \"./src/vue/matrixdropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../vue/matrixdynamic.vue */ \"./src/vue/matrixdynamic.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../vue/errors.vue */ \"./src/vue/errors.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__[\"Errors\"]; });\n\n/* harmony import */ var _vue_html_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../vue/html.vue */ \"./src/vue/html.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _vue_html_vue__WEBPACK_IMPORTED_MODULE_34__[\"Html\"]; });\n\n/* harmony import */ var _vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../vue/expression.vue */ \"./src/vue/expression.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__[\"Expression\"]; });\n\n/* harmony import */ var _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../vue/imagepicker.vue */ \"./src/vue/imagepicker.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__[\"ImagePicker\"]; });\n\n/* harmony import */ var _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../vue/paneldynamic.vue */ \"./src/vue/paneldynamic.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../vue/paneldynamicremove.vue */ \"./src/vue/paneldynamicremove.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__[\"PanelDynamicRemove\"]; });\n\n/* harmony import */ var _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../vue/paneldynamicprogress.vue */ \"./src/vue/paneldynamicprogress.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../vue/navigation.vue */ \"./src/vue/navigation.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__[\"Navigation\"]; });\n\n/* harmony import */ var _vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../vue/progress.vue */ \"./src/vue/progress.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__[\"Progress\"]; });\n\n/* harmony import */ var _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../vue/progressButtons.vue */ \"./src/vue/progressButtons.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../vue/timerpanel.vue */ \"./src/vue/timerpanel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__[\"TimerPanel\"]; });\n\n/* harmony import */ var _vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../vue/panel.vue */ \"./src/vue/panel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__[\"Panel\"]; });\n\n/* harmony import */ var _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../vue/flowpanel.vue */ \"./src/vue/flowpanel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__[\"FlowPanel\"]; });\n\n/* harmony import */ var _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../vue/flowpanelelement.vue */ \"./src/vue/flowpanelelement.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _vue_row_vue__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../vue/row.vue */ \"./src/vue/row.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _vue_row_vue__WEBPACK_IMPORTED_MODULE_47__[\"Row\"]; });\n\n/* harmony import */ var _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../vue/elementheader.vue */ \"./src/vue/elementheader.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__[\"ElementHeader\"]; });\n\n/* harmony import */ var _vue_image_vue__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../vue/image.vue */ \"./src/vue/image.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _vue_image_vue__WEBPACK_IMPORTED_MODULE_49__[\"QuestionImage\"]; });\n\n/* harmony import */ var _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../vue/signaturepad.vue */ \"./src/vue/signaturepad.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__[\"SignaturePad\"]; });\n\n/* harmony import */ var _vue_header_vue__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../vue/header.vue */ \"./src/vue/header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _vue_header_vue__WEBPACK_IMPORTED_MODULE_51__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../vue/custom.vue */ \"./src/vue/custom.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__[\"Custom\"]; });\n\n/* harmony import */ var _vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../vue/composite.vue */ \"./src/vue/composite.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__[\"Composite\"]; });\n\n/* harmony import */ var _vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../vue/titlecontent.vue */ \"./src/vue/titlecontent.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_54__[\"TitleContent\"]; });\n\n/* harmony import */ var _vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../vue/components/title-actions/title-actions.vue */ \"./src/vue/components/title-actions/title-actions.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_55__[\"TitleActions\"]; });\n\n/* harmony import */ var _vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../vue/components/default-title/default-title.vue */ \"./src/vue/components/default-title/default-title.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_56__[\"DefaultTitle\"]; });\n\n/* harmony import */ var _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../vue/components/action-bar/action-bar.vue */ \"./src/vue/components/action-bar/action-bar.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_57__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../vue/components/svg-icon/svg-icon.vue */ \"./src/vue/components/svg-icon/svg-icon.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_58__[\"SvgIcon\"]; });\n\n/* harmony import */ var _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../vue/components/popup/popup.vue */ \"./src/vue/components/popup/popup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_59__[\"Popup\"]; });\n\n/* harmony import */ var _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../vue/components/list/list.vue */ \"./src/vue/components/list/list.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_60__[\"List\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../vue/components/matrix-actions/remove-button/remove-button.vue */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_61__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../vue/components/matrix-actions/detail-button/detail-button.vue */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_62__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_63__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue.ts\":\n/*!****************************!*\\\n !*** ./src/entries/vue.ts ***!\n \\****************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, ArrayChanges, SurveyError, SurveyElement, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2Click, loadFileFromBase64, createSvg, surveyCss, DragDropHelper, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, Action, AdaptiveActionContainer, ActionContainer, Model, WindowModel, Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, Window, Page, Radiogroup, RadiogroupItem, OtherChoice, Rating, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, Boolean, BooleanSwitch, BooleanCheckbox, Empty, MultipleText, Matrix, Dropdown, File, MatrixCell, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, PanelDynamic, PanelDynamicRemove, PanelDynamicProgress, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ \"./src/entries/core.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"doKey2Click\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropHelper\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropHelper\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultStandardCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultBootstrapCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultBootstrapMaterialCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"modernCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RendererFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"VerticalResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"unwrap\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Action\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveActionContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ActionContainer\"]; });\n\n/* harmony import */ var _vue_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vue-ui */ \"./src/entries/vue-ui.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Model\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowModel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"WindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringViewer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringEditor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElementVue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Window\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Page\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Radiogroup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"RadiogroupItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"OtherChoice\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Rating\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Comment\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Ranking\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"RankingItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Checkbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"CheckboxItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroupItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"QuestionText\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Boolean\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"BooleanSwitch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"BooleanCheckbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Empty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MultipleText\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Matrix\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Dropdown\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"File\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixDropdown\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixDynamic\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Errors\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Html\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Expression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ImagePicker\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamic\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicRemove\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgress\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Navigation\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Progress\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ProgressButtons\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TimerPanel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Panel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"FlowPanel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"FlowPanelElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Row\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ElementHeader\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"QuestionImage\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SignaturePad\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyHeader\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Custom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Composite\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TitleContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TitleActions\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"DefaultTitle\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ActionBarViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SvgIcon\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Popup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/error.ts\":\n/*!**********************!*\\\n !*** ./src/error.ts ***!\n \\**********************/\n/*! exports provided: AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, WebRequestError, WebRequestEmptyError, OtherEmptyError, UploadingFileError, RequiredInAllRowsError, MinRowCountError, KeyDuplicationError, CustomError */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return AnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return OneAnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return RequreNumericError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return ExceedSizeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebRequestError\", function() { return WebRequestError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebRequestEmptyError\", function() { return WebRequestEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OtherEmptyError\", function() { return OtherEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UploadingFileError\", function() { return UploadingFileError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequiredInAllRowsError\", function() { return RequiredInAllRowsError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MinRowCountError\", function() { return MinRowCountError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"KeyDuplicationError\", function() { return KeyDuplicationError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return CustomError; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _survey_error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-error */ \"./src/survey-error.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar AnswerRequiredError = /** @class */ (function (_super) {\n __extends(AnswerRequiredError, _super);\n function AnswerRequiredError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n AnswerRequiredError.prototype.getErrorType = function () {\n return \"required\";\n };\n AnswerRequiredError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredError\");\n };\n return AnswerRequiredError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OneAnswerRequiredError = /** @class */ (function (_super) {\n __extends(OneAnswerRequiredError, _super);\n function OneAnswerRequiredError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n OneAnswerRequiredError.prototype.getErrorType = function () {\n return \"requireoneanswer\";\n };\n OneAnswerRequiredError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredErrorInPanel\");\n };\n return OneAnswerRequiredError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequreNumericError = /** @class */ (function (_super) {\n __extends(RequreNumericError, _super);\n function RequreNumericError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n RequreNumericError.prototype.getErrorType = function () {\n return \"requirenumeric\";\n };\n RequreNumericError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"numericError\");\n };\n return RequreNumericError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar ExceedSizeError = /** @class */ (function (_super) {\n __extends(ExceedSizeError, _super);\n function ExceedSizeError(maxSize, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.maxSize = maxSize;\n _this.locText.text = _this.getText();\n return _this;\n }\n ExceedSizeError.prototype.getErrorType = function () {\n return \"exceedsize\";\n };\n ExceedSizeError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"exceedMaxSize\")[\"format\"](this.getTextSize());\n };\n ExceedSizeError.prototype.getTextSize = function () {\n var sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var fixed = [0, 0, 2, 3, 3];\n if (this.maxSize === 0) {\n return \"0 Byte\";\n }\n var i = Math.floor(Math.log(this.maxSize) / Math.log(1024));\n var value = this.maxSize / Math.pow(1024, i);\n return value.toFixed(fixed[i]) + \" \" + sizes[i];\n };\n return ExceedSizeError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestError = /** @class */ (function (_super) {\n __extends(WebRequestError, _super);\n function WebRequestError(status, response, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.status = status;\n _this.response = response;\n return _this;\n }\n WebRequestError.prototype.getErrorType = function () {\n return \"webrequest\";\n };\n WebRequestError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"urlRequestError\")[\"format\"](this.status, this.response);\n };\n return WebRequestError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestEmptyError = /** @class */ (function (_super) {\n __extends(WebRequestEmptyError, _super);\n function WebRequestEmptyError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n WebRequestEmptyError.prototype.getErrorType = function () {\n return \"webrequestempty\";\n };\n WebRequestEmptyError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"urlGetChoicesError\");\n };\n return WebRequestEmptyError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OtherEmptyError = /** @class */ (function (_super) {\n __extends(OtherEmptyError, _super);\n function OtherEmptyError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n OtherEmptyError.prototype.getErrorType = function () {\n return \"otherempty\";\n };\n OtherEmptyError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"otherRequiredError\");\n };\n return OtherEmptyError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar UploadingFileError = /** @class */ (function (_super) {\n __extends(UploadingFileError, _super);\n function UploadingFileError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n UploadingFileError.prototype.getErrorType = function () {\n return \"uploadingfile\";\n };\n UploadingFileError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"uploadingFile\");\n };\n return UploadingFileError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequiredInAllRowsError = /** @class */ (function (_super) {\n __extends(RequiredInAllRowsError, _super);\n function RequiredInAllRowsError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n RequiredInAllRowsError.prototype.getErrorType = function () {\n return \"requiredinallrowserror\";\n };\n RequiredInAllRowsError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredInAllRowsError\");\n };\n return RequiredInAllRowsError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar MinRowCountError = /** @class */ (function (_super) {\n __extends(MinRowCountError, _super);\n function MinRowCountError(minRowCount, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.minRowCount = minRowCount;\n return _this;\n }\n MinRowCountError.prototype.getErrorType = function () {\n return \"minrowcounterror\";\n };\n MinRowCountError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"minRowCountError\")[\"format\"](this.minRowCount);\n };\n return MinRowCountError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar KeyDuplicationError = /** @class */ (function (_super) {\n __extends(KeyDuplicationError, _super);\n function KeyDuplicationError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n KeyDuplicationError.prototype.getErrorType = function () {\n return \"keyduplicationerror\";\n };\n KeyDuplicationError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"keyDuplicationError\");\n };\n return KeyDuplicationError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar CustomError = /** @class */ (function (_super) {\n __extends(CustomError, _super);\n function CustomError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n CustomError.prototype.getErrorType = function () {\n return \"custom\";\n };\n return CustomError;\n}(_survey_error__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/expressionItems.ts\":\n/*!********************************!*\\\n !*** ./src/expressionItems.ts ***!\n \\********************************/\n/*! exports provided: ExpressionItem, HtmlConditionItem, UrlConditionItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionItem\", function() { return ExpressionItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return HtmlConditionItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return UrlConditionItem; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar ExpressionItem = /** @class */ (function (_super) {\n __extends(ExpressionItem, _super);\n function ExpressionItem(expression) {\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.createLocalizableString(\"html\", _this);\n _this.expression = expression;\n return _this;\n }\n ExpressionItem.prototype.getType = function () {\n return \"expressionitem\";\n };\n ExpressionItem.prototype.runCondition = function (values, properties) {\n if (!this.expression)\n return false;\n return new _conditions__WEBPACK_IMPORTED_MODULE_2__[\"ConditionRunner\"](this.expression).run(values, properties);\n };\n Object.defineProperty(ExpressionItem.prototype, \"expression\", {\n /**\n * The expression property. If this expression returns true, then survey will use html property to show on complete page.\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ExpressionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\n configurable: true\n });\n ExpressionItem.prototype.getLocale = function () {\n return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n };\n ExpressionItem.prototype.getMarkdownHtml = function (text, name) {\n return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : null;\n };\n ExpressionItem.prototype.getRenderer = function (name) {\n return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n };\n ExpressionItem.prototype.getProcessedText = function (text) {\n return this.locOwner ? this.locOwner.getProcessedText(text) : text;\n };\n return ExpressionItem;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n/**\n * A class that contains expression and html propeties. It uses in survey.completedHtmlOnCondition array.\n * If the expression returns true then html of this item uses instead of survey.completedHtml property\n * @see SurveyModel.completedHtmlOnCondition\n * @see SurveyModel.completedHtml\n */\nvar HtmlConditionItem = /** @class */ (function (_super) {\n __extends(HtmlConditionItem, _super);\n function HtmlConditionItem(expression, html) {\n if (expression === void 0) { expression = null; }\n if (html === void 0) { html = null; }\n var _this = _super.call(this, expression) || this;\n _this.createLocalizableString(\"html\", _this);\n _this.html = html;\n return _this;\n }\n HtmlConditionItem.prototype.getType = function () {\n return \"htmlconditionitem\";\n };\n Object.defineProperty(HtmlConditionItem.prototype, \"html\", {\n /**\n * The html that shows on completed ('Thank you') page. The expression should return true\n * @see expression\n */\n get: function () {\n return this.getLocalizableStringText(\"html\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"html\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HtmlConditionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\n configurable: true\n });\n return HtmlConditionItem;\n}(ExpressionItem));\n\n/**\n * A class that contains expression and url propeties. It uses in survey.navigateToUrlOnCondition array.\n * If the expression returns true then url of this item uses instead of survey.navigateToUrl property\n * @see SurveyModel.navigateToUrl\n */\nvar UrlConditionItem = /** @class */ (function (_super) {\n __extends(UrlConditionItem, _super);\n function UrlConditionItem(expression, url) {\n if (expression === void 0) { expression = null; }\n if (url === void 0) { url = null; }\n var _this = _super.call(this, expression) || this;\n _this.createLocalizableString(\"url\", _this);\n _this.url = url;\n return _this;\n }\n UrlConditionItem.prototype.getType = function () {\n return \"urlconditionitem\";\n };\n Object.defineProperty(UrlConditionItem.prototype, \"url\", {\n /**\n * The url that survey navigates to on completing the survey. The expression should return true\n * @see expression\n */\n get: function () {\n return this.getLocalizableStringText(\"url\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"url\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(UrlConditionItem.prototype, \"locUrl\", {\n get: function () {\n return this.getLocalizableString(\"url\");\n },\n enumerable: false,\n configurable: true\n });\n return UrlConditionItem;\n}(ExpressionItem));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"expressionitem\", [\"expression:condition\"], function () {\n return new ExpressionItem();\n}, \"base\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"htmlconditionitem\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new HtmlConditionItem();\n}, \"expressionitem\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"urlconditionitem\", [{ name: \"url:string\", serializationProperty: \"locUrl\" }], function () {\n return new UrlConditionItem();\n}, \"expressionitem\");\n\n\n/***/ }),\n\n/***/ \"./src/expressions/expressionParser.ts\":\n/*!*********************************************!*\\\n !*** ./src/expressions/expressionParser.ts ***!\n \\*********************************************/\n/*! exports provided: SyntaxError, parse */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SyntaxError\", function() { return SyntaxError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parse\", function() { return parse; });\n/* harmony import */ var _expressions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expressions */ \"./src/expressions/expressions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n// Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.3.1 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nvar SyntaxError = /** @class */ (function (_super) {\n __extends(SyntaxError, _super);\n function SyntaxError(message, expected, found, location) {\n var _this = _super.call(this) || this;\n _this.message = message;\n _this.expected = expected;\n _this.found = found;\n _this.location = location;\n _this.name = \"SyntaxError\";\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(_this, SyntaxError);\n }\n return _this;\n }\n SyntaxError.buildMessage = function (expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function describeExpectation(expectation) {\n switch (expectation.type) {\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n var descriptions = expected1.map(describeExpectation);\n var i;\n var j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n return SyntaxError;\n}(Error));\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n var peg$FAILED = {};\n var peg$startRuleFunctions = { Expression: peg$parseExpression };\n var peg$startRuleFunction = peg$parseExpression;\n var peg$c0 = function (head, tail) {\n return buildBinaryOperand(head, tail, true);\n };\n var peg$c1 = \"||\";\n var peg$c2 = peg$literalExpectation(\"||\", false);\n var peg$c3 = \"or\";\n var peg$c4 = peg$literalExpectation(\"or\", true);\n var peg$c5 = function () { return \"or\"; };\n var peg$c6 = \"&&\";\n var peg$c7 = peg$literalExpectation(\"&&\", false);\n var peg$c8 = \"and\";\n var peg$c9 = peg$literalExpectation(\"and\", true);\n var peg$c10 = function () { return \"and\"; };\n var peg$c11 = function (head, tail) {\n return buildBinaryOperand(head, tail);\n };\n var peg$c12 = \"<=\";\n var peg$c13 = peg$literalExpectation(\"<=\", false);\n var peg$c14 = \"lessorequal\";\n var peg$c15 = peg$literalExpectation(\"lessorequal\", true);\n var peg$c16 = function () { return \"lessorequal\"; };\n var peg$c17 = \">=\";\n var peg$c18 = peg$literalExpectation(\">=\", false);\n var peg$c19 = \"greaterorequal\";\n var peg$c20 = peg$literalExpectation(\"greaterorequal\", true);\n var peg$c21 = function () { return \"greaterorequal\"; };\n var peg$c22 = \"=\";\n var peg$c23 = peg$literalExpectation(\"=\", false);\n var peg$c24 = \"equal\";\n var peg$c25 = peg$literalExpectation(\"equal\", true);\n var peg$c26 = function () { return \"equal\"; };\n var peg$c27 = \"!=\";\n var peg$c28 = peg$literalExpectation(\"!=\", false);\n var peg$c29 = \"notequal\";\n var peg$c30 = peg$literalExpectation(\"notequal\", true);\n var peg$c31 = function () { return \"notequal\"; };\n var peg$c32 = \"<\";\n var peg$c33 = peg$literalExpectation(\"<\", false);\n var peg$c34 = \"less\";\n var peg$c35 = peg$literalExpectation(\"less\", true);\n var peg$c36 = function () { return \"less\"; };\n var peg$c37 = \">\";\n var peg$c38 = peg$literalExpectation(\">\", false);\n var peg$c39 = \"greater\";\n var peg$c40 = peg$literalExpectation(\"greater\", true);\n var peg$c41 = function () { return \"greater\"; };\n var peg$c42 = \"+\";\n var peg$c43 = peg$literalExpectation(\"+\", false);\n var peg$c44 = function () { return \"plus\"; };\n var peg$c45 = \"-\";\n var peg$c46 = peg$literalExpectation(\"-\", false);\n var peg$c47 = function () { return \"minus\"; };\n var peg$c48 = \"*\";\n var peg$c49 = peg$literalExpectation(\"*\", false);\n var peg$c50 = function () { return \"mul\"; };\n var peg$c51 = \"/\";\n var peg$c52 = peg$literalExpectation(\"/\", false);\n var peg$c53 = function () { return \"div\"; };\n var peg$c54 = \"%\";\n var peg$c55 = peg$literalExpectation(\"%\", false);\n var peg$c56 = function () { return \"mod\"; };\n var peg$c57 = \"^\";\n var peg$c58 = peg$literalExpectation(\"^\", false);\n var peg$c59 = \"power\";\n var peg$c60 = peg$literalExpectation(\"power\", true);\n var peg$c61 = function () { return \"power\"; };\n var peg$c62 = \"*=\";\n var peg$c63 = peg$literalExpectation(\"*=\", false);\n var peg$c64 = \"contains\";\n var peg$c65 = peg$literalExpectation(\"contains\", true);\n var peg$c66 = \"contain\";\n var peg$c67 = peg$literalExpectation(\"contain\", true);\n var peg$c68 = function () { return \"contains\"; };\n var peg$c69 = \"notcontains\";\n var peg$c70 = peg$literalExpectation(\"notcontains\", true);\n var peg$c71 = \"notcontain\";\n var peg$c72 = peg$literalExpectation(\"notcontain\", true);\n var peg$c73 = function () { return \"notcontains\"; };\n var peg$c74 = \"anyof\";\n var peg$c75 = peg$literalExpectation(\"anyof\", true);\n var peg$c76 = function () { return \"anyof\"; };\n var peg$c77 = \"allof\";\n var peg$c78 = peg$literalExpectation(\"allof\", true);\n var peg$c79 = function () { return \"allof\"; };\n var peg$c80 = \"(\";\n var peg$c81 = peg$literalExpectation(\"(\", false);\n var peg$c82 = \")\";\n var peg$c83 = peg$literalExpectation(\")\", false);\n var peg$c84 = function (expr) { return expr; };\n var peg$c85 = function (name, params) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"](name, params); };\n var peg$c86 = \"!\";\n var peg$c87 = peg$literalExpectation(\"!\", false);\n var peg$c88 = \"negate\";\n var peg$c89 = peg$literalExpectation(\"negate\", true);\n var peg$c90 = function (expr) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"](expr, \"negate\"); };\n var peg$c91 = function (expr, op) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"](expr, op); };\n var peg$c92 = \"empty\";\n var peg$c93 = peg$literalExpectation(\"empty\", true);\n var peg$c94 = function () { return \"empty\"; };\n var peg$c95 = \"notempty\";\n var peg$c96 = peg$literalExpectation(\"notempty\", true);\n var peg$c97 = function () { return \"notempty\"; };\n var peg$c98 = \"undefined\";\n var peg$c99 = peg$literalExpectation(\"undefined\", false);\n var peg$c100 = \"null\";\n var peg$c101 = peg$literalExpectation(\"null\", false);\n var peg$c102 = function () { return null; };\n var peg$c103 = function (value) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"Const\"](value); };\n var peg$c104 = \"{\";\n var peg$c105 = peg$literalExpectation(\"{\", false);\n var peg$c106 = \"}\";\n var peg$c107 = peg$literalExpectation(\"}\", false);\n var peg$c108 = function (value) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"](value); };\n var peg$c109 = function (value) { return value; };\n var peg$c110 = \"''\";\n var peg$c111 = peg$literalExpectation(\"''\", false);\n var peg$c112 = function () { return \"\"; };\n var peg$c113 = \"\\\"\\\"\";\n var peg$c114 = peg$literalExpectation(\"\\\"\\\"\", false);\n var peg$c115 = \"'\";\n var peg$c116 = peg$literalExpectation(\"'\", false);\n var peg$c117 = function (value) { return \"'\" + value + \"'\"; };\n var peg$c118 = \"\\\"\";\n var peg$c119 = peg$literalExpectation(\"\\\"\", false);\n var peg$c120 = \"[\";\n var peg$c121 = peg$literalExpectation(\"[\", false);\n var peg$c122 = \"]\";\n var peg$c123 = peg$literalExpectation(\"]\", false);\n var peg$c124 = function (sequence) { return sequence; };\n var peg$c125 = \",\";\n var peg$c126 = peg$literalExpectation(\",\", false);\n var peg$c127 = function (expr, tail) {\n if (expr == null)\n return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]([]);\n var array = [expr];\n if (Array.isArray(tail)) {\n var flatten = flattenArray(tail);\n for (var i = 3; i < flatten.length; i += 4) {\n array.push(flatten[i]);\n }\n }\n return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"](array);\n };\n var peg$c128 = \"true\";\n var peg$c129 = peg$literalExpectation(\"true\", true);\n var peg$c130 = function () { return true; };\n var peg$c131 = \"false\";\n var peg$c132 = peg$literalExpectation(\"false\", true);\n var peg$c133 = function () { return false; };\n var peg$c134 = \"0x\";\n var peg$c135 = peg$literalExpectation(\"0x\", false);\n var peg$c136 = function () { return parseInt(text(), 16); };\n var peg$c137 = /^[\\-]/;\n var peg$c138 = peg$classExpectation([\"-\"], false, false);\n var peg$c139 = function (sign, num) { return sign == null ? num : -num; };\n var peg$c140 = \".\";\n var peg$c141 = peg$literalExpectation(\".\", false);\n var peg$c142 = function () { return parseFloat(text()); };\n var peg$c143 = function () { return parseInt(text(), 10); };\n var peg$c144 = \"0\";\n var peg$c145 = peg$literalExpectation(\"0\", false);\n var peg$c146 = function () { return 0; };\n var peg$c147 = function (chars) { return chars.join(\"\"); };\n var peg$c148 = \"\\\\'\";\n var peg$c149 = peg$literalExpectation(\"\\\\'\", false);\n var peg$c150 = function () { return \"'\"; };\n var peg$c151 = \"\\\\\\\"\";\n var peg$c152 = peg$literalExpectation(\"\\\\\\\"\", false);\n var peg$c153 = function () { return \"\\\"\"; };\n var peg$c154 = /^[^\"']/;\n var peg$c155 = peg$classExpectation([\"\\\"\", \"'\"], true, false);\n var peg$c156 = function () { return text(); };\n var peg$c157 = /^[^{}]/;\n var peg$c158 = peg$classExpectation([\"{\", \"}\"], true, false);\n var peg$c159 = /^[0-9]/;\n var peg$c160 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$c161 = /^[1-9]/;\n var peg$c162 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c163 = /^[a-zA-Z]/;\n var peg$c164 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$c165 = peg$otherExpectation(\"whitespace\");\n var peg$c166 = /^[ \\t\\n\\r]/;\n var peg$c167 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false);\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$resultsCache = {};\n var peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return { type: \"literal\", text: text1, ignoreCase: ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n }\n else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n }\n else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new SyntaxError(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parseExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n var key = peg$currPos * 34 + 0;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLogicOr();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseOrSign();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseLogicOr();\n if (s8 !== peg$FAILED) {\n s5 = [s5, s6, s7, s8];\n s4 = s5;\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseOrSign();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseLogicOr();\n if (s8 !== peg$FAILED) {\n s5 = [s5, s6, s7, s8];\n s4 = s5;\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s2, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseOrSign() {\n var s0, s1;\n var key = peg$currPos * 34 + 1;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c1) {\n s1 = peg$c1;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c2);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c3) {\n s1 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c4);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicOr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 2;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLogicAnd();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseAndSign();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseLogicAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseAndSign();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseLogicAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAndSign() {\n var s0, s1;\n var key = peg$currPos * 34 + 3;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s1 = peg$c6;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c8) {\n s1 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicAnd() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 4;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseCompOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseComparableOperators();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseCompOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseComparableOperators();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseCompOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseComparableOperators() {\n var s0, s1;\n var key = peg$currPos * 34 + 5;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s1 = peg$c12;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 11).toLowerCase() === peg$c14) {\n s1 = input.substr(peg$currPos, 11);\n peg$currPos += 11;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c15);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c16();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c18);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 14).toLowerCase() === peg$c19) {\n s1 = input.substr(peg$currPos, 14);\n peg$currPos += 14;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c20);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c22;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c24) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c25);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c29) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c30);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 60) {\n s1 = peg$c32;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4).toLowerCase() === peg$c34) {\n s1 = input.substr(peg$currPos, 4);\n peg$currPos += 4;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c36();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 62) {\n s1 = peg$c37;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c38);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7).toLowerCase() === peg$c39) {\n s1 = input.substr(peg$currPos, 7);\n peg$currPos += 7;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c40);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c41();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseCompOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 6;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parsePlusMinusOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePlusMinusSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsePlusMinusOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePlusMinusSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsePlusMinusOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePlusMinusSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 7;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c42;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c44();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c45;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c46);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c47();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePlusMinusOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 8;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseMulDivOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseMulDivSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseMulDivOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseMulDivSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseMulDivOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseMulDivSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 9;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 42) {\n s1 = peg$c48;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c49);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c50();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c51;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c52);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 37) {\n s1 = peg$c54;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c55);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseMulDivOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 10;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseBinaryFuncOp();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePowerSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBinaryFuncOp();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePowerSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBinaryFuncOp();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePowerSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 11;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 94) {\n s1 = peg$c57;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c58);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c59) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c60);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseBinaryFuncOp() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 12;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseBinFunctions();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseBinFunctions();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseBinFunctions() {\n var s0, s1;\n var key = peg$currPos * 34 + 13;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c62) {\n s1 = peg$c62;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c63);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c64) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c65);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7).toLowerCase() === peg$c66) {\n s1 = input.substr(peg$currPos, 7);\n peg$currPos += 7;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c67);\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c68();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 11).toLowerCase() === peg$c69) {\n s1 = input.substr(peg$currPos, 11);\n peg$currPos += 11;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c70);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 10).toLowerCase() === peg$c71) {\n s1 = input.substr(peg$currPos, 10);\n peg$currPos += 10;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c72);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c73();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c74) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c75);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c76();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c77) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c78);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c79();\n }\n s0 = s1;\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 34 + 14;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c80;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c82;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c84(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunctionOp();\n if (s0 === peg$FAILED) {\n s0 = peg$parseUnaryFunctionOp();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAtom();\n if (s0 === peg$FAILED) {\n s0 = peg$parseArrayOp();\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseFunctionOp() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 34 + 15;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLettersAndDigits();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c80;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseSequence();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c82;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c85(s1, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseUnaryFunctionOp() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 16;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c86;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c87);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6).toLowerCase() === peg$c88) {\n s1 = input.substr(peg$currPos, 6);\n peg$currPos += 6;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c89);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c90(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseAtom();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseUnFunctions();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c91(s1, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseUnFunctions() {\n var s0, s1;\n var key = peg$currPos * 34 + 17;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c92) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c93);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c94();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c95) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c96);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c97();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAtom() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 34 + 18;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c98) {\n s2 = peg$c98;\n peg$currPos += 9;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c99);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c100) {\n s2 = peg$c100;\n peg$currPos += 4;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c101);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c102();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseConstValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c103(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c104;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c105);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValueInput();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s4 = peg$c106;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c107);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c108(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseConstValue() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 19;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLogicValue();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseArithmeticValue();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseLettersAndDigits();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c110) {\n s1 = peg$c110;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c111);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c112();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c113) {\n s1 = peg$c113;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c114);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c112();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c115;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c116);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseAnyInput();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c115;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c116);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c117(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c118;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c119);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseAnyInput();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c118;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c119);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c117(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseArrayOp() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 20;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c120;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c121);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseSequence();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c122;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c123);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c124(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseSequence() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 21;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c125;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c126);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c125;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c126);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c127(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicValue() {\n var s0, s1;\n var key = peg$currPos * 34 + 22;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4).toLowerCase() === peg$c128) {\n s1 = input.substr(peg$currPos, 4);\n peg$currPos += 4;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c129);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c130();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c131) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c132);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c133();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseArithmeticValue() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 23;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c134) {\n s1 = peg$c134;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c135);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDigits();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c136();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c137.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c138);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c139(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseNumber() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 24;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseDigits();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c140;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c141);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseDigits();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c142();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseNonZeroDigits();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDigits();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c143();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c144;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c145);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c146();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseValueInput() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 25;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseValueCharacters();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseValueCharacters();\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c147(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAnyInput() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 26;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseAnyCharacters();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseAnyCharacters();\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c147(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAnyCharacters() {\n var s0, s1;\n var key = peg$currPos * 34 + 27;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c148) {\n s1 = peg$c148;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c149);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c150();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c151) {\n s1 = peg$c151;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c152);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c153();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c154.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c155);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseValueCharacters() {\n var s0, s1;\n var key = peg$currPos * 34 + 28;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (peg$c157.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c158);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLettersAndDigits() {\n var s0, s1, s2, s3, s4, s5, s6;\n var key = peg$currPos * 34 + 29;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLetters();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parseDigits();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseLetters();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseLetters();\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parseDigits();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseLetters();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseLetters();\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseDigits() {\n var s0, s1;\n var key = peg$currPos * 34 + 30;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c159.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c160);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c159.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c160);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseNonZeroDigits() {\n var s0, s1;\n var key = peg$currPos * 34 + 31;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c161.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c162);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c161.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c162);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLetters() {\n var s0, s1;\n var key = peg$currPos * 34 + 32;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c163.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c164);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c163.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c164);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parse_() {\n var s0, s1;\n var key = peg$currPos * 34 + 33;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = [];\n if (peg$c166.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c167);\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c166.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c167);\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c165);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function buildBinaryOperand(head, tail, isArithmeticOp) {\n if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n return tail.reduce(function (result, elements) {\n return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"](elements[1], result, elements[3], isArithmeticOp);\n }, head);\n }\n function flattenArray(array) {\n return [].concat.apply([], array);\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n }\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nvar parse = peg$parse;\n\n\n/***/ }),\n\n/***/ \"./src/expressions/expressions.ts\":\n/*!****************************************!*\\\n !*** ./src/expressions/expressions.ts ***!\n \\****************************************/\n/*! exports provided: Operand, BinaryOperand, UnaryOperand, ArrayOperand, Const, Variable, FunctionOperand, OperandMaker */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return Operand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return BinaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UnaryOperand\", function() { return UnaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return ArrayOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return Const; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return Variable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return FunctionOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OperandMaker\", function() { return OperandMaker; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar Operand = /** @class */ (function () {\n function Operand() {\n }\n Operand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n return \"\";\n };\n Operand.prototype.hasFunction = function () {\n return false;\n };\n Operand.prototype.hasAsyncFunction = function () {\n return false;\n };\n Operand.prototype.addToAsyncList = function (list) { };\n return Operand;\n}());\n\nvar BinaryOperand = /** @class */ (function (_super) {\n __extends(BinaryOperand, _super);\n function BinaryOperand(operatorName, left, right, isArithmeticOp) {\n if (left === void 0) { left = null; }\n if (right === void 0) { right = null; }\n if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n var _this = _super.call(this) || this;\n _this.operatorName = operatorName;\n _this.left = left;\n _this.right = right;\n _this.isArithmeticValue = isArithmeticOp;\n if (isArithmeticOp) {\n _this.consumer = OperandMaker.binaryFunctions[\"arithmeticOp\"](operatorName);\n }\n else {\n _this.consumer = OperandMaker.binaryFunctions[operatorName];\n }\n if (_this.consumer == null) {\n OperandMaker.throwInvalidOperatorError(operatorName);\n }\n return _this;\n }\n BinaryOperand.prototype.getType = function () {\n return \"binary\";\n };\n Object.defineProperty(BinaryOperand.prototype, \"isArithmetic\", {\n get: function () {\n return this.isArithmeticValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"isConjunction\", {\n get: function () {\n return this.operatorName == \"or\" || this.operatorName == \"and\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"conjunction\", {\n get: function () {\n return this.isConjunction ? this.operatorName : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"operator\", {\n get: function () {\n return this.operatorName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"leftOperand\", {\n get: function () {\n return this.left;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"rightOperand\", {\n get: function () {\n return this.right;\n },\n enumerable: false,\n configurable: true\n });\n BinaryOperand.prototype.evaluateParam = function (x, processValue) {\n return x == null ? null : x.evaluate(processValue);\n };\n BinaryOperand.prototype.evaluate = function (processValue) {\n return this.consumer.call(this, this.evaluateParam(this.left, processValue), this.evaluateParam(this.right, processValue));\n };\n BinaryOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (\"(\" +\n OperandMaker.safeToString(this.left, func) +\n \" \" +\n OperandMaker.operatorToString(this.operatorName) +\n \" \" +\n OperandMaker.safeToString(this.right, func) +\n \")\");\n };\n BinaryOperand.prototype.setVariables = function (variables) {\n if (this.left != null)\n this.left.setVariables(variables);\n if (this.right != null)\n this.right.setVariables(variables);\n };\n BinaryOperand.prototype.hasFunction = function () {\n return ((!!this.left && this.left.hasFunction()) ||\n (!!this.right && this.right.hasFunction()));\n };\n BinaryOperand.prototype.hasAsyncFunction = function () {\n return ((!!this.left && this.left.hasAsyncFunction()) ||\n (!!this.right && this.right.hasAsyncFunction()));\n };\n BinaryOperand.prototype.addToAsyncList = function (list) {\n if (!!this.left)\n this.left.addToAsyncList(list);\n if (!!this.right)\n this.right.addToAsyncList(list);\n };\n return BinaryOperand;\n}(Operand));\n\nvar UnaryOperand = /** @class */ (function (_super) {\n __extends(UnaryOperand, _super);\n function UnaryOperand(expressionValue, operatorName) {\n var _this = _super.call(this) || this;\n _this.expressionValue = expressionValue;\n _this.operatorName = operatorName;\n _this.consumer = OperandMaker.unaryFunctions[operatorName];\n if (_this.consumer == null) {\n OperandMaker.throwInvalidOperatorError(operatorName);\n }\n return _this;\n }\n Object.defineProperty(UnaryOperand.prototype, \"operator\", {\n get: function () {\n return this.operatorName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(UnaryOperand.prototype, \"expression\", {\n get: function () {\n return this.expressionValue;\n },\n enumerable: false,\n configurable: true\n });\n UnaryOperand.prototype.getType = function () {\n return \"unary\";\n };\n UnaryOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (OperandMaker.operatorToString(this.operatorName) +\n \" \" +\n this.expression.toString(func));\n };\n UnaryOperand.prototype.evaluate = function (processValue) {\n var value = this.expression.evaluate(processValue);\n return this.consumer.call(this, value);\n };\n UnaryOperand.prototype.setVariables = function (variables) {\n this.expression.setVariables(variables);\n };\n return UnaryOperand;\n}(Operand));\n\nvar ArrayOperand = /** @class */ (function (_super) {\n __extends(ArrayOperand, _super);\n function ArrayOperand(values) {\n var _this = _super.call(this) || this;\n _this.values = values;\n return _this;\n }\n ArrayOperand.prototype.getType = function () {\n return \"array\";\n };\n ArrayOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (\"[\" +\n this.values\n .map(function (el) {\n return el.toString(func);\n })\n .join(\", \") +\n \"]\");\n };\n ArrayOperand.prototype.evaluate = function (processValue) {\n return this.values.map(function (el) {\n return el.evaluate(processValue);\n });\n };\n ArrayOperand.prototype.setVariables = function (variables) {\n this.values.forEach(function (el) {\n el.setVariables(variables);\n });\n };\n ArrayOperand.prototype.hasFunction = function () {\n return this.values.some(function (operand) { return operand.hasFunction(); });\n };\n ArrayOperand.prototype.hasAsyncFunction = function () {\n return this.values.some(function (operand) { return operand.hasAsyncFunction(); });\n };\n ArrayOperand.prototype.addToAsyncList = function (list) {\n this.values.forEach(function (operand) { return operand.addToAsyncList(list); });\n };\n return ArrayOperand;\n}(Operand));\n\nvar Const = /** @class */ (function (_super) {\n __extends(Const, _super);\n function Const(value) {\n var _this = _super.call(this) || this;\n _this.value = value;\n return _this;\n }\n Const.prototype.getType = function () {\n return \"const\";\n };\n Const.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return this.value.toString();\n };\n Object.defineProperty(Const.prototype, \"correctValue\", {\n get: function () {\n return this.getCorrectValue(this.value);\n },\n enumerable: false,\n configurable: true\n });\n Const.prototype.evaluate = function () {\n return this.getCorrectValue(this.value);\n };\n Const.prototype.setVariables = function (variables) { };\n Const.prototype.getCorrectValue = function (value) {\n if (!value || typeof value != \"string\")\n return value;\n if (this.isBooleanValue(value))\n return value.toLowerCase() === \"true\";\n if (value.length > 1 &&\n this.isQuote(value[0]) &&\n this.isQuote(value[value.length - 1]))\n return value.substr(1, value.length - 2);\n if (OperandMaker.isNumeric(value)) {\n if (value.indexOf(\"0x\") == 0)\n return parseInt(value);\n if (value.length > 1 && value[0] == \"0\")\n return value;\n return parseFloat(value);\n }\n return value;\n };\n Const.prototype.isQuote = function (ch) {\n return ch == \"'\" || ch == '\"';\n };\n Const.prototype.isBooleanValue = function (value) {\n return (value &&\n (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n };\n return Const;\n}(Operand));\n\nvar Variable = /** @class */ (function (_super) {\n __extends(Variable, _super);\n function Variable(variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.variableName = variableName;\n _this.valueInfo = {};\n _this.useValueAsItIs = false;\n if (!!_this.variableName &&\n _this.variableName.length > 1 &&\n _this.variableName[0] === Variable.DisableConversionChar) {\n _this.variableName = _this.variableName.substr(1);\n _this.useValueAsItIs = true;\n }\n return _this;\n }\n Variable.prototype.getType = function () {\n return \"variable\";\n };\n Variable.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n var prefix = this.useValueAsItIs ? Variable.DisableConversionChar : \"\";\n return \"{\" + prefix + this.variableName + \"}\";\n };\n Object.defineProperty(Variable.prototype, \"variable\", {\n get: function () {\n return this.variableName;\n },\n enumerable: false,\n configurable: true\n });\n Variable.prototype.evaluate = function (processValue) {\n this.valueInfo.name = this.variableName;\n processValue.getValueInfo(this.valueInfo);\n return this.valueInfo.hasValue\n ? this.getCorrectValue(this.valueInfo.value)\n : null;\n };\n Variable.prototype.setVariables = function (variables) {\n variables.push(this.variableName);\n };\n Variable.prototype.getCorrectValue = function (value) {\n if (this.useValueAsItIs)\n return value;\n return _super.prototype.getCorrectValue.call(this, value);\n };\n Variable.DisableConversionChar = \"#\";\n return Variable;\n}(Const));\n\nvar FunctionOperand = /** @class */ (function (_super) {\n __extends(FunctionOperand, _super);\n function FunctionOperand(originalValue, parameters) {\n var _this = _super.call(this) || this;\n _this.originalValue = originalValue;\n _this.parameters = parameters;\n _this.isReadyValue = false;\n if (Array.isArray(parameters) && parameters.length === 0) {\n _this.parameters = new ArrayOperand([]);\n }\n return _this;\n }\n FunctionOperand.prototype.getType = function () {\n return \"function\";\n };\n FunctionOperand.prototype.evaluateAsync = function (processValue) {\n var _this = this;\n this.isReadyValue = false;\n var asyncProcessValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__[\"ProcessValue\"]();\n asyncProcessValue.values = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(processValue.values);\n asyncProcessValue.properties = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(processValue.properties);\n asyncProcessValue.properties.returnResult = function (result) {\n _this.asynResult = result;\n _this.isReadyValue = true;\n _this.onAsyncReady();\n };\n this.evaluateCore(asyncProcessValue);\n };\n FunctionOperand.prototype.evaluate = function (processValue) {\n if (this.isReady)\n return this.asynResult;\n return this.evaluateCore(processValue);\n };\n FunctionOperand.prototype.evaluateCore = function (processValue) {\n return _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.run(this.originalValue, this.parameters.evaluate(processValue), processValue.properties);\n };\n FunctionOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return this.originalValue + \"(\" + this.parameters.toString(func) + \")\";\n };\n FunctionOperand.prototype.setVariables = function (variables) {\n this.parameters.setVariables(variables);\n };\n Object.defineProperty(FunctionOperand.prototype, \"isReady\", {\n get: function () {\n return this.isReadyValue;\n },\n enumerable: false,\n configurable: true\n });\n FunctionOperand.prototype.hasFunction = function () {\n return true;\n };\n FunctionOperand.prototype.hasAsyncFunction = function () {\n return _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.isAsyncFunction(this.originalValue);\n };\n FunctionOperand.prototype.addToAsyncList = function (list) {\n if (this.hasAsyncFunction()) {\n list.push(this);\n }\n };\n return FunctionOperand;\n}(Operand));\n\nvar OperandMaker = /** @class */ (function () {\n function OperandMaker() {\n }\n OperandMaker.throwInvalidOperatorError = function (op) {\n throw new Error(\"Invalid operator: '\" + op + \"'\");\n };\n OperandMaker.safeToString = function (operand, func) {\n return operand == null ? \"\" : operand.toString(func);\n };\n OperandMaker.toOperandString = function (value) {\n if (!!value &&\n !OperandMaker.isNumeric(value) &&\n !OperandMaker.isBooleanValue(value))\n value = \"'\" + value + \"'\";\n return value;\n };\n OperandMaker.isSpaceString = function (str) {\n return !!str && !str.replace(\" \", \"\");\n };\n OperandMaker.isNumeric = function (value) {\n if (!!value &&\n (value.indexOf(\"-\") > -1 ||\n value.indexOf(\"+\") > 1 ||\n value.indexOf(\"*\") > -1 ||\n value.indexOf(\"^\") > -1 ||\n value.indexOf(\"/\") > -1 ||\n value.indexOf(\"%\") > -1))\n return false;\n if (OperandMaker.isSpaceString(value))\n return false;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value);\n };\n OperandMaker.isBooleanValue = function (value) {\n return (!!value &&\n (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n };\n OperandMaker.isTwoValueEquals = function (x, y) {\n if (x === \"undefined\")\n x = undefined;\n if (y === \"undefined\")\n y = undefined;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(x, y, true);\n };\n OperandMaker.operatorToString = function (operatorName) {\n var opStr = OperandMaker.signs[operatorName];\n return opStr == null ? operatorName : opStr;\n };\n OperandMaker.unaryFunctions = {\n empty: function (value) {\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(value);\n },\n notempty: function (value) {\n return !OperandMaker.unaryFunctions.empty(value);\n },\n negate: function (value) {\n return !value;\n },\n };\n OperandMaker.binaryFunctions = {\n arithmeticOp: function (operatorName) {\n return function (a, b) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(a) && !OperandMaker.isSpaceString(a)) {\n a = typeof b === \"string\" ? \"\" : 0;\n }\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(b) && !OperandMaker.isSpaceString(b)) {\n b = typeof a === \"string\" ? \"\" : 0;\n }\n var consumer = OperandMaker.binaryFunctions[operatorName];\n return consumer == null ? null : consumer.call(this, a, b);\n };\n },\n and: function (a, b) {\n return a && b;\n },\n or: function (a, b) {\n return a || b;\n },\n plus: function (a, b) {\n return a + b;\n },\n minus: function (a, b) {\n return a - b;\n },\n mul: function (a, b) {\n return a * b;\n },\n div: function (a, b) {\n if (!b)\n return null;\n return a / b;\n },\n mod: function (a, b) {\n if (!b)\n return null;\n return a % b;\n },\n power: function (a, b) {\n return Math.pow(a, b);\n },\n greater: function (left, right) {\n if (left == null || right == null)\n return false;\n return left > right;\n },\n less: function (left, right) {\n if (left == null || right == null)\n return false;\n return left < right;\n },\n greaterorequal: function (left, right) {\n if (OperandMaker.binaryFunctions.equal(left, right))\n return true;\n return OperandMaker.binaryFunctions.greater(left, right);\n },\n lessorequal: function (left, right) {\n if (OperandMaker.binaryFunctions.equal(left, right))\n return true;\n return OperandMaker.binaryFunctions.less(left, right);\n },\n equal: function (left, right) {\n return OperandMaker.isTwoValueEquals(left, right);\n },\n notequal: function (left, right) {\n return !OperandMaker.binaryFunctions.equal(left, right);\n },\n contains: function (left, right) {\n return OperandMaker.binaryFunctions.containsCore(left, right, true);\n },\n notcontains: function (left, right) {\n if (!left && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n return OperandMaker.binaryFunctions.containsCore(left, right, false);\n },\n anyof: function (left, right) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) ||\n (!Array.isArray(left) && left.length === 0))\n return false;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n if (!Array.isArray(left))\n return OperandMaker.binaryFunctions.contains(right, left);\n if (!Array.isArray(right))\n return OperandMaker.binaryFunctions.contains(left, right);\n for (var i = 0; i < right.length; i++) {\n if (OperandMaker.binaryFunctions.contains(left, right[i]))\n return true;\n }\n return false;\n },\n allof: function (left, right) {\n if (!left && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return false;\n if (!Array.isArray(right))\n return OperandMaker.binaryFunctions.contains(left, right);\n for (var i = 0; i < right.length; i++) {\n if (!OperandMaker.binaryFunctions.contains(left, right[i]))\n return false;\n }\n return true;\n },\n containsCore: function (left, right, isContains) {\n if (!left && left !== 0 && left !== false)\n return false;\n if (!left.length) {\n left = left.toString();\n if (typeof right === \"string\" || right instanceof String) {\n left = left.toUpperCase();\n right = right.toUpperCase();\n }\n }\n if (typeof left === \"string\" || left instanceof String) {\n if (!right)\n return false;\n right = right.toString();\n var found = left.indexOf(right) > -1;\n return isContains ? found : !found;\n }\n var rightArray = Array.isArray(right) ? right : [right];\n for (var rIndex = 0; rIndex < rightArray.length; rIndex++) {\n var i = 0;\n right = rightArray[rIndex];\n for (; i < left.length; i++) {\n if (OperandMaker.isTwoValueEquals(left[i], right))\n break;\n }\n if (i == left.length)\n return !isContains;\n }\n return isContains;\n },\n };\n OperandMaker.signs = {\n less: \"<\",\n lessorequal: \"<=\",\n greater: \">\",\n greaterorequal: \">=\",\n equal: \"==\",\n notequal: \"!=\",\n plus: \"+\",\n minus: \"-\",\n mul: \"*\",\n div: \"/\",\n and: \"and\",\n or: \"or\",\n power: \"^\",\n mod: \"%\",\n negate: \"!\",\n };\n return OperandMaker;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/flowpanel.ts\":\n/*!**************************!*\\\n !*** ./src/flowpanel.ts ***!\n \\**************************/\n/*! exports provided: FlowPanelModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return FlowPanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel */ \"./src/panel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * The flow panel object. It is a container with flow layout where you can mix questions with markdown text.\n *\n */\nvar FlowPanelModel = /** @class */ (function (_super) {\n __extends(FlowPanelModel, _super);\n function FlowPanelModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"content\", _this, true);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"content\", function () {\n self.onContentChanged();\n });\n return _this;\n }\n FlowPanelModel.prototype.getType = function () {\n return \"flowpanel\";\n };\n FlowPanelModel.prototype.getChildrenLayoutType = function () {\n return \"flow\";\n };\n FlowPanelModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.onContentChanged();\n };\n Object.defineProperty(FlowPanelModel.prototype, \"content\", {\n get: function () {\n return this.getLocalizableStringText(\"content\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"content\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelModel.prototype, \"locContent\", {\n get: function () {\n return this.getLocalizableString(\"content\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelModel.prototype, \"html\", {\n get: function () {\n return this.getPropertyValue(\"html\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"html\", val);\n },\n enumerable: false,\n configurable: true\n });\n FlowPanelModel.prototype.onContentChanged = function () {\n var html = \"\";\n if (!!this.onCustomHtmlProducing) {\n html = this.onCustomHtmlProducing();\n }\n else {\n html = this.produceHtml();\n }\n this.html = html;\n if (!!this.contentChangedCallback)\n this.contentChangedCallback();\n };\n FlowPanelModel.prototype.produceHtml = function () {\n var html = [];\n //contentElementNamePrefix\n var regEx = /{(.*?(element:)[^$].*?)}/g;\n var str = this.content;\n var startIndex = 0;\n var res = null;\n while ((res = regEx.exec(str)) !== null) {\n if (res.index > startIndex) {\n html.push(str.substr(startIndex, res.index - startIndex));\n startIndex = res.index;\n }\n var question = this.getQuestionFromText(res[0]);\n if (!!question) {\n html.push(this.getHtmlForQuestion(question));\n }\n else {\n html.push(str.substr(startIndex, res.index + res[0].length - startIndex));\n }\n startIndex = res.index + res[0].length;\n }\n if (startIndex < str.length) {\n html.push(str.substr(startIndex, str.length - startIndex));\n }\n return html.join(\"\").replace(new RegExp(\"
\", \"g\"), \"
\");\n };\n FlowPanelModel.prototype.getQuestionFromText = function (str) {\n str = str.substr(1, str.length - 2);\n str = str.replace(FlowPanelModel.contentElementNamePrefix, \"\").trim();\n return this.getQuestionByName(str);\n };\n FlowPanelModel.prototype.getHtmlForQuestion = function (question) {\n if (!!this.onGetHtmlForQuestion)\n return this.onGetHtmlForQuestion(question);\n return \"\";\n };\n FlowPanelModel.prototype.getQuestionHtmlId = function (question) {\n return this.name + \"_\" + question.id;\n };\n FlowPanelModel.prototype.onAddElement = function (element, index) {\n _super.prototype.onAddElement.call(this, element, index);\n this.addElementToContent(element);\n element.renderWidth = \"\";\n };\n FlowPanelModel.prototype.onRemoveElement = function (element) {\n var searchStr = this.getElementContentText(element);\n this.content = this.content.replace(searchStr, \"\");\n _super.prototype.onRemoveElement.call(this, element);\n };\n FlowPanelModel.prototype.dragDropMoveElement = function (src, target, targetIndex) { };\n FlowPanelModel.prototype.addElementToContent = function (element) {\n if (this.isLoadingFromJson)\n return;\n var text = this.getElementContentText(element);\n if (!this.insertTextAtCursor(text)) {\n this.content = this.content + text;\n }\n };\n FlowPanelModel.prototype.insertTextAtCursor = function (text, prevName) {\n if (prevName === void 0) { prevName = null; }\n if (!this.isDesignMode ||\n typeof document === \"undefined\" ||\n !window.getSelection)\n return false;\n var sel = window.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n var range = sel.getRangeAt(0);\n range.deleteContents();\n range.insertNode(document.createTextNode(text));\n var self = this;\n if (self.getContent) {\n var str = self.getContent(prevName);\n this.content = str;\n }\n return true;\n }\n return false;\n };\n FlowPanelModel.prototype.getElementContentText = function (element) {\n return \"{\" + FlowPanelModel.contentElementNamePrefix + element.name + \"}\";\n };\n FlowPanelModel.contentElementNamePrefix = \"element:\";\n return FlowPanelModel;\n}(_panel__WEBPACK_IMPORTED_MODULE_1__[\"PanelModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"flowpanel\", [{ name: \"content:html\", serializationProperty: \"locContent\" }], function () {\n return new FlowPanelModel();\n}, \"panel\");\n\n\n/***/ }),\n\n/***/ \"./src/functionsfactory.ts\":\n/*!*********************************!*\\\n !*** ./src/functionsfactory.ts ***!\n \\*********************************/\n/*! exports provided: FunctionFactory, registerFunction */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return FunctionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return registerFunction; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n\nvar FunctionFactory = /** @class */ (function () {\n function FunctionFactory() {\n this.functionHash = {};\n this.isAsyncHash = {};\n }\n FunctionFactory.prototype.register = function (name, func, isAsync) {\n if (isAsync === void 0) { isAsync = false; }\n this.functionHash[name] = func;\n if (isAsync)\n this.isAsyncHash[name] = true;\n };\n FunctionFactory.prototype.unregister = function (name) {\n delete this.functionHash[name];\n delete this.isAsyncHash[name];\n };\n FunctionFactory.prototype.hasFunction = function (name) {\n return !!this.functionHash[name];\n };\n FunctionFactory.prototype.isAsyncFunction = function (name) {\n return !!this.isAsyncHash[name];\n };\n FunctionFactory.prototype.clear = function () {\n this.functionHash = {};\n };\n FunctionFactory.prototype.getAll = function () {\n var result = [];\n for (var key in this.functionHash) {\n result.push(key);\n }\n return result.sort();\n };\n FunctionFactory.prototype.run = function (name, params, properties) {\n if (properties === void 0) { properties = null; }\n var func = this.functionHash[name];\n if (!func)\n return null;\n var classRunner = {\n func: func,\n };\n if (properties) {\n for (var key in properties) {\n classRunner[key] = properties[key];\n }\n }\n return classRunner.func(params);\n };\n FunctionFactory.Instance = new FunctionFactory();\n return FunctionFactory;\n}());\n\nvar registerFunction = FunctionFactory.Instance.register;\nfunction getParamsAsArray(value, arr) {\n if (value === undefined || value === null)\n return;\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n getParamsAsArray(value[i], arr);\n }\n }\n else {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value)) {\n value = parseFloat(value);\n }\n arr.push(value);\n }\n}\nfunction sum(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = 0;\n for (var i = 0; i < arr.length; i++) {\n res += arr[i];\n }\n return res;\n}\nFunctionFactory.Instance.register(\"sum\", sum);\nfunction min_max(params, isMin) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = undefined;\n for (var i = 0; i < arr.length; i++) {\n if (res === undefined) {\n res = arr[i];\n }\n if (isMin) {\n if (res > arr[i])\n res = arr[i];\n }\n else {\n if (res < arr[i])\n res = arr[i];\n }\n }\n return res;\n}\nfunction min(params) {\n return min_max(params, true);\n}\nFunctionFactory.Instance.register(\"min\", min);\nfunction max(params) {\n return min_max(params, false);\n}\nFunctionFactory.Instance.register(\"max\", max);\nfunction count(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n return arr.length;\n}\nFunctionFactory.Instance.register(\"count\", count);\nfunction avg(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = 0;\n for (var i = 0; i < arr.length; i++) {\n res += arr[i];\n }\n return arr.length > 0 ? res / arr.length : 0;\n}\nFunctionFactory.Instance.register(\"avg\", avg);\nfunction getInArrayParams(params) {\n if (params.length != 2)\n return null;\n var arr = params[0];\n if (!arr)\n return null;\n if (!Array.isArray(arr) && !Array.isArray(Object.keys(arr)))\n return null;\n var name = params[1];\n if (typeof name !== \"string\" && !(name instanceof String))\n return null;\n return { data: arr, name: name };\n}\nfunction calcInArray(params, func) {\n var v = getInArrayParams(params);\n if (!v)\n return undefined;\n var res = undefined;\n if (Array.isArray(v.data)) {\n for (var i = 0; i < v.data.length; i++) {\n var item = v.data[i];\n if (!!item && item[v.name]) {\n res = func(res, item[v.name]);\n }\n }\n }\n else {\n for (var key in v.data) {\n var item = v.data[key];\n if (!!item && item[v.name]) {\n res = func(res, item[v.name]);\n }\n }\n }\n return res;\n}\nfunction sumInArray(params) {\n var res = calcInArray(params, function (res, val) {\n if (res == undefined)\n res = 0;\n return +res + +val;\n });\n return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"sumInArray\", sumInArray);\nfunction minInArray(params) {\n return calcInArray(params, function (res, val) {\n if (res == undefined)\n return val;\n return res < val ? res : val;\n });\n}\nFunctionFactory.Instance.register(\"minInArray\", minInArray);\nfunction maxInArray(params) {\n return calcInArray(params, function (res, val) {\n if (res == undefined)\n return val;\n return res > val ? res : val;\n });\n}\nFunctionFactory.Instance.register(\"maxInArray\", maxInArray);\nfunction countInArray(params) {\n var res = calcInArray(params, function (res, val) {\n if (res == undefined)\n res = 0;\n return res + 1;\n });\n return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"countInArray\", countInArray);\nfunction avgInArray(params) {\n var count = countInArray(params);\n if (count == 0)\n return 0;\n return sumInArray(params) / count;\n}\nFunctionFactory.Instance.register(\"avgInArray\", avgInArray);\nfunction iif(params) {\n if (!params && params.length !== 3)\n return \"\";\n return params[0] ? params[1] : params[2];\n}\nFunctionFactory.Instance.register(\"iif\", iif);\nfunction getDate(params) {\n if (!params && params.length < 1)\n return null;\n if (!params[0])\n return null;\n return new Date(params[0]);\n}\nFunctionFactory.Instance.register(\"getDate\", getDate);\nfunction age(params) {\n if (!params && params.length < 1)\n return null;\n if (!params[0])\n return null;\n var birthDate = new Date(params[0]);\n var today = new Date();\n var age = today.getFullYear() - birthDate.getFullYear();\n var m = today.getMonth() - birthDate.getMonth();\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\n age -= age > 0 ? 1 : 0;\n }\n return age;\n}\nFunctionFactory.Instance.register(\"age\", age);\nfunction isContainerReady(params) {\n if (!params && params.length < 1)\n return false;\n if (!params[0] || !this.survey)\n return false;\n var name = params[0];\n var container = this.survey.getPageByName(name);\n if (!container)\n container = this.survey.getPanelByName(name);\n if (!container)\n return false;\n var questions = container.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].hasErrors(false))\n return false;\n }\n return true;\n}\nFunctionFactory.Instance.register(\"isContainerReady\", isContainerReady);\nfunction isDisplayMode() {\n return this.survey && this.survey.isDisplayMode;\n}\nFunctionFactory.Instance.register(\"isDisplayMode\", isDisplayMode);\nfunction currentDate() {\n return new Date();\n}\nFunctionFactory.Instance.register(\"currentDate\", currentDate);\nfunction today(params) {\n var res = new Date();\n if (Array.isArray(params) && params.length == 1) {\n res.setDate(res.getDate() + params[0]);\n }\n return res;\n}\nFunctionFactory.Instance.register(\"today\", today);\nfunction diffDays(params) {\n if (!Array.isArray(params) || params.length !== 2)\n return 0;\n if (!params[0] || !params[1])\n return 0;\n var date1 = new Date(params[0]);\n var date2 = new Date(params[1]);\n var diffTime = Math.abs(date2 - date1);\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n}\nFunctionFactory.Instance.register(\"diffDays\", diffDays);\n\n\n/***/ }),\n\n/***/ \"./src/helpers.ts\":\n/*!************************!*\\\n !*** ./src/helpers.ts ***!\n \\************************/\n/*! exports provided: Helpers */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return Helpers; });\nvar Helpers = /** @class */ (function () {\n function Helpers() {\n }\n /**\n * A static methods that returns true if a value undefined, null, empty string or empty array.\n * @param value\n */\n Helpers.isValueEmpty = function (value) {\n if (Array.isArray(value) && value.length === 0)\n return true;\n if (!!value && typeof value === \"object\" && value.constructor === Object) {\n for (var key in value) {\n if (!Helpers.isValueEmpty(value[key]))\n return false;\n }\n return true;\n }\n return !value && value !== 0 && value !== false;\n };\n Helpers.isArrayContainsEqual = function (x, y) {\n if (!Array.isArray(x) || !Array.isArray(y))\n return false;\n if (x.length !== y.length)\n return false;\n for (var i = 0; i < x.length; i++) {\n var j = 0;\n for (; j < y.length; j++) {\n if (Helpers.isTwoValueEquals(x[i], y[j]))\n break;\n }\n if (j === y.length)\n return false;\n }\n return true;\n };\n Helpers.isArraysEqual = function (x, y, ignoreOrder) {\n if (ignoreOrder === void 0) { ignoreOrder = false; }\n if (!Array.isArray(x) || !Array.isArray(y))\n return false;\n if (x.length !== y.length)\n return false;\n if (ignoreOrder) {\n var xSorted = [];\n var ySorted = [];\n for (var i = 0; i < x.length; i++) {\n xSorted.push(x[i]);\n ySorted.push(y[i]);\n }\n xSorted.sort();\n ySorted.sort();\n x = xSorted;\n y = ySorted;\n }\n for (var i = 0; i < x.length; i++) {\n if (!Helpers.isTwoValueEquals(x[i], y[i]))\n return false;\n }\n return true;\n };\n Helpers.isTwoValueEquals = function (x, y, ignoreOrder) {\n if (ignoreOrder === void 0) { ignoreOrder = false; }\n if (x === y)\n return true;\n if (Array.isArray(x) && x.length === 0 && typeof y === \"undefined\")\n return true;\n if (Array.isArray(y) && y.length === 0 && typeof x === \"undefined\")\n return true;\n if ((x === undefined || x === null) && y === \"\")\n return true;\n if ((y === undefined || y === null) && x === \"\")\n return true;\n if (typeof x === \"string\" && typeof y == \"string\")\n return x == y;\n if (Helpers.isConvertibleToNumber(x) && Helpers.isConvertibleToNumber(y)) {\n if (parseInt(x) === parseInt(y) && parseFloat(x) === parseFloat(y)) {\n return true;\n }\n }\n if ((!Helpers.isValueEmpty(x) && Helpers.isValueEmpty(y)) ||\n (Helpers.isValueEmpty(x) && !Helpers.isValueEmpty(y)))\n return false;\n if ((x === true || x === false) && typeof y == \"string\") {\n return x.toString() === y.toLocaleLowerCase();\n }\n if ((y === true || y === false) && typeof x == \"string\") {\n return y.toString() === x.toLocaleLowerCase();\n }\n if (!(x instanceof Object) && !(y instanceof Object))\n return x == y;\n if (!(x instanceof Object) || !(y instanceof Object))\n return false;\n if (x[\"equals\"])\n return x.equals(y);\n if (!!x.toJSON && !!y.toJSON && !!x.getType && !!y.getType) {\n if (x.isDiposed || y.isDiposed)\n return false;\n if (x.getType() !== y.getType())\n return false;\n if (!!x.name && x.name !== y.name)\n return false;\n return this.isTwoValueEquals(x.toJSON(), y.toJSON());\n }\n if (Array.isArray(x) && Array.isArray(y))\n return Helpers.isArraysEqual(x, y, ignoreOrder);\n for (var p in x) {\n if (!x.hasOwnProperty(p))\n continue;\n if (!y.hasOwnProperty(p))\n return false;\n if (x[p] === y[p])\n continue;\n if (typeof x[p] !== \"object\")\n return false;\n if (!this.isTwoValueEquals(x[p], y[p]))\n return false;\n }\n for (p in y) {\n if (y.hasOwnProperty(p) && !x.hasOwnProperty(p))\n return false;\n }\n return true;\n };\n Helpers.randomizeArray = function (array) {\n for (var i = array.length - 1; i > 0; i--) {\n var j = Math.floor(Math.random() * (i + 1));\n var temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n return array;\n };\n Helpers.getUnbindValue = function (value) {\n if (!!value && value instanceof Object) {\n //do not return the same object instance!!!\n return JSON.parse(JSON.stringify(value));\n }\n return value;\n };\n Helpers.createCopy = function (obj) {\n var res = {};\n if (!obj)\n return res;\n for (var key in obj) {\n res[key] = obj[key];\n }\n return res;\n };\n Helpers.isConvertibleToNumber = function (value) {\n return (value !== undefined &&\n value !== null &&\n !Array.isArray(value) &&\n !isNaN(value));\n };\n Helpers.isNumber = function (value) {\n if (typeof value == \"string\" &&\n !!value &&\n value.indexOf(\"0x\") == 0 &&\n value.length > 32)\n return false;\n return !isNaN(parseFloat(value)) && isFinite(value);\n };\n Helpers.getMaxLength = function (maxLength, surveyLength) {\n if (maxLength < 0) {\n maxLength = surveyLength;\n }\n return maxLength > 0 ? maxLength : null;\n };\n Helpers.getNumberByIndex = function (index, startIndexStr) {\n if (index < 0)\n return \"\";\n var startIndex = 1;\n var prefix = \"\";\n var postfix = \".\";\n var isNumeric = true;\n var strIndex = \"A\";\n var str = \"\";\n if (!!startIndexStr) {\n str = startIndexStr;\n var ind = str.length - 1;\n var hasDigit = false;\n for (var i = 0; i < str.length; i++) {\n if (Helpers.isCharDigit(str[i])) {\n hasDigit = true;\n break;\n }\n }\n var checkLetter = function () {\n return ((hasDigit && !Helpers.isCharDigit(str[ind])) ||\n Helpers.isCharNotLetterAndDigit(str[ind]));\n };\n while (ind >= 0 && checkLetter())\n ind--;\n var newPostfix = \"\";\n if (ind < str.length - 1) {\n newPostfix = str.substr(ind + 1);\n str = str.substr(0, ind + 1);\n }\n ind = str.length - 1;\n while (ind >= 0) {\n if (checkLetter())\n break;\n ind--;\n if (!hasDigit)\n break;\n }\n strIndex = str.substr(ind + 1);\n prefix = str.substr(0, ind + 1);\n if (parseInt(strIndex))\n startIndex = parseInt(strIndex);\n else if (strIndex.length == 1)\n isNumeric = false;\n if (!!newPostfix || !!prefix) {\n postfix = newPostfix;\n }\n }\n if (isNumeric)\n return prefix + (index + startIndex).toString() + postfix;\n return (prefix + String.fromCharCode(strIndex.charCodeAt(0) + index) + postfix);\n };\n Helpers.isCharNotLetterAndDigit = function (ch) {\n return ch.toUpperCase() == ch.toLowerCase() && !Helpers.isCharDigit(ch);\n };\n Helpers.isCharDigit = function (ch) {\n return ch >= \"0\" && ch <= \"9\";\n };\n return Helpers;\n}());\n\nif (!String.prototype[\"format\"]) {\n String.prototype[\"format\"] = function () {\n var args = arguments;\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != \"undefined\" ? args[number] : match;\n });\n };\n}\n\n\n/***/ }),\n\n/***/ \"./src/itemvalue.ts\":\n/*!**************************!*\\\n !*** ./src/itemvalue.ts ***!\n \\**************************/\n/*! exports provided: ItemValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return ItemValue; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\n\n\n/**\n * Array of ItemValue is used in checkox, dropdown and radiogroup choices, matrix columns and rows.\n * It has two main properties: value and text. If text is empty, value is used for displaying.\n * The text property is localizable and support markdown.\n */\nvar ItemValue = /** @class */ (function (_super) {\n __extends(ItemValue, _super);\n function ItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"itemvalue\"; }\n var _this = _super.call(this) || this;\n _this.typeName = typeName;\n _this.ownerPropertyName = \"\";\n _this.isVisibleValue = true;\n _this.locTextValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](null, true);\n _this.locTextValue.onStrChanged = function (oldValue, newValue) {\n if (newValue == _this.value) {\n newValue = undefined;\n }\n _this.propertyValueChanged(\"text\", oldValue, newValue);\n };\n _this.locTextValue.onGetTextCallback = function (txt) {\n return txt\n ? txt\n : !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(_this.value)\n ? _this.value.toString()\n : null;\n };\n if (text)\n _this.locText.text = text;\n if (!!value && typeof value === \"object\") {\n _this.setData(value);\n }\n else {\n _this.value = value;\n }\n if (_this.getType() != \"itemvalue\") {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n }\n _this.onCreating();\n return _this;\n }\n Object.defineProperty(ItemValue, \"Separator\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator = val;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.createArray = function (locOwner) {\n var items = [];\n ItemValue.setupArray(items, locOwner);\n return items;\n };\n ItemValue.setupArray = function (items, locOwner) {\n items.push = function (value) {\n var result = Array.prototype.push.call(this, value);\n value.locOwner = locOwner;\n return result;\n };\n items.unshift = function (value) {\n var result = Array.prototype.unshift.call(this, value);\n value.locOwner = locOwner;\n return result;\n };\n items.splice = function (start, deleteCount) {\n var _a;\n var items = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n items[_i - 2] = arguments[_i];\n }\n var result = (_a = Array.prototype.splice).call.apply(_a, __spreadArray([this,\n start,\n deleteCount], items));\n if (!items)\n items = [];\n for (var i = 0; i < items.length; i++) {\n items[i].locOwner = locOwner;\n }\n return result;\n };\n };\n ItemValue.setData = function (items, values) {\n items.length = 0;\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n var item;\n if (typeof value.getType === \"function\") {\n item = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(value.getType());\n }\n else {\n item = new ItemValue(null);\n }\n item.setData(value);\n if (!!value.originalItem) {\n item.originalItem = value.originalItem;\n }\n items.push(item);\n }\n };\n ItemValue.getData = function (items) {\n var result = new Array();\n for (var i = 0; i < items.length; i++) {\n result.push(items[i].getData());\n }\n return result;\n };\n ItemValue.getItemByValue = function (items, val) {\n if (!Array.isArray(items))\n return null;\n var valIsEmpty = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(val);\n for (var i = 0; i < items.length; i++) {\n if (valIsEmpty && _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(items[i].value))\n return items[i];\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(items[i].value, val))\n return items[i];\n }\n return null;\n };\n ItemValue.getTextOrHtmlByValue = function (items, val) {\n var item = ItemValue.getItemByValue(items, val);\n return item !== null ? item.locText.textOrHtml : \"\";\n };\n ItemValue.locStrsChanged = function (items) {\n for (var i = 0; i < items.length; i++) {\n items[i].locText.strChanged();\n }\n };\n ItemValue.runConditionsForItems = function (items, filteredItems, runner, values, properties, useItemExpression) {\n if (useItemExpression === void 0) { useItemExpression = true; }\n return ItemValue.runConditionsForItemsCore(items, filteredItems, runner, values, properties, true, useItemExpression);\n };\n ItemValue.runEnabledConditionsForItems = function (items, runner, values, properties, onItemCallBack) {\n return ItemValue.runConditionsForItemsCore(items, null, runner, values, properties, false, true, onItemCallBack);\n };\n ItemValue.runConditionsForItemsCore = function (items, filteredItems, runner, values, properties, isVisible, useItemExpression, onItemCallBack) {\n if (useItemExpression === void 0) { useItemExpression = true; }\n if (!values) {\n values = {};\n }\n var itemValue = values[\"item\"];\n var choiceValue = values[\"choice\"];\n var hasChanded = false;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n values[\"item\"] = item.value;\n values[\"choice\"] = item.value;\n var itemRunner = useItemExpression && !!item.getConditionRunner\n ? item.getConditionRunner(isVisible)\n : false;\n if (!itemRunner) {\n itemRunner = runner;\n }\n var newValue = true;\n if (itemRunner) {\n newValue = itemRunner.run(values, properties);\n }\n if (newValue && !!onItemCallBack) {\n newValue = onItemCallBack(item);\n }\n if (!!filteredItems && newValue) {\n filteredItems.push(item);\n }\n var oldValue = isVisible ? item.isVisible : item.isEnabled;\n if (newValue != oldValue) {\n hasChanded = true;\n if (isVisible) {\n if (!!item.setIsVisible)\n item.setIsVisible(newValue);\n }\n else {\n if (!!item.setIsEnabled)\n item.setIsEnabled(newValue);\n }\n }\n }\n if (itemValue) {\n values[\"item\"] = itemValue;\n }\n else {\n delete values[\"item\"];\n }\n if (choiceValue) {\n values[\"choice\"] = choiceValue;\n }\n else {\n delete values[\"choice\"];\n }\n return hasChanded;\n };\n ItemValue.prototype.onCreating = function () { };\n ItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"itemvalue\";\n };\n ItemValue.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.locOwner && !!this.locOwner[\"getSurvey\"]\n ? this.locOwner.getSurvey()\n : null;\n };\n ItemValue.prototype.getLocale = function () {\n return (this.locText && this.locText.locale) || \"\";\n };\n Object.defineProperty(ItemValue.prototype, \"locText\", {\n get: function () {\n return this.locTextValue;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.setLocText = function (locText) {\n this.locTextValue = locText;\n };\n Object.defineProperty(ItemValue.prototype, \"locOwner\", {\n get: function () {\n return this.locText.owner;\n },\n set: function (value) {\n this.locText.owner = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (newValue) {\n var text = undefined;\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(newValue)) {\n var str = newValue.toString();\n var index = str.indexOf(_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator);\n if (index > -1) {\n newValue = str.slice(0, index);\n text = str.slice(index + 1);\n }\n }\n this.setPropertyValue(\"value\", newValue);\n if (!!text) {\n this.text = text;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"hasText\", {\n get: function () {\n return this.locText.pureText ? true : false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"pureText\", {\n get: function () {\n return this.locText.pureText;\n },\n set: function (val) {\n this.text = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"text\", {\n get: function () {\n return this.locText.calculatedText; //TODO: it will be correct to use this.locText.text, however it would require a lot of rewriting in Creator\n },\n set: function (newText) {\n this.locText.text = newText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"calculatedText\", {\n get: function () {\n return this.locText.calculatedText;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.getData = function () {\n var json = this.toJSON();\n if (!!json[\"value\"] && !!json[\"value\"][\"pos\"]) {\n delete json[\"value\"][\"pos\"];\n }\n if (Object.keys(json).length == 1 && !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(json[\"value\"]))\n return this.value;\n return json;\n };\n ItemValue.prototype.toJSON = function () {\n var res = {};\n var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(this.getType());\n if (!properties || properties.length == 0) {\n properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(\"itemvalue\");\n }\n var jsoObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n for (var i = 0; i < properties.length; i++) {\n jsoObj.valueToJson(this, res, properties[i]);\n }\n return res;\n };\n ItemValue.prototype.setData = function (value) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value))\n return;\n if (typeof value.value !== \"undefined\") {\n var json = value;\n if (typeof value.toJSON === \"function\") {\n json = value.toJSON();\n }\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, this);\n }\n else {\n this.value = value;\n }\n this.locText.strChanged();\n };\n Object.defineProperty(ItemValue.prototype, \"visibleIf\", {\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"enableIf\", {\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"isVisible\", {\n get: function () {\n return this.isVisibleValue;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.setIsVisible = function (val) {\n this.isVisibleValue = val;\n };\n Object.defineProperty(ItemValue.prototype, \"isEnabled\", {\n get: function () {\n return this.getPropertyValue(\"isEnabled\", true);\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.setIsEnabled = function (val) {\n this.setPropertyValue(\"isEnabled\", val);\n };\n ItemValue.prototype.addUsedLocales = function (locales) {\n this.AddLocStringToUsedLocales(this.locTextValue, locales);\n };\n ItemValue.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n if (name === \"value\" && !this.hasText) {\n this.locText.onChanged();\n }\n var funcName = \"itemValuePropertyChanged\";\n if (!this.locOwner || !this.locOwner[funcName])\n return;\n this.locOwner[funcName](this, name, oldValue, newValue);\n };\n ItemValue.prototype.getConditionRunner = function (isVisible) {\n if (isVisible)\n return this.getVisibleConditionRunner();\n return this.getEnableConditionRunner();\n };\n ItemValue.prototype.getVisibleConditionRunner = function () {\n if (!this.visibleIf)\n return null;\n if (!this.visibleConditionRunner)\n this.visibleConditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.visibleIf);\n this.visibleConditionRunner.expression = this.visibleIf;\n return this.visibleConditionRunner;\n };\n ItemValue.prototype.getEnableConditionRunner = function () {\n if (!this.enableIf)\n return null;\n if (!this.enableConditionRunner)\n this.enableConditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.enableIf);\n this.enableConditionRunner.expression = this.enableIf;\n return this.enableConditionRunner;\n };\n return ItemValue;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\n_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].createItemValue = function (source, type) {\n var item = null;\n if (!!type) {\n item = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"].metaData.createClass(type, {});\n }\n else if (typeof source.getType === \"function\") {\n item = new ItemValue(null, undefined, source.getType());\n }\n else {\n item = new ItemValue(null);\n }\n item.setData(source);\n return item;\n};\n_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].itemValueLocStrChanged = function (arr) {\n ItemValue.locStrsChanged(arr);\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObjectProperty\"].getItemValuesDefaultValue = function (val) {\n var res = new Array();\n ItemValue.setData(res, val || []);\n return res;\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"itemvalue\", [\n \"!value\",\n {\n name: \"text\",\n serializationProperty: \"locText\",\n },\n { name: \"visibleIf:condition\", showMode: \"form\" },\n {\n name: \"enableIf:condition\",\n showMode: \"form\",\n visibleIf: function (obj) {\n return !obj || obj.ownerPropertyName !== \"rateValues\";\n },\n },\n], function (value) { return new ItemValue(value); });\n\n\n/***/ }),\n\n/***/ \"./src/jsonobject.ts\":\n/*!***************************!*\\\n !*** ./src/jsonobject.ts ***!\n \\***************************/\n/*! exports provided: property, propertyArray, JsonObjectProperty, CustomPropertiesCollection, JsonMetadataClass, JsonMetadata, JsonError, JsonUnknownPropertyError, JsonMissingTypeErrorBase, JsonMissingTypeError, JsonIncorrectTypeError, JsonRequiredPropertyError, JsonObject, Serializer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return property; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return propertyArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return JsonObjectProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomPropertiesCollection\", function() { return CustomPropertiesCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return JsonMetadataClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return JsonMetadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return JsonError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return JsonUnknownPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return JsonMissingTypeErrorBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return JsonMissingTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return JsonIncorrectTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return JsonRequiredPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return JsonObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return Serializer; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\nfunction ensureLocString(target, options, key) {\n var locString = target.getLocalizableString(key);\n if (!locString) {\n locString = target.createLocalizableString(key, target, true);\n if (typeof options.localizable === \"object\" &&\n typeof options.localizable.onGetTextCallback === \"function\") {\n locString.onGetTextCallback = options.localizable.onGetTextCallback;\n }\n }\n}\nfunction property(options) {\n return function (target, key) {\n if (!options || !options.localizable) {\n Object.defineProperty(target, key, {\n get: function () {\n var value = this.getPropertyValue(key);\n if (value !== undefined) {\n return value;\n }\n if (!!options) {\n if (options.defaultValue !== undefined) {\n return options.defaultValue;\n }\n if (options.defaultSource !== undefined) {\n return this[options.defaultSource];\n }\n }\n return undefined;\n },\n set: function (val) {\n this.setPropertyValue(key, val);\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n }\n else {\n Object.defineProperty(target, key, {\n get: function () {\n ensureLocString(this, options, key);\n return (this.getLocalizableStringText(key) ||\n options.defaultValue ||\n this[options.defaultSource]);\n },\n set: function (val) {\n ensureLocString(this, options, key);\n this.setLocalizableStringText(key, val);\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n Object.defineProperty(target, options.localizable === true\n ? \"loc\" + key.charAt(0).toUpperCase() + key.slice(1)\n : options.localizable.name, {\n get: function () {\n ensureLocString(this, options, key);\n return this.getLocalizableString(key);\n },\n });\n }\n };\n}\nfunction ensureArray(target, options, key) {\n target.ensureArray(key, !!options ? options.onPush : null, !!options ? options.onRemove : null);\n}\nfunction propertyArray(options) {\n return function (target, key) {\n Object.defineProperty(target, key, {\n get: function () {\n ensureArray(this, options, key);\n return this.getPropertyValue(key);\n },\n set: function (val) {\n ensureArray(this, options, key);\n var arr = this.getPropertyValue(key);\n if (val === arr) {\n return;\n }\n if (arr) {\n arr.splice.apply(arr, __spreadArray([0, arr.length], (val || [])));\n }\n else {\n this.setPropertyValue(key, val);\n }\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n };\n}\n/**\n * Contains information about a property of a survey element (page, panel, questions, and etc).\n * @see addProperty\n * @see removeProperty\n * @see [Add Properties](https://surveyjs.io/Documentation/Survey-Creator#addproperties)\n * @see [Remove Properties](https://surveyjs.io/Documentation/Survey-Creator#removeproperties)\n */\nvar JsonObjectProperty = /** @class */ (function () {\n function JsonObjectProperty(classInfo, name, isRequired) {\n if (isRequired === void 0) { isRequired = false; }\n this.name = name;\n this.typeValue = null;\n this.choicesValue = null;\n this.baseValue = null;\n this.isRequiredValue = false;\n this.isUniqueValue = false;\n this.readOnlyValue = null;\n this.visibleValue = null;\n this.isLocalizableValue = null;\n this.choicesfunc = null;\n this.dependedProperties = null;\n this.isSerializable = true;\n this.isLightSerializable = true;\n this.isCustom = false;\n this.isDynamicChoices = false; //TODO obsolete, use dependsOn attribute\n this.isBindable = false;\n this.className = null;\n this.alternativeName = null;\n this.classNamePart = null;\n this.baseClassName = null;\n this.defaultValueValue = null;\n this.serializationProperty = null;\n this.displayName = null;\n this.category = \"\";\n this.categoryIndex = -1;\n this.visibleIndex = -1;\n this.nextToProperty = null;\n this.showMode = null;\n this.maxLength = -1;\n this.layout = null;\n this.onGetValue = null;\n this.onSetValue = null;\n this.visibleIf = null;\n this.isArray = false;\n this.classInfoValue = classInfo;\n this.isRequiredValue = isRequired;\n this.idValue = JsonObjectProperty.Index++;\n }\n Object.defineProperty(JsonObjectProperty.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"classInfo\", {\n get: function () {\n return this.classInfoValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"type\", {\n get: function () {\n return this.typeValue ? this.typeValue : \"string\";\n },\n set: function (value) {\n if (value === \"itemvalues\")\n value = \"itemvalue[]\";\n this.typeValue = value;\n if (this.typeValue.indexOf(\"[]\") === this.typeValue.length - 2) {\n this.isArray = true;\n this.className = this.typeValue.substr(0, this.typeValue.length - 2);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isRequired\", {\n get: function () {\n return this.isRequiredValue;\n },\n set: function (val) {\n this.isRequiredValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isUnique\", {\n get: function () {\n return this.isUniqueValue;\n },\n set: function (val) {\n this.isUniqueValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseGetValue\", {\n get: function () {\n return this.onGetValue || this.serializationProperty;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"defaultValue\", {\n get: function () {\n var result = this.defaultValueValue;\n if (!!JsonObjectProperty.getItemValuesDefaultValue &&\n JsonObject.metaData.isDescendantOf(this.className, \"itemvalue\")) {\n result = JsonObjectProperty.getItemValuesDefaultValue(this.defaultValueValue || []);\n }\n return result;\n },\n set: function (newValue) {\n this.defaultValueValue = newValue;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.isDefaultValue = function (value) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(this.defaultValue))\n return this.defaultValue == value;\n return ((value === false && (this.type == \"boolean\" || this.type == \"switch\")) ||\n value === \"\" ||\n _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(value));\n };\n JsonObjectProperty.prototype.getValue = function (obj) {\n if (this.onGetValue)\n return this.onGetValue(obj);\n if (this.serializationProperty && !!obj[this.serializationProperty])\n return obj[this.serializationProperty].getJson();\n return obj[this.name];\n };\n JsonObjectProperty.prototype.getPropertyValue = function (obj) {\n if (this.isLocalizable) {\n return !!obj[this.serializationProperty]\n ? obj[this.serializationProperty].text\n : null;\n }\n return this.getValue(obj);\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseSetValue\", {\n get: function () {\n return this.onSetValue || this.serializationProperty;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) {\n if (this.onSetValue) {\n this.onSetValue(obj, value, jsonConv);\n }\n else {\n if (this.serializationProperty && !!obj[this.serializationProperty])\n obj[this.serializationProperty].setJson(value);\n else {\n if (value && typeof value === \"string\") {\n if (this.type == \"number\") {\n value = parseInt(value);\n }\n if (this.type == \"boolean\" || this.type == \"switch\") {\n value = value.toLowerCase() === \"true\";\n }\n }\n obj[this.name] = value;\n }\n }\n };\n JsonObjectProperty.prototype.getObjType = function (objType) {\n if (!this.classNamePart)\n return objType;\n return objType.replace(this.classNamePart, \"\");\n };\n JsonObjectProperty.prototype.getClassName = function (className) {\n if (className)\n className = className.toLowerCase();\n return this.classNamePart && className.indexOf(this.classNamePart) < 0\n ? className + this.classNamePart\n : className;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"choices\", {\n /**\n * Depricated, please use getChoices\n */\n get: function () {\n return this.getChoices(null);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasChoices\", {\n get: function () {\n return !!this.choicesValue || !!this.choicesfunc;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.getChoices = function (obj, choicesCallback) {\n if (choicesCallback === void 0) { choicesCallback = null; }\n if (this.choicesValue != null)\n return this.choicesValue;\n if (this.choicesfunc != null)\n return this.choicesfunc(obj, choicesCallback);\n return null;\n };\n JsonObjectProperty.prototype.setChoices = function (value, valueFunc) {\n if (valueFunc === void 0) { valueFunc = null; }\n this.choicesValue = value;\n this.choicesfunc = valueFunc;\n };\n JsonObjectProperty.prototype.getBaseValue = function () {\n if (!this.baseValue)\n return \"\";\n if (typeof this.baseValue == \"function\")\n return this.baseValue();\n return this.baseValue;\n };\n JsonObjectProperty.prototype.setBaseValue = function (val) {\n this.baseValue = val;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"readOnly\", {\n get: function () {\n return this.readOnlyValue != null ? this.readOnlyValue : false;\n },\n set: function (val) {\n this.readOnlyValue = val;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.isVisible = function (layout, obj) {\n if (obj === void 0) { obj = null; }\n var isLayout = !this.layout || this.layout == layout;\n if (!this.visible || !isLayout)\n return false;\n if (!!this.visibleIf && !!obj)\n return this.visibleIf(obj);\n return true;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"visible\", {\n get: function () {\n return this.visibleValue != null ? this.visibleValue : true;\n },\n set: function (val) {\n this.visibleValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isLocalizable\", {\n get: function () {\n return this.isLocalizableValue != null ? this.isLocalizableValue : false;\n },\n set: function (val) {\n this.isLocalizableValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"dataList\", {\n get: function () {\n return Array.isArray(this.dataListValue) ? this.dataListValue : [];\n },\n set: function (val) {\n this.dataListValue = val;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.mergeWith = function (prop) {\n var valuesNames = JsonObjectProperty.mergableValues;\n for (var i = 0; i < valuesNames.length; i++) {\n this.mergeValue(prop, valuesNames[i]);\n }\n };\n JsonObjectProperty.prototype.addDependedProperty = function (name) {\n if (!this.dependedProperties) {\n this.dependedProperties = [];\n }\n if (this.dependedProperties.indexOf(name) < 0) {\n this.dependedProperties.push(name);\n }\n };\n JsonObjectProperty.prototype.getDependedProperties = function () {\n return !!this.dependedProperties ? this.dependedProperties : [];\n };\n JsonObjectProperty.prototype.schemaType = function () {\n if (!!this.className)\n return \"array\";\n if (!!this.baseClassName)\n return \"array\";\n if (this.type == \"boolean\" || this.type == \"number\")\n return this.type;\n return \"string\";\n };\n JsonObjectProperty.prototype.mergeValue = function (prop, valueName) {\n if (this[valueName] == null && prop[valueName] != null) {\n this[valueName] = prop[valueName];\n }\n };\n JsonObjectProperty.Index = 1;\n JsonObjectProperty.mergableValues = [\n \"typeValue\",\n \"choicesValue\",\n \"baseValue\",\n \"readOnlyValue\",\n \"visibleValue\",\n \"isSerializable\",\n \"isLightSerializable\",\n \"isCustom\",\n \"isBindable\",\n \"isUnique\",\n \"isDynamicChoices\",\n \"isLocalizableValue\",\n \"className\",\n \"alternativeName\",\n \"layout\",\n \"classNamePart\",\n \"baseClassName\",\n \"defaultValue\",\n \"serializationProperty\",\n \"onGetValue\",\n \"onSetValue\",\n \"displayName\",\n \"category\",\n \"categoryIndex\",\n \"visibleIndex\",\n \"nextToProperty\",\n \"showMode\",\n \"dependedProperties\",\n \"visibleIf\",\n \"onPropertyEditorUpdate\",\n \"maxLength\",\n \"maxValue\",\n \"minValue\",\n \"dataListValue\",\n ];\n return JsonObjectProperty;\n}());\n\nvar CustomPropertiesCollection = /** @class */ (function () {\n function CustomPropertiesCollection() {\n }\n CustomPropertiesCollection.addProperty = function (className, property) {\n className = className.toLowerCase();\n var props = CustomPropertiesCollection.properties;\n if (!props[className]) {\n props[className] = [];\n }\n props[className].push(property);\n };\n CustomPropertiesCollection.removeProperty = function (className, propertyName) {\n className = className.toLowerCase();\n var props = CustomPropertiesCollection.properties;\n if (!props[className])\n return;\n var properties = props[className];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].name == propertyName) {\n props[className].splice(i, 1);\n break;\n }\n }\n };\n CustomPropertiesCollection.addClass = function (className, parentClassName) {\n className = className.toLowerCase();\n if (parentClassName) {\n parentClassName = parentClassName.toLowerCase();\n }\n CustomPropertiesCollection.parentClasses[className] = parentClassName;\n };\n CustomPropertiesCollection.getProperties = function (className) {\n className = className.toLowerCase();\n var res = [];\n var props = CustomPropertiesCollection.properties;\n while (className) {\n var properties = props[className];\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n res.push(properties[i]);\n }\n }\n className = CustomPropertiesCollection.parentClasses[className];\n }\n return res;\n };\n CustomPropertiesCollection.createProperties = function (obj) {\n if (!obj || !obj.getType)\n return;\n CustomPropertiesCollection.createPropertiesCore(obj, obj.getType());\n };\n CustomPropertiesCollection.createPropertiesCore = function (obj, className) {\n var props = CustomPropertiesCollection.properties;\n if (props[className]) {\n CustomPropertiesCollection.createPropertiesInObj(obj, props[className]);\n }\n var parentClass = CustomPropertiesCollection.parentClasses[className];\n if (parentClass) {\n CustomPropertiesCollection.createPropertiesCore(obj, parentClass);\n }\n };\n CustomPropertiesCollection.createPropertiesInObj = function (obj, properties) {\n for (var i = 0; i < properties.length; i++) {\n CustomPropertiesCollection.createPropertyInObj(obj, properties[i]);\n }\n };\n CustomPropertiesCollection.createPropertyInObj = function (obj, prop) {\n if (obj[prop.name] || obj.hasOwnProperty(prop.name))\n return;\n if (prop.isLocalizable &&\n prop.serializationProperty &&\n !obj[prop.serializationProperty] &&\n obj.createCustomLocalizableObj) {\n obj.createCustomLocalizableObj(prop.name);\n var locDesc = {\n get: function () {\n return obj.getLocalizableString(prop.name);\n },\n };\n Object.defineProperty(obj, prop.serializationProperty, locDesc);\n var desc = {\n get: function () {\n return obj.getLocalizableStringText(prop.name, prop.defaultValue);\n },\n set: function (v) {\n obj.setLocalizableStringText(prop.name, v);\n },\n };\n Object.defineProperty(obj, prop.name, desc);\n }\n else {\n var defaultValue = prop.defaultValue;\n var isArrayProp = false;\n if (typeof obj.createNewArray === \"function\") {\n if (JsonObject.metaData.isDescendantOf(prop.className, \"itemvalue\")) {\n obj.createNewArray(prop.name, function (item) {\n item.locOwner = obj;\n item.ownerPropertyName = prop.name;\n });\n isArrayProp = true;\n }\n //It is a simple array property\n if (prop.type === \"multiplevalues\") {\n obj.createNewArray(prop.name);\n isArrayProp = true;\n }\n if (isArrayProp) {\n if (Array.isArray(defaultValue)) {\n obj.setPropertyValue(prop.name, defaultValue);\n }\n defaultValue = null;\n }\n }\n if (!!obj.getPropertyValue && !!obj.setPropertyValue) {\n var desc = {\n get: function () {\n if (!!prop.onGetValue) {\n return prop.onGetValue(obj);\n }\n return obj.getPropertyValue(prop.name, defaultValue);\n },\n set: function (v) {\n if (!!prop.onSetValue) {\n prop.onSetValue(obj, v, null);\n }\n else {\n obj.setPropertyValue(prop.name, v);\n }\n },\n };\n Object.defineProperty(obj, prop.name, desc);\n }\n }\n };\n CustomPropertiesCollection.properties = {};\n CustomPropertiesCollection.parentClasses = {};\n return CustomPropertiesCollection;\n}());\n\nvar JsonMetadataClass = /** @class */ (function () {\n function JsonMetadataClass(name, properties, creator, parentName) {\n if (creator === void 0) { creator = null; }\n if (parentName === void 0) { parentName = null; }\n this.name = name;\n this.creator = creator;\n this.parentName = parentName;\n this.properties = null;\n name = name.toLowerCase();\n if (this.parentName) {\n this.parentName = this.parentName.toLowerCase();\n CustomPropertiesCollection.addClass(name, this.parentName);\n }\n this.properties = new Array();\n for (var i = 0; i < properties.length; i++) {\n var prop = this.createProperty(properties[i]);\n if (prop) {\n this.properties.push(prop);\n }\n }\n }\n JsonMetadataClass.prototype.find = function (name) {\n for (var i = 0; i < this.properties.length; i++) {\n if (this.properties[i].name == name)\n return this.properties[i];\n }\n return null;\n };\n JsonMetadataClass.prototype.createProperty = function (propInfo) {\n var propertyName = typeof propInfo === \"string\" ? propInfo : propInfo.name;\n if (!propertyName)\n return;\n var propertyType = null;\n var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol);\n if (typeIndex > -1) {\n propertyType = propertyName.substring(typeIndex + 1);\n propertyName = propertyName.substring(0, typeIndex);\n }\n var isRequired = this.getIsPropertyNameRequired(propertyName) || !!propInfo.isRequired;\n propertyName = this.getPropertyName(propertyName);\n var prop = new JsonObjectProperty(this, propertyName, isRequired);\n if (propertyType) {\n prop.type = propertyType;\n }\n if (typeof propInfo === \"object\") {\n if (propInfo.type) {\n prop.type = propInfo.type;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.default)) {\n prop.defaultValue = propInfo.default;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isSerializable)) {\n prop.isSerializable = propInfo.isSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isLightSerializable)) {\n prop.isLightSerializable = propInfo.isLightSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.maxLength)) {\n prop.maxLength = propInfo.maxLength;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.displayName)) {\n prop.displayName = propInfo.displayName;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.category)) {\n prop.category = propInfo.category;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.categoryIndex)) {\n prop.categoryIndex = propInfo.categoryIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.nextToProperty)) {\n prop.nextToProperty = propInfo.nextToProperty;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.visibleIndex)) {\n prop.visibleIndex = propInfo.visibleIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.showMode)) {\n prop.showMode = propInfo.showMode;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.maxValue)) {\n prop.maxValue = propInfo.maxValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.minValue)) {\n prop.minValue = propInfo.minValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.dataList)) {\n prop.dataList = propInfo.dataList;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isDynamicChoices)) {\n prop.isDynamicChoices = propInfo.isDynamicChoices;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isBindable)) {\n prop.isBindable = propInfo.isBindable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isUnique)) {\n prop.isUnique = propInfo.isUnique;\n }\n if (propInfo.visible === true || propInfo.visible === false) {\n prop.visible = propInfo.visible;\n }\n if (!!propInfo.visibleIf) {\n prop.visibleIf = propInfo.visibleIf;\n }\n if (!!propInfo.onPropertyEditorUpdate) {\n prop.onPropertyEditorUpdate = propInfo.onPropertyEditorUpdate;\n }\n if (propInfo.readOnly === true) {\n prop.readOnly = true;\n }\n if (propInfo.choices) {\n var choicesFunc = typeof propInfo.choices === \"function\" ? propInfo.choices : null;\n var choicesValue = typeof propInfo.choices !== \"function\" ? propInfo.choices : null;\n prop.setChoices(choicesValue, choicesFunc);\n }\n if (!!propInfo.baseValue) {\n prop.setBaseValue(propInfo.baseValue);\n }\n if (propInfo.onGetValue) {\n prop.onGetValue = propInfo.onGetValue;\n }\n if (propInfo.onSetValue) {\n prop.onSetValue = propInfo.onSetValue;\n }\n if (propInfo.isLocalizable) {\n propInfo.serializationProperty = \"loc\" + prop.name;\n }\n if (propInfo.serializationProperty) {\n prop.serializationProperty = propInfo.serializationProperty;\n var s;\n if (prop.serializationProperty &&\n prop.serializationProperty.indexOf(\"loc\") == 0) {\n prop.isLocalizable = true;\n }\n }\n if (propInfo.isLocalizable) {\n prop.isLocalizable = propInfo.isLocalizable;\n }\n if (propInfo.className) {\n prop.className = propInfo.className;\n }\n if (propInfo.baseClassName) {\n prop.baseClassName = propInfo.baseClassName;\n }\n if (propInfo.classNamePart) {\n prop.classNamePart = propInfo.classNamePart;\n }\n if (propInfo.alternativeName) {\n prop.alternativeName = propInfo.alternativeName;\n }\n if (propInfo.layout) {\n prop.layout = propInfo.layout;\n }\n if (propInfo.dependsOn) {\n this.addDependsOnProperties(prop, propInfo.dependsOn);\n }\n }\n return prop;\n };\n JsonMetadataClass.prototype.addDependsOnProperties = function (prop, dependsOn) {\n if (Array.isArray(dependsOn)) {\n for (var i = 0; i < dependsOn.length; i++) {\n this.addDependsOnProperty(prop, dependsOn[i]);\n }\n }\n else {\n this.addDependsOnProperty(prop, dependsOn);\n }\n };\n JsonMetadataClass.prototype.addDependsOnProperty = function (prop, dependsOn) {\n var property = this.find(dependsOn);\n if (!property) {\n property = Serializer.findProperty(this.parentName, dependsOn);\n }\n if (!property)\n return;\n property.addDependedProperty(prop.name);\n };\n JsonMetadataClass.prototype.getIsPropertyNameRequired = function (propertyName) {\n return (propertyName.length > 0 &&\n propertyName[0] == JsonMetadataClass.requiredSymbol);\n };\n JsonMetadataClass.prototype.getPropertyName = function (propertyName) {\n if (!this.getIsPropertyNameRequired(propertyName))\n return propertyName;\n propertyName = propertyName.slice(1);\n return propertyName;\n };\n JsonMetadataClass.requiredSymbol = \"!\";\n JsonMetadataClass.typeSymbol = \":\";\n return JsonMetadataClass;\n}());\n\n/**\n * The metadata object. It contains object properties' runtime information and allows you to modify it.\n */\nvar JsonMetadata = /** @class */ (function () {\n function JsonMetadata() {\n this.classes = {};\n this.alternativeNames = {};\n this.childrenClasses = {};\n this.classProperties = {};\n this.classHashProperties = {};\n }\n JsonMetadata.prototype.getObjPropertyValue = function (obj, name) {\n if (this.isObjWrapper(obj)) {\n var orignalObj = obj.getOriginalObj();\n var prop = Serializer.findProperty(orignalObj.getType(), name);\n if (!!prop)\n return this.getObjPropertyValueCore(orignalObj, prop);\n }\n var prop = Serializer.findProperty(obj.getType(), name);\n if (!prop)\n return obj[name];\n return this.getObjPropertyValueCore(obj, prop);\n };\n JsonMetadata.prototype.setObjPropertyValue = function (obj, name, val) {\n if (obj[name] === val)\n return;\n if (!!obj[name] && !!obj[name].setJson) {\n obj[name].setJson(val);\n }\n else {\n obj[name] = val;\n }\n };\n JsonMetadata.prototype.getObjPropertyValueCore = function (obj, prop) {\n if (!prop.isSerializable)\n return obj[prop.name];\n if (prop.isLocalizable) {\n if (prop.isArray)\n return obj[prop.name];\n if (!!prop.serializationProperty)\n return obj[prop.serializationProperty].text;\n }\n return obj.getPropertyValue(prop.name);\n };\n JsonMetadata.prototype.isObjWrapper = function (obj) {\n return !!obj.getOriginalObj && !!obj.getOriginalObj();\n };\n JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) {\n if (creator === void 0) { creator = null; }\n if (parentName === void 0) { parentName = null; }\n name = name.toLowerCase();\n var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName);\n this.classes[name] = metaDataClass;\n if (parentName) {\n parentName = parentName.toLowerCase();\n var children = this.childrenClasses[parentName];\n if (!children) {\n this.childrenClasses[parentName] = [];\n }\n this.childrenClasses[parentName].push(metaDataClass);\n }\n return metaDataClass;\n };\n JsonMetadata.prototype.removeClass = function (name) {\n var metaClass = this.findClass(name);\n if (!metaClass)\n return;\n delete this.classes[metaClass.name];\n if (!!metaClass.parentName) {\n var index = this.childrenClasses[metaClass.parentName].indexOf(metaClass);\n if (index > -1) {\n this.childrenClasses[metaClass.parentName].splice(index, 1);\n }\n }\n };\n JsonMetadata.prototype.overrideClassCreatore = function (name, creator) {\n this.overrideClassCreator(name, creator);\n };\n JsonMetadata.prototype.overrideClassCreator = function (name, creator) {\n name = name.toLowerCase();\n var metaDataClass = this.findClass(name);\n if (metaDataClass) {\n metaDataClass.creator = creator;\n }\n };\n JsonMetadata.prototype.getProperties = function (className) {\n var metaClass = this.findClass(className);\n if (!metaClass)\n return [];\n var properties = this.classProperties[metaClass.name];\n if (!!properties)\n return properties;\n this.fillPropertiesForClass(metaClass.name);\n return this.classProperties[metaClass.name];\n };\n JsonMetadata.prototype.getHashProperties = function (className) {\n var metaClass = this.findClass(className);\n if (!metaClass)\n return {};\n var properties = this.classHashProperties[metaClass.name];\n if (!!properties)\n return properties;\n this.fillPropertiesForClass(metaClass.name);\n return this.classHashProperties[metaClass.name];\n };\n JsonMetadata.prototype.fillPropertiesForClass = function (className) {\n var properties = new Array();\n var hashProperties = {};\n this.fillProperties(className, properties, hashProperties);\n this.classProperties[className] = properties;\n this.classHashProperties[className] = hashProperties;\n };\n JsonMetadata.prototype.getPropertiesByObj = function (obj) {\n if (!obj || !obj.getType)\n return [];\n var res = {};\n var props = this.getProperties(obj.getType());\n for (var i = 0; i < props.length; i++) {\n res[props[i].name] = props[i];\n }\n var dynamicProps = !!obj.getDynamicType\n ? this.getProperties(obj.getDynamicType())\n : null;\n if (dynamicProps && dynamicProps.length > 0) {\n for (var i = 0; i < dynamicProps.length; i++) {\n var dProp = dynamicProps[i];\n if (!!res[dProp.name])\n continue;\n res[dProp.name] = dProp;\n }\n }\n return Object.keys(res).map(function (key) { return res[key]; });\n };\n JsonMetadata.prototype.getDynamicPropertiesByObj = function (obj, dynamicType) {\n if (dynamicType === void 0) { dynamicType = null; }\n if (!obj || !obj.getType || (!obj.getDynamicType && !dynamicType))\n return [];\n var dType = !!dynamicType ? dynamicType : obj.getDynamicType();\n if (!dType)\n return [];\n var dynamicProps = this.getProperties(dType);\n if (!dynamicProps || dynamicProps.length == 0)\n return [];\n var hash = {};\n var props = this.getProperties(obj.getType());\n for (var i = 0; i < props.length; i++) {\n hash[props[i].name] = props[i];\n }\n var res = [];\n for (var i = 0; i < dynamicProps.length; i++) {\n var dProp = dynamicProps[i];\n if (!hash[dProp.name]) {\n res.push(dProp);\n }\n }\n return res;\n };\n JsonMetadata.prototype.hasOriginalProperty = function (obj, propName) {\n return !!this.getOriginalProperty(obj, propName);\n };\n JsonMetadata.prototype.getOriginalProperty = function (obj, propName) {\n var res = this.findProperty(obj.getType(), propName);\n if (!!res)\n return res;\n if (this.isObjWrapper(obj))\n return this.findProperty(obj.getOriginalObj().getType(), propName);\n return null;\n };\n JsonMetadata.prototype.findProperty = function (className, propertyName) {\n var hash = this.getHashProperties(className);\n var res = hash[propertyName];\n return !!res ? res : null;\n };\n JsonMetadata.prototype.findProperties = function (className, propertyNames) {\n var result = [];\n var hash = this.getHashProperties(className);\n for (var i = 0; i < propertyNames.length; i++) {\n var prop = hash[propertyNames[i]];\n if (prop) {\n result.push(prop);\n }\n }\n return result;\n };\n JsonMetadata.prototype.getAllPropertiesByName = function (propertyName) {\n var res = new Array();\n var classes = this.getAllClasses();\n for (var i = 0; i < classes.length; i++) {\n var classInfo = this.findClass(classes[i]);\n for (var j = 0; j < classInfo.properties.length; j++) {\n if (classInfo.properties[j].name == propertyName) {\n res.push(classInfo.properties[j]);\n break;\n }\n }\n }\n return res;\n };\n JsonMetadata.prototype.getAllClasses = function () {\n var res = new Array();\n for (var name in this.classes) {\n res.push(name);\n }\n return res;\n };\n JsonMetadata.prototype.createClass = function (name, json) {\n if (json === void 0) { json = undefined; }\n name = name.toLowerCase();\n var metaDataClass = this.findClass(name);\n if (!metaDataClass)\n return null;\n if (metaDataClass.creator)\n return metaDataClass.creator(json);\n var parentName = metaDataClass.parentName;\n while (parentName) {\n metaDataClass = this.findClass(parentName);\n if (!metaDataClass)\n return null;\n parentName = metaDataClass.parentName;\n if (metaDataClass.creator)\n return this.createCustomType(name, metaDataClass.creator, json);\n }\n return null;\n };\n JsonMetadata.prototype.createCustomType = function (name, creator, json) {\n if (json === void 0) { json = undefined; }\n name = name.toLowerCase();\n var res = creator(json);\n var customTypeName = name;\n var customTemplateName = res.getTemplate\n ? res.getTemplate()\n : res.getType();\n res.getType = function () {\n return customTypeName;\n };\n res.getTemplate = function () {\n return customTemplateName;\n };\n CustomPropertiesCollection.createProperties(res);\n return res;\n };\n JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) {\n if (canBeCreated === void 0) { canBeCreated = false; }\n name = name.toLowerCase();\n var result = [];\n this.fillChildrenClasses(name, canBeCreated, result);\n return result;\n };\n JsonMetadata.prototype.getRequiredProperties = function (name) {\n var properties = this.getProperties(name);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].isRequired) {\n res.push(properties[i].name);\n }\n }\n return res;\n };\n JsonMetadata.prototype.addProperties = function (className, propertiesInfos) {\n className = className.toLowerCase();\n var metaDataClass = this.findClass(className);\n for (var i = 0; i < propertiesInfos.length; i++) {\n this.addCustomPropertyCore(metaDataClass, propertiesInfos[i]);\n }\n };\n JsonMetadata.prototype.addProperty = function (className, propertyInfo) {\n return this.addCustomPropertyCore(this.findClass(className), propertyInfo);\n };\n JsonMetadata.prototype.addCustomPropertyCore = function (metaDataClass, propertyInfo) {\n if (!metaDataClass)\n return null;\n var property = metaDataClass.createProperty(propertyInfo);\n if (property) {\n property.isCustom = true;\n this.addPropertyToClass(metaDataClass, property);\n this.emptyClassPropertiesHash(metaDataClass);\n CustomPropertiesCollection.addProperty(metaDataClass.name, property);\n }\n return property;\n };\n JsonMetadata.prototype.removeProperty = function (className, propertyName) {\n var metaDataClass = this.findClass(className);\n if (!metaDataClass)\n return false;\n var property = metaDataClass.find(propertyName);\n if (property) {\n this.removePropertyFromClass(metaDataClass, property);\n this.emptyClassPropertiesHash(metaDataClass);\n CustomPropertiesCollection.removeProperty(metaDataClass.name, propertyName);\n }\n };\n JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) {\n if (metaDataClass.find(property.name) != null)\n return;\n metaDataClass.properties.push(property);\n };\n JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) {\n var index = metaDataClass.properties.indexOf(property);\n if (index < 0)\n return;\n metaDataClass.properties.splice(index, 1);\n };\n JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) {\n this.classProperties[metaDataClass.name] = null;\n this.classHashProperties[metaDataClass.name] = null;\n var childClasses = this.getChildrenClasses(metaDataClass.name);\n for (var i = 0; i < childClasses.length; i++) {\n this.classProperties[childClasses[i].name] = null;\n this.classHashProperties[childClasses[i].name] = null;\n }\n };\n JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) {\n var children = this.childrenClasses[name];\n if (!children)\n return;\n for (var i = 0; i < children.length; i++) {\n if (!canBeCreated || children[i].creator) {\n result.push(children[i]);\n }\n this.fillChildrenClasses(children[i].name, canBeCreated, result);\n }\n };\n JsonMetadata.prototype.findClass = function (name) {\n name = name.toLowerCase();\n var res = this.classes[name];\n if (!res) {\n var newName = this.alternativeNames[name];\n if (!!newName && newName != name)\n return this.findClass(newName);\n }\n return res;\n };\n JsonMetadata.prototype.isDescendantOf = function (className, ancestorClassName) {\n if (!className || !ancestorClassName) {\n return false;\n }\n className = className.toLowerCase();\n ancestorClassName = ancestorClassName.toLowerCase();\n var class_ = this.findClass(className);\n if (!class_) {\n return false;\n }\n var parentClass = class_;\n do {\n if (parentClass.name === ancestorClassName) {\n return true;\n }\n parentClass = this.classes[parentClass.parentName];\n } while (!!parentClass);\n return false;\n };\n JsonMetadata.prototype.addAlterNativeClassName = function (name, alternativeName) {\n this.alternativeNames[alternativeName.toLowerCase()] = name.toLowerCase();\n };\n JsonMetadata.prototype.generateSchema = function (className) {\n if (className === void 0) { className = undefined; }\n if (!className)\n className = \"survey\";\n var classInfo = this.findClass(className);\n if (!classInfo)\n return null;\n var res = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n title: \"SurveyJS Library json schema\",\n type: \"object\",\n properties: {},\n definitions: {},\n };\n this.generateSchemaProperties(classInfo, res.properties, res.definitions);\n return res;\n };\n JsonMetadata.prototype.generateSchemaProperties = function (classInfo, schemaProperties, schemaDef) {\n if (!classInfo)\n return;\n for (var i = 0; i < classInfo.properties.length; i++) {\n var prop = classInfo.properties[i];\n schemaProperties[prop.name] = this.generateSchemaProperty(prop, schemaDef);\n }\n };\n JsonMetadata.prototype.generateSchemaProperty = function (prop, schemaDef) {\n var res = { type: prop.schemaType() };\n if (prop.hasChoices) {\n res.enum = prop.getChoices(null);\n }\n if (!!prop.className) {\n res.items = { $ref: \"#\" + prop.className };\n this.generateChemaClass(prop.className, schemaDef);\n }\n if (!!prop.baseClassName) {\n var usedClasses = this.getChildrenClasses(prop.baseClassName, true);\n if (prop.baseClassName == \"question\") {\n usedClasses.push(this.findClass(\"panel\"));\n }\n res.items = [];\n for (var i = 0; i < usedClasses.length; i++) {\n var className = usedClasses[i].name;\n res.items.push({ $ref: \"#\" + className });\n this.generateChemaClass(className, schemaDef);\n }\n }\n return res;\n };\n JsonMetadata.prototype.generateChemaClass = function (className, schemaDef) {\n if (!!schemaDef[className])\n return;\n var classInfo = this.findClass(className);\n if (!classInfo)\n return;\n var hasParent = !!classInfo.parentName && classInfo.parentName != \"base\";\n if (hasParent) {\n this.generateChemaClass(classInfo.parentName, schemaDef);\n }\n var res = { type: \"object\", $id: \"#\" + className };\n schemaDef[className] = res;\n var props = {};\n this.generateSchemaProperties(classInfo, props, schemaDef);\n if (hasParent) {\n res.allOff = [\n { $ref: \"#\" + classInfo.parentName },\n { properties: props },\n ];\n }\n else {\n res.properties = props;\n }\n };\n JsonMetadata.prototype.fillProperties = function (name, list, hash) {\n var metaDataClass = this.findClass(name);\n if (!metaDataClass)\n return;\n if (metaDataClass.parentName) {\n this.fillProperties(metaDataClass.parentName, list, hash);\n }\n for (var i = 0; i < metaDataClass.properties.length; i++) {\n var prop = metaDataClass.properties[i];\n this.addPropertyCore(prop, list, hash);\n hash[prop.name] = prop;\n }\n };\n JsonMetadata.prototype.addPropertyCore = function (property, list, hash) {\n if (!hash[property.name]) {\n list.push(property);\n return;\n }\n var index = -1;\n for (var i = 0; i < list.length; i++) {\n if (list[i].name == property.name) {\n index = i;\n break;\n }\n }\n property.mergeWith(list[index]);\n list[index] = property;\n };\n return JsonMetadata;\n}());\n\nvar JsonError = /** @class */ (function () {\n function JsonError(type, message) {\n this.type = type;\n this.message = message;\n this.description = \"\";\n this.at = -1;\n }\n JsonError.prototype.getFullDescription = function () {\n return this.message + (this.description ? \"\\n\" + this.description : \"\");\n };\n return JsonError;\n}());\n\nvar JsonUnknownPropertyError = /** @class */ (function (_super) {\n __extends(JsonUnknownPropertyError, _super);\n function JsonUnknownPropertyError(propertyName, className) {\n var _this = _super.call(this, \"unknownproperty\", \"The property '\" +\n propertyName +\n \"' in class '\" +\n className +\n \"' is unknown.\") || this;\n _this.propertyName = propertyName;\n _this.className = className;\n var properties = JsonObject.metaData.getProperties(className);\n if (properties) {\n _this.description = \"The list of available properties are: \";\n for (var i = 0; i < properties.length; i++) {\n if (i > 0)\n _this.description += \", \";\n _this.description += properties[i].name;\n }\n _this.description += \".\";\n }\n return _this;\n }\n return JsonUnknownPropertyError;\n}(JsonError));\n\nvar JsonMissingTypeErrorBase = /** @class */ (function (_super) {\n __extends(JsonMissingTypeErrorBase, _super);\n function JsonMissingTypeErrorBase(baseClassName, type, message) {\n var _this = _super.call(this, type, message) || this;\n _this.baseClassName = baseClassName;\n _this.type = type;\n _this.message = message;\n _this.description = \"The following types are available: \";\n var types = JsonObject.metaData.getChildrenClasses(baseClassName, true);\n for (var i = 0; i < types.length; i++) {\n if (i > 0)\n _this.description += \", \";\n _this.description += \"'\" + types[i].name + \"'\";\n }\n _this.description += \".\";\n return _this;\n }\n return JsonMissingTypeErrorBase;\n}(JsonError));\n\nvar JsonMissingTypeError = /** @class */ (function (_super) {\n __extends(JsonMissingTypeError, _super);\n function JsonMissingTypeError(propertyName, baseClassName) {\n var _this = _super.call(this, baseClassName, \"missingtypeproperty\", \"The property type is missing in the object. Please take a look at property: '\" +\n propertyName +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.baseClassName = baseClassName;\n return _this;\n }\n return JsonMissingTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonIncorrectTypeError = /** @class */ (function (_super) {\n __extends(JsonIncorrectTypeError, _super);\n function JsonIncorrectTypeError(propertyName, baseClassName) {\n var _this = _super.call(this, baseClassName, \"incorrecttypeproperty\", \"The property type is incorrect in the object. Please take a look at property: '\" +\n propertyName +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.baseClassName = baseClassName;\n return _this;\n }\n return JsonIncorrectTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonRequiredPropertyError = /** @class */ (function (_super) {\n __extends(JsonRequiredPropertyError, _super);\n function JsonRequiredPropertyError(propertyName, className) {\n var _this = _super.call(this, \"requiredproperty\", \"The property '\" +\n propertyName +\n \"' is required in class '\" +\n className +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.className = className;\n return _this;\n }\n return JsonRequiredPropertyError;\n}(JsonError));\n\nvar JsonObject = /** @class */ (function () {\n function JsonObject() {\n this.errors = new Array();\n this.lightSerializing = false;\n }\n Object.defineProperty(JsonObject, \"metaData\", {\n get: function () {\n return JsonObject.metaDataValue;\n },\n enumerable: false,\n configurable: true\n });\n JsonObject.prototype.toJsonObject = function (obj, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n return this.toJsonObjectCore(obj, null, storeDefaults);\n };\n JsonObject.prototype.toObject = function (jsonObj, obj) {\n this.toObjectCore(jsonObj, obj);\n var error = this.getRequiredError(obj, jsonObj);\n if (!!error) {\n this.addNewError(error, jsonObj);\n }\n };\n JsonObject.prototype.toObjectCore = function (jsonObj, obj) {\n if (!jsonObj)\n return;\n var properties = null;\n var objType = undefined;\n var needAddErrors = true;\n if (obj.getType) {\n objType = obj.getType();\n properties = JsonObject.metaData.getProperties(objType);\n needAddErrors =\n !!objType && !JsonObject.metaData.isDescendantOf(objType, \"itemvalue\");\n }\n if (!properties)\n return;\n if (obj.startLoadingFromJson) {\n obj.startLoadingFromJson();\n }\n properties = this.addDynamicProperties(obj, jsonObj, properties);\n for (var key in jsonObj) {\n if (key === JsonObject.typePropertyName)\n continue;\n if (key === JsonObject.positionPropertyName) {\n obj[key] = jsonObj[key];\n continue;\n }\n var property = this.findProperty(properties, key);\n if (!property) {\n if (needAddErrors) {\n this.addNewError(new JsonUnknownPropertyError(key.toString(), objType), jsonObj);\n }\n continue;\n }\n this.valueToObj(jsonObj[key], obj, property);\n }\n if (obj.endLoadingFromJson) {\n obj.endLoadingFromJson();\n }\n };\n JsonObject.prototype.toJsonObjectCore = function (obj, property, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n if (!obj || !obj.getType)\n return obj;\n if (typeof obj.getData === \"function\")\n return obj.getData();\n var result = {};\n if (property != null && !property.className) {\n result[JsonObject.typePropertyName] = property.getObjType(obj.getType());\n }\n this.propertiesToJson(obj, JsonObject.metaData.getProperties(obj.getType()), result, storeDefaults);\n this.propertiesToJson(obj, this.getDynamicProperties(obj), result, storeDefaults);\n return result;\n };\n JsonObject.prototype.getDynamicProperties = function (obj) {\n return Serializer.getDynamicPropertiesByObj(obj);\n };\n JsonObject.prototype.addDynamicProperties = function (obj, jsonObj, properties) {\n if (!obj.getDynamicPropertyName)\n return properties;\n var dynamicPropName = obj.getDynamicPropertyName();\n if (!dynamicPropName)\n return properties;\n if (jsonObj[dynamicPropName]) {\n obj[dynamicPropName] = jsonObj[dynamicPropName];\n }\n var dynamicProperties = this.getDynamicProperties(obj);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n res.push(properties[i]);\n }\n for (var i = 0; i < dynamicProperties.length; i++) {\n res.push(dynamicProperties[i]);\n }\n return res;\n };\n JsonObject.prototype.propertiesToJson = function (obj, properties, json, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n for (var i = 0; i < properties.length; i++) {\n this.valueToJson(obj, json, properties[i], storeDefaults);\n }\n };\n JsonObject.prototype.valueToJson = function (obj, result, property, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n if (property.isSerializable === false ||\n (property.isLightSerializable === false && this.lightSerializing))\n return;\n var value = property.getValue(obj);\n if (!storeDefaults && property.isDefaultValue(value))\n return;\n if (this.isValueArray(value)) {\n var arrValue = [];\n for (var i = 0; i < value.length; i++) {\n arrValue.push(this.toJsonObjectCore(value[i], property, storeDefaults));\n }\n value = arrValue.length > 0 ? arrValue : null;\n }\n else {\n value = this.toJsonObjectCore(value, property, storeDefaults);\n }\n var hasValue = typeof obj[\"getPropertyValue\"] === \"function\" &&\n obj[\"getPropertyValue\"](property.name, null) !== null;\n if ((storeDefaults && hasValue) || !property.isDefaultValue(value)) {\n result[property.name] = value;\n }\n };\n JsonObject.prototype.valueToObj = function (value, obj, property) {\n if (value == null)\n return;\n this.removePos(property, value);\n if (property != null && property.hasToUseSetValue) {\n property.setValue(obj, value, this);\n return;\n }\n if (this.isValueArray(value)) {\n this.valueToArray(value, obj, property.name, property);\n return;\n }\n var newObj = this.createNewObj(value, property);\n if (newObj.newObj) {\n this.toObjectCore(value, newObj.newObj);\n value = newObj.newObj;\n }\n if (!newObj.error) {\n if (property != null) {\n property.setValue(obj, value, this);\n }\n else {\n obj[property.name] = value;\n }\n }\n };\n JsonObject.prototype.removePos = function (property, value) {\n if (!property || !property.type || property.type.indexOf(\"value\") < 0)\n return;\n this.removePosFromObj(value);\n };\n JsonObject.prototype.removePosFromObj = function (obj) {\n if (!obj)\n return;\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n this.removePosFromObj(obj[i]);\n }\n }\n if (!!obj[JsonObject.positionPropertyName]) {\n delete obj[JsonObject.positionPropertyName];\n }\n };\n JsonObject.prototype.isValueArray = function (value) {\n return value && Array.isArray(value);\n };\n JsonObject.prototype.createNewObj = function (value, property) {\n var result = { newObj: null, error: null };\n var className = value[JsonObject.typePropertyName];\n if (!className && property != null && property.className) {\n className = property.className;\n }\n className = property.getClassName(className);\n result.newObj = className\n ? JsonObject.metaData.createClass(className, value)\n : null;\n result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className);\n return result;\n };\n JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) {\n var error = null;\n if (newObj) {\n error = this.getRequiredError(newObj, value);\n }\n else {\n if (property.baseClassName) {\n if (!className) {\n error = new JsonMissingTypeError(property.name, property.baseClassName);\n }\n else {\n error = new JsonIncorrectTypeError(property.name, property.baseClassName);\n }\n }\n }\n if (error) {\n this.addNewError(error, value);\n }\n return error;\n };\n JsonObject.prototype.getRequiredError = function (obj, jsonValue) {\n if (!obj.getType || typeof obj.getData === \"function\")\n return null;\n var className = obj.getType();\n var requiredProperties = JsonObject.metaData.getRequiredProperties(className);\n if (!requiredProperties)\n return null;\n for (var i = 0; i < requiredProperties.length; i++) {\n if (!jsonValue[requiredProperties[i]]) {\n return new JsonRequiredPropertyError(requiredProperties[i], className);\n }\n }\n return null;\n };\n JsonObject.prototype.addNewError = function (error, jsonObj) {\n if (jsonObj && jsonObj[JsonObject.positionPropertyName]) {\n error.at = jsonObj[JsonObject.positionPropertyName].start;\n }\n this.errors.push(error);\n };\n JsonObject.prototype.valueToArray = function (value, obj, key, property) {\n if (obj[key] && value.length > 0)\n obj[key].splice(0, obj[key].length);\n var valueRes = obj[key] ? obj[key] : [];\n this.addValuesIntoArray(value, valueRes, property);\n if (!obj[key])\n obj[key] = valueRes;\n };\n JsonObject.prototype.addValuesIntoArray = function (value, result, property) {\n for (var i = 0; i < value.length; i++) {\n var newValue = this.createNewObj(value[i], property);\n if (newValue.newObj) {\n if (!!value[i].name) {\n newValue.newObj.name = value[i].name;\n }\n result.push(newValue.newObj);\n this.toObjectCore(value[i], newValue.newObj);\n }\n else {\n if (!newValue.error) {\n result.push(value[i]);\n }\n }\n }\n };\n JsonObject.prototype.findProperty = function (properties, key) {\n if (!properties)\n return null;\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n if (prop.name == key || prop.alternativeName == key)\n return prop;\n }\n return null;\n };\n JsonObject.typePropertyName = \"type\";\n JsonObject.positionPropertyName = \"pos\";\n JsonObject.metaDataValue = new JsonMetadata();\n return JsonObject;\n}());\n\n/**\n * An alias for the metadata object. It contains object properties' runtime information and allows you to modify it.\n * @see JsonMetadata\n */\nvar Serializer = JsonObject.metaData;\n\n\n/***/ }),\n\n/***/ \"./src/list.ts\":\n/*!*********************!*\\\n !*** ./src/list.ts ***!\n \\*********************/\n/*! exports provided: ListModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return ListModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\nvar ListModel = /** @class */ (function (_super) {\n __extends(ListModel, _super);\n function ListModel(items, onItemSelect, allowSelection, selectedItem) {\n var _this = _super.call(this) || this;\n _this.onItemSelect = onItemSelect;\n _this.allowSelection = allowSelection;\n _this.selectItem = function (itemValue) {\n _this.isExpanded = false;\n if (_this.allowSelection) {\n _this.selectedItem = itemValue;\n }\n if (!!_this.onItemSelect) {\n _this.onItemSelect(itemValue);\n }\n };\n _this.isItemDisabled = function (itemValue) {\n return itemValue.enabled !== undefined && !itemValue.enabled;\n };\n _this.isItemSelected = function (itemValue) {\n return _this.allowSelection && _this.selectedItem == itemValue;\n };\n _this.getItemClass = function (itemValue) {\n var className = \"sv-list__item\";\n if (_this.isItemDisabled(itemValue)) {\n className += \" sv-list__item--disabled\";\n }\n if (_this.isItemSelected(itemValue)) {\n className += \" sv-list__item--selected\";\n }\n return className;\n };\n _this.getItemIndent = function (itemValue) {\n var level = itemValue.level || 0;\n return (level + 1) * ListModel.INDENT + \"px\";\n };\n _this.createNewArray(\"items\");\n _this.items = items;\n _this.selectedItem = selectedItem;\n return _this;\n }\n Object.defineProperty(ListModel.prototype, \"items\", {\n get: function () {\n return this.getPropertyValue(\"items\");\n },\n set: function (value) {\n var _a;\n (_a = this.items).splice.apply(_a, __spreadArray([0, this.items.length], (value || [])));\n },\n enumerable: false,\n configurable: true\n });\n ListModel.INDENT = 16;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], ListModel.prototype, \"isExpanded\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ListModel.prototype, \"selectedItem\", void 0);\n return ListModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/localizablestring.ts\":\n/*!**********************************!*\\\n !*** ./src/localizablestring.ts ***!\n \\**********************************/\n/*! exports provided: LocalizableString, LocalizableStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return LocalizableString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return LocalizableStrings; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n\n\n\n/**\n * The class represents the string that supports multi-languages and markdown.\n * It uses in all objects where support for multi-languages and markdown is required.\n */\nvar LocalizableString = /** @class */ (function () {\n function LocalizableString(owner, useMarkdown, name) {\n if (useMarkdown === void 0) { useMarkdown = false; }\n this.owner = owner;\n this.useMarkdown = useMarkdown;\n this.name = name;\n this.values = {};\n this.htmlValues = {};\n this.onCreating();\n }\n Object.defineProperty(LocalizableString, \"defaultLocale\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"locale\", {\n get: function () {\n return this.owner && this.owner.getLocale ? this.owner.getLocale() : \"\";\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.strChanged = function () {\n this.searchableText = undefined;\n if (this.renderedText === undefined)\n return;\n this.calculatedTextValue = this.calText();\n if (this.renderedText !== this.calculatedTextValue) {\n this.renderedText = undefined;\n this.calculatedTextValue = undefined;\n }\n this.onChanged();\n };\n Object.defineProperty(LocalizableString.prototype, \"text\", {\n get: function () {\n return this.pureText;\n },\n set: function (value) {\n this.setLocaleText(this.locale, value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"calculatedText\", {\n get: function () {\n this.renderedText =\n this.calculatedTextValue !== undefined\n ? this.calculatedTextValue\n : this.calText();\n this.calculatedTextValue = undefined;\n return this.renderedText;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.calText = function () {\n var res = this.pureText;\n if (res &&\n this.owner &&\n this.owner.getProcessedText &&\n res.indexOf(\"{\") > -1) {\n res = this.owner.getProcessedText(res);\n }\n if (this.onGetTextCallback)\n res = this.onGetTextCallback(res);\n return res;\n };\n Object.defineProperty(LocalizableString.prototype, \"pureText\", {\n get: function () {\n var loc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var res = this.getValue(loc);\n if (!res && loc == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n res = this.getValue(_surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].defaultLocale);\n }\n if (!res && loc !== _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n res = this.getValue(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName);\n }\n if (!res)\n res = \"\";\n return res;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"hasHtml\", {\n get: function () {\n return this.hasHtmlValue();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"html\", {\n get: function () {\n if (!this.hasHtml)\n return \"\";\n return this.getHtmlValue();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"isEmpty\", {\n get: function () {\n return this.getValuesKeys().length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"textOrHtml\", {\n get: function () {\n return this.hasHtml ? this.getHtmlValue() : this.calculatedText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"renderedHtml\", {\n get: function () {\n return this.textOrHtml;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.getLocaleText = function (loc) {\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var res = this.getValue(loc);\n return res ? res : \"\";\n };\n LocalizableString.prototype.setLocaleText = function (loc, value) {\n if (value == this.getLocaleText(loc))\n return;\n if (value &&\n loc &&\n loc != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !this.getValue(loc) &&\n value == this.getLocaleText(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName))\n return;\n var curLoc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n if (!curLoc)\n curLoc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var hasOnStrChanged = this.onStrChanged && loc === curLoc;\n var oldValue = hasOnStrChanged ? this.pureText : undefined;\n delete this.htmlValues[loc];\n if (!value) {\n if (this.getValue(loc))\n this.deleteValue(loc);\n }\n else {\n if (typeof value === \"string\") {\n if (loc != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n value == this.getLocaleText(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName)) {\n this.setLocaleText(loc, null);\n }\n else {\n this.setValue(loc, value);\n if (loc == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n this.deleteValuesEqualsToDefault(value);\n }\n }\n }\n }\n this.strChanged();\n if (hasOnStrChanged) {\n this.onStrChanged(oldValue, value);\n }\n };\n LocalizableString.prototype.hasNonDefaultText = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return false;\n return keys.length > 1 || keys[0] != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n };\n LocalizableString.prototype.getLocales = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return [];\n return keys;\n };\n LocalizableString.prototype.getJson = function () {\n if (!!this.sharedData)\n return this.sharedData.getJson();\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return null;\n if (keys.length == 1 &&\n keys[0] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].serializeLocalizableStringAsObject)\n return this.values[keys[0]];\n return this.values;\n };\n LocalizableString.prototype.setJson = function (value) {\n if (!!this.sharedData) {\n this.sharedData.setJson(value);\n return;\n }\n this.values = {};\n this.htmlValues = {};\n if (!value)\n return;\n if (typeof value === \"string\") {\n this.setLocaleText(null, value);\n }\n else {\n for (var key in value) {\n this.setLocaleText(key, value[key]);\n }\n }\n this.strChanged();\n };\n Object.defineProperty(LocalizableString.prototype, \"renderAs\", {\n get: function () {\n if (!this.owner) {\n return LocalizableString.defaultRenderer;\n }\n if (typeof this.owner.getRenderer !== \"function\") {\n return LocalizableString.defaultRenderer;\n }\n return (this.owner.getRenderer(this.name) || LocalizableString.defaultRenderer);\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.equals = function (obj) {\n if (!!this.sharedData)\n return this.sharedData.equals(obj);\n if (!obj || !obj.values)\n return false;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(this.values, obj.values);\n };\n LocalizableString.prototype.setFindText = function (text) {\n if (this.searchText == text)\n return;\n this.searchText = text;\n if (!this.searchableText) {\n var textOrHtml = this.textOrHtml;\n this.searchableText = !!textOrHtml ? textOrHtml.toLowerCase() : \"\";\n }\n var str = this.searchableText;\n var index = !!str && !!text ? str.indexOf(text) : undefined;\n if (index < 0)\n index = undefined;\n if (index != undefined || this.searchIndex != index) {\n this.searchIndex = index;\n if (!!this.onSearchChanged) {\n this.onSearchChanged();\n }\n }\n return this.searchIndex != undefined;\n };\n LocalizableString.prototype.onChanged = function () { };\n LocalizableString.prototype.onCreating = function () { };\n LocalizableString.prototype.hasHtmlValue = function () {\n if (!this.owner || !this.useMarkdown)\n return false;\n var renderedText = this.calculatedText;\n if (!renderedText)\n return false;\n var loc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n this.htmlValues[loc] = this.owner.getMarkdownHtml(renderedText, this.name);\n return this.htmlValues[loc] ? true : false;\n };\n LocalizableString.prototype.getHtmlValue = function () {\n var loc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n return this.htmlValues[loc];\n };\n LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) {\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName)\n continue;\n if (this.getValue(keys[i]) == defaultValue) {\n this.deleteValue(keys[i]);\n }\n }\n };\n LocalizableString.prototype.getValue = function (loc) {\n if (!!this.sharedData)\n return this.sharedData.getValue(loc);\n return this.values[loc];\n };\n LocalizableString.prototype.setValue = function (loc, value) {\n if (!!this.sharedData)\n this.sharedData.setValue(loc, value);\n else\n this.values[loc] = value;\n };\n LocalizableString.prototype.deleteValue = function (loc) {\n if (!!this.sharedData)\n this.sharedData.deleteValue(loc);\n else\n delete this.values[loc];\n };\n LocalizableString.prototype.getValuesKeys = function () {\n if (!!this.sharedData)\n return this.sharedData.getValuesKeys();\n return Object.keys(this.values);\n };\n LocalizableString.SerializeAsObject = false;\n LocalizableString.defaultRenderer = \"sv-string-viewer\";\n LocalizableString.editableRenderer = \"sv-string-editor\";\n return LocalizableString;\n}());\n\n/**\n * The class represents the list of strings that supports multi-languages.\n */\nvar LocalizableStrings = /** @class */ (function () {\n function LocalizableStrings(owner) {\n this.owner = owner;\n this.values = {};\n }\n Object.defineProperty(LocalizableStrings.prototype, \"locale\", {\n get: function () {\n return this.owner && this.owner.getLocale ? this.owner.getLocale() : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableStrings.prototype, \"value\", {\n get: function () {\n return this.getValue(\"\");\n },\n set: function (val) {\n this.setValue(\"\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableStrings.prototype, \"text\", {\n get: function () {\n return Array.isArray(this.value) ? this.value.join(\"\\n\") : \"\";\n },\n set: function (val) {\n this.value = !!val ? val.split(\"\\n\") : [];\n },\n enumerable: false,\n configurable: true\n });\n LocalizableStrings.prototype.getLocaleText = function (loc) {\n var res = this.getValueCore(loc, !loc || loc === this.locale);\n if (!res || !Array.isArray(res) || res.length == 0)\n return \"\";\n return res.join(\"\\n\");\n };\n LocalizableStrings.prototype.setLocaleText = function (loc, newValue) {\n var val = !!newValue ? newValue.split(\"\\n\") : null;\n this.setValue(loc, val);\n };\n LocalizableStrings.prototype.getValue = function (loc) {\n return this.getValueCore(loc);\n };\n LocalizableStrings.prototype.getValueCore = function (loc, useDefault) {\n if (useDefault === void 0) { useDefault = true; }\n loc = this.getLocale(loc);\n if (this.values[loc])\n return this.values[loc];\n if (useDefault) {\n var defLoc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n if (loc !== defLoc)\n return this.values[defLoc];\n }\n return [];\n };\n LocalizableStrings.prototype.setValue = function (loc, val) {\n loc = this.getLocale(loc);\n if (!val || val.length == 0) {\n delete this.values[loc];\n }\n else {\n this.values[loc] = val;\n }\n };\n Object.defineProperty(LocalizableStrings.prototype, \"isEmpty\", {\n get: function () {\n return this.getValuesKeys().length == 0;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableStrings.prototype.getLocale = function (loc) {\n if (!!loc)\n return loc;\n loc = this.locale;\n return !!loc ? loc : _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n };\n LocalizableStrings.prototype.getLocales = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return [];\n return keys;\n };\n LocalizableStrings.prototype.getJson = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return null;\n if (keys.length == 1 &&\n keys[0] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].serializeLocalizableStringAsObject)\n return this.values[keys[0]];\n return this.values;\n };\n LocalizableStrings.prototype.setJson = function (value) {\n this.values = {};\n if (!value)\n return;\n if (Array.isArray(value)) {\n this.setValue(null, value);\n }\n else {\n for (var key in value) {\n this.setValue(key, value[key]);\n }\n }\n };\n LocalizableStrings.prototype.getValuesKeys = function () {\n return Object.keys(this.values);\n };\n return LocalizableStrings;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/localization/arabic.ts\":\n/*!************************************!*\\\n !*** ./src/localization/arabic.ts ***!\n \\************************************/\n/*! exports provided: arabicSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"arabicSurveyStrings\", function() { return arabicSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar arabicSurveyStrings = {\n pagePrevText: \"السابق\",\n pageNextText: \"التالي\",\n completeText: \"إرسال البيانات\",\n previewText: \"معاينة\",\n editText: \"تعديل\",\n startSurveyText: \"بداية\",\n otherItemText: \"نص آخر\",\n noneItemText: \"لا شيء\",\n selectAllItemText: \"اختر الكل\",\n progressText: \"{1} صفحة {0} من\",\n panelDynamicProgressText: \"سجل {0} من {1}\",\n questionsProgressText: \"تمت الإجابة على أسئلة {0} / {1}\",\n emptySurvey: \"لا توجد صفحة مرئية أو سؤال في النموذج\",\n completingSurvey: \"شكرا لكم لاستكمال النموذج!\",\n completingSurveyBefore: \"تظهر سجلاتنا أنك قد أكملت هذا الاستطلاع بالفعل.\",\n loadingSurvey: \"...يتم تحميل النموذج\",\n optionsCaption: \"...اختر\",\n value: \"القيمة\",\n requiredError: \".يرجى الإجابة على السؤال\",\n requiredErrorInPanel: \"الرجاء الإجابة على سؤال واحد على الأقل.\",\n requiredInAllRowsError: \"يرجى الإجابة على الأسئلة في جميع الصفوف\",\n numericError: \"يجب أن تكون القيمة رقمية.\",\n textMinLength: \"الرجاء إدخال ما لا يقل عن {0} حروف\",\n textMaxLength: \"الرجاء إدخال أقل من {0} حروف\",\n textMinMaxLength: \"يرجى إدخال أكثر من {0} وأقل من {1} حروف\",\n minRowCountError: \"يرجى ملء ما لا يقل عن {0} الصفوف\",\n minSelectError: \"يرجى تحديد ما لا يقل عن {0} المتغيرات\",\n maxSelectError: \"يرجى تحديد ما لا يزيد عن {0} المتغيرات\",\n numericMinMax: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1} وتساوي أو أقل من {2}ا\",\n numericMin: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1}ا\",\n numericMax: \"و'{0}' يجب أن تكون مساوية أو أقل من {1}ا\",\n invalidEmail: \"الرجاء إدخال بريد الكتروني صحيح\",\n invalidExpression: \"يجب أن يعرض التعبير: {0} 'صواب'.\",\n urlRequestError: \"طلب إرجاع خطأ '{0}'. {1}ا\",\n urlGetChoicesError: \"عاد طلب البيانات فارغ أو 'المسار' غير صحيح \",\n exceedMaxSize: \"ينبغي ألا يتجاوز حجم الملف {0}ا\",\n otherRequiredError: \"الرجاء إدخال قيمة أخرى\",\n uploadingFile: \"تحميل الملف الخاص بك. يرجى الانتظار عدة ثوان والمحاولة لاحقًا\",\n loadingFile: \"جار التحميل...\",\n chooseFile: \"اختر الملفات...\",\n noFileChosen: \"لم تقم باختيار ملف\",\n confirmDelete: \"هل تريد حذف السجل؟\",\n keyDuplicationError: \"يجب أن تكون هذه القيمة فريدة.\",\n addColumn: \"أضف العمود\",\n addRow: \"اضافة صف\",\n removeRow: \"إزالة صف\",\n addPanel: \"اضف جديد\",\n removePanel: \"إزالة\",\n choices_Item: \"بند\",\n matrix_column: \"عمود\",\n matrix_row: \"صف\",\n savingData: \"يتم حفظ النتائج على الخادم ...\",\n savingDataError: \"حدث خطأ ولم نتمكن من حفظ النتائج.\",\n savingDataSuccess: \"تم حفظ النتائج بنجاح!\",\n saveAgainButton: \"حاول مجددا\",\n timerMin: \"دقيقة\",\n timerSec: \"ثانية\",\n timerSpentAll: \"لقد أنفقت {0} على هذه الصفحة و {1} إجمالاً.\",\n timerSpentPage: \"لقد أنفقت {0} على هذه الصفحة.\",\n timerSpentSurvey: \"لقد أنفقت {0} إجمالاً.\",\n timerLimitAll: \"لقد أنفقت {0} من {1} في هذه الصفحة و {2} من إجمالي {3}.\",\n timerLimitPage: \"لقد أنفقت {0} من {1} في هذه الصفحة.\",\n timerLimitSurvey: \"لقد أنفقت {0} من إجمالي {1}.\",\n cleanCaption: \"نظيف\",\n clearCaption: \"واضح\",\n chooseFileCaption: \"اختر ملف\",\n removeFileCaption: \"قم بإزالة هذا الملف\",\n booleanCheckedLabel: \"نعم\",\n booleanUncheckedLabel: \"لا\",\n confirmRemoveFile: \"هل أنت متأكد أنك تريد إزالة هذا الملف: {0}؟\",\n confirmRemoveAllFiles: \"هل أنت متأكد أنك تريد إزالة كافة الملفات؟\",\n questionTitlePatternText: \"عنوان السؤال\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ar\"] = arabicSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ar\"] = \"العربية\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/basque.ts\":\n/*!************************************!*\\\n !*** ./src/localization/basque.ts ***!\n \\************************************/\n/*! exports provided: basqueSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"basqueSurveyStrings\", function() { return basqueSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar basqueSurveyStrings = {\n pagePrevText: \"Aurrekoa\",\n pageNextText: \"Hurrengoa\",\n completeText: \"Bukatu\",\n previewText: \"Aurrebista\",\n editText: \"Editatu\",\n startSurveyText: \"Hasi\",\n otherItemText: \"Beste bat (zehaztu)\",\n noneItemText: \"Bat ere ez\",\n selectAllItemText: \"Guztia hautatu\",\n progressText: \"{1}-(e)tik {0} orrialde\",\n panelDynamicProgressText: \"{0} errigistro {1}-(e)tik\",\n questionsProgressText: \"Erantzundako galderak {0}/{1}\",\n emptySurvey: \"Ez dago orrialde bistaragarririk edo ez dago galderarik.\",\n completingSurvey: \"Eskerrik asko galdetegia erantzuteagatik!\",\n completingSurveyBefore: \"Gure datuek diote dagoeneko galdetegia erantzun duzula.\",\n loadingSurvey: \"Galdetegia kargatzen...\",\n optionsCaption: \"Hautatu...\",\n value: \"balioa\",\n requiredError: \"Mesedez, galdera erantzun.\",\n requiredErrorInPanel: \"Mesedez, gutxienez galdera bat erantzun.\",\n requiredInAllRowsError: \"Mesedez, errenkadako galdera guztiak erantzun.\",\n numericError: \"Estimazioa zenbakizkoa izan behar du.\",\n minError: \"Balioa ez da {0} baino txikiagoa izan behar\",\n maxError: \"Balioa ez da {0} baino handiagoa izan behar\",\n textMinLength: \"Mesedez, gutxienez {0} karaktere erabili behar dira.\",\n textMaxLength: \"Mesedez, gehienez {0} karaktere erabili behar dira.\",\n textMinMaxLength: \"Mesedez, gehienez {0} eta gutxienez {1} karaktere erabili behar dira.\",\n minRowCountError: \"Mesedez, gutxienez {0} errenkada bete.\",\n minSelectError: \"Mesedez, gutxienez {0} aukera hautatu.\",\n maxSelectError: \"Mesedez, {0} aukera baino gehiago ez hautatu.\",\n numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n numericMin: \"'{0}' {1} baino handiagoa edo berdin izan behar da\",\n numericMax: \"'{0}' {1} baino txikiago edo berdin izan behar da\",\n invalidEmail: \"Mesedez, baliozko emaila idatz ezazu.\",\n invalidExpression: \"{0} adierazpenak 'egiazkoa' itzuli beharko luke.\",\n urlRequestError: \"Eskaerak '{0}' errorea itzuli du. {1}\",\n urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n exceedMaxSize: \"Fitxategiaren tamaina ez da {0} baino handiagoa izan behar.\",\n otherRequiredError: \"Mesedez, beste estimazioa gehitu.\",\n uploadingFile: \"Zure fitxategia igotzen ari da. Mesedez, segundo batzuk itxaron eta saiatu berriro.\",\n loadingFile: \"Kargatzen...\",\n chooseFile: \"Fitxategia(k) hautatu...\",\n noFileChosen: \"Ez da inolako fitxategirik hautatu\",\n confirmDelete: \"¿Erregistroa borratu nahi al duzu?\",\n keyDuplicationError: \"Balio hau bakarra izan behar du.\",\n addColumn: \"Zutabe bat gehitu\",\n addRow: \"Errenkada bat gehitu\",\n removeRow: \"Errenkada bat kendu\",\n emptyRowsText: \"Ez dago errenkadarik.\",\n addPanel: \"Berria gehitu\",\n removePanel: \"Kendu\",\n choices_Item: \"artikulua\",\n matrix_column: \"Zutabea\",\n matrix_row: \"Errenkada\",\n multipletext_itemname: \"testua\",\n savingData: \"Erantzunak zerbitzarian gordetzen ari dira...\",\n savingDataError: \"Erroreren bat gertatu eta erantzunak ez dira zerbitzarian gorde ahal izan.\",\n savingDataSuccess: \"Erantzunak egoki gorde dira!\",\n saveAgainButton: \"Berriro saiatu.\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"{0} erabili duzu orrialde honetan eta orotara {1}.\",\n timerSpentPage: \"Zuk {0} erabili duzu.\",\n timerSpentSurvey: \"Orotara gastatu duzu.\",\n timerLimitAll: \"{0} gastatu duzu {1}-(e)tik orrialde honetan eta orotara {2} {3}-(e)tik.\",\n timerLimitPage: \"{0} gastatu duzu orrialde honetan {1}-(e)tik.\",\n timerLimitSurvey: \"Zuk orotara {0} gastatu duzu {1}-(e)tik.\",\n cleanCaption: \"Garbitu\",\n clearCaption: \"Hustu\",\n signaturePlaceHolder: \"Sinatu hemen\",\n chooseFileCaption: \"Fitxategia hautatu\",\n removeFileCaption: \"Fitxategi hau ezabatu\",\n booleanCheckedLabel: \"Bai\",\n booleanUncheckedLabel: \"Ez\",\n confirmRemoveFile: \"Ziur zaude hurrengo fitxategia ezabatu nahi duzula: {0}?\",\n confirmRemoveAllFiles: \"Ziur al zaude fitxategi guztiak ezabatu nahi dituzula?\",\n questionTitlePatternText: \"Galderaren izenburua\",\n modalCancelButtonText: \"Ezeztatu\",\n modalApplyButtonText: \"Ezarri\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"eu\"] = basqueSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"eu\"] = \"Euskara\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/bulgarian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/bulgarian.ts ***!\n \\***************************************/\n/*! exports provided: bulgarianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bulgarianStrings\", function() { return bulgarianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar bulgarianStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Напред\",\n completeText: \"Край\",\n previewText: \"Визуализация\",\n editText: \"редактиране\",\n startSurveyText: \"Начало\",\n otherItemText: \"Друго (опишете)\",\n noneItemText: \"Нито един\",\n selectAllItemText: \"Всички\",\n progressText: \"стр. {0}, общо стр. {1}\",\n panelDynamicProgressText: \"Запис {0} от {1}\",\n questionsProgressText: \"Отговорени на {0} / {1} въпроса\",\n emptySurvey: \"Анкетата не съдържа видими страници или въпроси.\",\n completingSurvey: \"Благодарим ви за участието в анкетата!\",\n completingSurveyBefore: \"Изглежда, че вие вече сте попълнили анкетата.\",\n loadingSurvey: \"Зареждане на анкетата...\",\n optionsCaption: \"Изберете...\",\n value: \"value\",\n requiredError: \"Моля, отговорете на следния въпрос.\",\n requiredErrorInPanel: \"Моля, отговорете поне на един от въпросите.\",\n requiredInAllRowsError: \"Моля, отговорете на въпросите на всички редове.\",\n numericError: \"Стойността следва да бъде число.\",\n textMinLength: \"Моля, използвайте поне {0} символа.\",\n textMaxLength: \"Моля, използвайте не повече от {0} символа.\",\n textMinMaxLength: \"Моля, използвайте повече от {0} и по-малко от {1} символа.\",\n minRowCountError: \"Моля, попълнете поне {0} реда.\",\n minSelectError: \"Моля, изберете поне {0} варианта.\",\n maxSelectError: \"Моля, изберете не повече от {0} варианта.\",\n numericMinMax: \"Стойността '{0}' следва да бъде равна или по-голяма от {1} и равна или по-малка от {2}\",\n numericMin: \"Стойността '{0}' следва да бъде равна или по-голяма от {1}\",\n numericMax: \"Стойността '{0}' следва да бъде равна или по-малка от {1}\",\n invalidEmail: \"Моля, въведете валиден адрес на електронна поща.\",\n invalidExpression: \"Изразът: {0} трябва да дава резултат 'true' (истина).\",\n urlRequestError: \"Заявката води до грешка '{0}'. {1}\",\n urlGetChoicesError: \"Заявката не връща данни или частта 'path' (път до търсения ресурс на сървъра) е неправилно зададена\",\n exceedMaxSize: \"Размерът на файла следва да не превишава {0}.\",\n otherRequiredError: \"Моля, въведете другата стойност.\",\n uploadingFile: \"Вашит файл се зарежда на сървъра. Моля, изчакайте няколко секунди и тогава опитвайте отново.\",\n loadingFile: \"Зареждане...\",\n chooseFile: \"Изберете файл(ове)...\",\n noFileChosen: \"Няма избран файл\",\n confirmDelete: \"Желаете ли да изтриете записа?\",\n keyDuplicationError: \"Стойността следва да бъде уникална.\",\n addColumn: \"Добавяне на колона\",\n addRow: \"Добавяне на ред\",\n removeRow: \"Премахване на ред\",\n addPanel: \"Добавяне на панел\",\n removePanel: \"Премахване на панел\",\n choices_Item: \"елемент\",\n matrix_column: \"Колона\",\n matrix_row: \"Ред\",\n savingData: \"Резултатите се запазват на сървъра...\",\n savingDataError: \"Поради възникнала грешка резултатите не можаха да бъдат запазени.\",\n savingDataSuccess: \"Резултатите бяха запазени успешно!\",\n saveAgainButton: \"Нов опит\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Вие използвахте {0} на тази страница и общо {1}.\",\n timerSpentPage: \"Вие използвахте {0} на тази страница.\",\n timerSpentSurvey: \"Вие използвахте общо {0}.\",\n timerLimitAll: \"Вие изпозвахте {0} от {1} на тази страница и общо {2} от {3}.\",\n timerLimitPage: \"Вие използвахте {0} от {1} на тази страница.\",\n timerLimitSurvey: \"Вие използвахте общо {0} от {1}.\",\n cleanCaption: \"Изчистване\",\n clearCaption: \"Начално състояние\",\n chooseFileCaption: \"Изберете файл\",\n removeFileCaption: \"Премахване на файла\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Не\",\n confirmRemoveFile: \"Наистина ли искате да премахнете този файл: {0}?\",\n confirmRemoveAllFiles: \"Наистина ли искате да премахнете всички файлове?\",\n questionTitlePatternText: \"Заглавие на въпроса\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"bg\"] = bulgarianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"bg\"] = \"български\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/catalan.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/catalan.ts ***!\n \\*************************************/\n/*! exports provided: catalanSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"catalanSurveyStrings\", function() { return catalanSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar catalanSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Següent\",\n completeText: \"Complet\",\n otherItemText: \"Un altre (descrigui)\",\n progressText: \"Pàgina {0} de {1}\",\n emptySurvey: \"No hi ha cap pàgina visible o pregunta a l'enquesta.\",\n completingSurvey: \"Gràcies per completar l'enquesta!\",\n loadingSurvey: \"L'enquesta s'està carregant ...\",\n optionsCaption: \"Selecciona ...\",\n requiredError: \"Si us plau contesti la pregunta.\",\n requiredInAllRowsError: \"Si us plau contesti les preguntes de cada filera.\",\n numericError: \"L'estimació ha de ser numèrica.\",\n textMinLength: \"Si us plau entre almenys {0} símbols.\",\n textMaxLength: \"Si us plau entre menys de {0} símbols.\",\n textMinMaxLength: \"Si us plau entre més de {0} i menys de {1} símbols.\",\n minRowCountError: \"Si us plau ompli almenys {0} fileres.\",\n minSelectError: \"Si us plau seleccioni almenys {0} variants.\",\n maxSelectError: \"Si us plau seleccioni no més de {0} variants.\",\n numericMinMax: \"El '{0}' deu ser igual o més de {1} i igual o menys de {2}\",\n numericMin: \"El '{0}' ha de ser igual o més de {1}\",\n numericMax: \"El '{0}' ha de ser igual o menys de {1}\",\n invalidEmail: \"Si us plau afegiu un correu electrònic vàlid.\",\n urlRequestError: \"La sol·licitud va tornar error '{0}'. {1}\",\n urlGetChoicesError: \"La sol·licitud va tornar buida de dates o la propietat 'trajectòria' no és correcta\",\n exceedMaxSize: \"La mida de l'arxiu no pot excedir {0}.\",\n otherRequiredError: \"Si us plau afegiu l'altra estimació.\",\n uploadingFile: \"El seu arxiu s'està pujant. Si us plau esperi uns segons i intenteu-ho de nou.\",\n addRow: \"Afegiu una filera\",\n removeRow: \"Eliminar una filera\",\n choices_firstItem: \"primer article\",\n choices_secondItem: \"segon article\",\n choices_thirdItem: \"tercer article\",\n matrix_column: \"Columna\",\n matrix_row: \"Filera\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ca\"] = catalanSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ca\"] = \"català\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/croatian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/croatian.ts ***!\n \\**************************************/\n/*! exports provided: croatianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"croatianStrings\", function() { return croatianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar croatianStrings = {\n pagePrevText: \"Prethodni\",\n pageNextText: \"Sljedeći\",\n completeText: \"Kompletan\",\n previewText: \"Pregled\",\n editText: \"Uređivanje\",\n startSurveyText: \"Početak\",\n otherItemText: \"Ostali (opis)\",\n noneItemText: \"Nitko\",\n selectAllItemText: \"Select All\",\n progressText: \"Stranica {0} od {1}\",\n panelDynamicProgressText: \"Zapisa {0} od {1}\",\n questionsProgressText: \"Odgovorio na {0}/{1} pitanja\",\n emptySurvey: \"U anketi nema vidljive stranice ili pitanja.\",\n completingSurvey: \"Hvala vam što ste završili anketu!\",\n completingSurveyBefore: \"Naši zapisi pokazuju da ste već završili ovu anketu.\",\n loadingSurvey: \"Anketa o učitavanje...\",\n optionsCaption: \"Odaberite...\",\n value: \"vrijednost\",\n requiredError: \"Molim vas odgovorite na pitanje.\",\n requiredErrorInPanel: \"Molim vas odgovorite na barem jedno pitanje.\",\n requiredInAllRowsError: \"Odgovorite na pitanja u svim redovima.\",\n numericError: \"Vrijednost bi trebala biti brojčana.\",\n textMinLength: \"Unesite najmanje {0} znak(ova).\",\n textMaxLength: \"Unesite manje od {0} znak(ova).\",\n textMinMaxLength: \"Unesite više od {0} i manje od {1} znakova.\",\n minRowCountError: \"Molimo ispunite najmanje {0} redaka.\",\n minSelectError: \"Odaberite barem {0} varijante.\",\n maxSelectError: \"Odaberite ne više od {0} varijanti.\",\n numericMinMax: \"'{0}'bi trebao biti jednak ili više od {1} i jednak ili manji od {2}.\",\n numericMin: \"'{0}' bi trebao biti jednak ili više od {1}.\",\n numericMax: \"'{0}' bi trebao biti jednak ili manji od {1}\",\n invalidEmail: \"Unesite valjanu e-mail adresu.\",\n invalidExpression: \"Izraz: {0} treba vratiti 'true'.\",\n urlRequestError: \"Zahtjev vratio pogrešku '{0}'. {1}\",\n urlGetChoicesError: \"Zahtjev je vratio prazne podatke ili je 'path' svojstvo netočna.\",\n exceedMaxSize: \"Veličina datoteke ne smije prelaziti {0}.\",\n otherRequiredError: \"Unesite drugu vrijednost.\",\n uploadingFile: \"Vaša datoteka se prenosi. Pričekajte nekoliko sekundi i pokušajte ponovno.\",\n loadingFile: \"Učitavanje...\",\n chooseFile: \"Odaberite datoteku...\",\n noFileChosen: \"Nije odabrana datoteka\",\n confirmDelete: \"Želite li izbrisati zapis?\",\n keyDuplicationError: \"Ta bi vrijednost trebala biti jedinstvena.\",\n addColumn: \"Dodavanje stupca\",\n addRow: \"Dodavanje redaka\",\n removeRow: \"Ukloniti\",\n addPanel: \"Dodavanje novih\",\n removePanel: \"Ukloniti\",\n choices_Item: \"stavku\",\n matrix_column: \"Stupca\",\n matrix_row: \"Redak\",\n savingData: \"Rezultati se spremaju na poslužitelju...\",\n savingDataError: \"Došlo je do pogreške i nismo mogli spremiti rezultate.\",\n savingDataSuccess: \"Rezultati su uspješno spremljeni!\",\n saveAgainButton: \"Pokušaj ponovo\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Vi ste proveli {0} na ovoj stranici i {1} ukupno.\",\n timerSpentPage: \"Potrošili ste {0} na ovu stranicu.\",\n timerSpentSurvey: \"You have spent {0} in total. {0}.\",\n timerLimitAll: \"Vi ste proveli {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n timerLimitPage: \"Potrošio si {0} od {1} na ovoj stranici.\",\n timerLimitSurvey: \"Ukupno ste potrošili {0} od {1}.\",\n cleanCaption: \"Očistiti\",\n clearCaption: \"Očistiti\",\n chooseFileCaption: \"Odaberite datoteku\",\n removeFileCaption: \"Uklonite ovu datoteku\",\n booleanCheckedLabel: \"Da\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Jeste li sigurni da želite ukloniti ovu datoteku: {0}?\",\n confirmRemoveAllFiles: \"Jeste li sigurni da želite ukloniti sve datoteke?\",\n questionTitlePatternText: \"Naslov pitanja\",\n modalCancelButtonText: \"Otkazati\",\n modalApplyButtonText: \"Primijeniti\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hr\"] = croatianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hr\"] = \"hrvatski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/czech.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/czech.ts ***!\n \\***********************************/\n/*! exports provided: czechSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"czechSurveyStrings\", function() { return czechSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar czechSurveyStrings = {\n pagePrevText: \"Předchozí\",\n pageNextText: \"Další\",\n completeText: \"Hotovo\",\n previewText: \"Náhled\",\n editText: \"Upravit\",\n startSurveyText: \"Start\",\n otherItemText: \"Jiná odpověď (napište)\",\n noneItemText: \"Žádný\",\n selectAllItemText: \"Vybrat vše\",\n progressText: \"Strana {0} z {1}\",\n panelDynamicProgressText: \"Záznam {0} z {1}\",\n questionsProgressText: \"Zodpovězené otázky: {0} / {1}\",\n emptySurvey: \"Průzkumu neobsahuje žádné otázky.\",\n completingSurvey: \"Děkujeme za vyplnění průzkumu!\",\n completingSurveyBefore: \"Naše záznamy ukazují, že jste tento průzkum již dokončili.\",\n loadingSurvey: \"Probíhá načítání průzkumu...\",\n optionsCaption: \"Vyber...\",\n value: \"hodnota\",\n requiredError: \"Odpovězte prosím na otázku.\",\n requiredErrorInPanel: \"Please answer at least one question.\",\n requiredInAllRowsError: \"Odpovězte prosím na všechny otázky.\",\n numericError: \"V tomto poli lze zadat pouze čísla.\",\n textMinLength: \"Zadejte prosím alespoň {0} znaků.\",\n textMaxLength: \"Zadejte prosím méně než {0} znaků.\",\n textMinMaxLength: \"Zadejte prosím více než {0} a méně než {1} znaků.\",\n minRowCountError: \"Vyplňte prosím alespoň {0} řádků.\",\n minSelectError: \"Vyberte prosím alespoň {0} varianty.\",\n maxSelectError: \"Nevybírejte prosím více než {0} variant.\",\n numericMinMax: \"Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}\",\n numericMin: \"Odpověď '{0}' by mělo být větší nebo rovno {1}\",\n numericMax: \"Odpověď '{0}' by mělo být menší nebo rovno {1}\",\n invalidEmail: \"Zadejte prosím platnou e-mailovou adresu.\",\n invalidExpression: \"Výraz: {0} by měl vrátit hodnotu „true“.\",\n urlRequestError: \"Požadavek vrátil chybu '{0}'. {1}\",\n urlGetChoicesError: \"Požadavek nevrátil data nebo cesta je neplatná\",\n exceedMaxSize: \"Velikost souboru by neměla být větší než {0}.\",\n otherRequiredError: \"Zadejte prosím jinou hodnotu.\",\n uploadingFile: \"Váš soubor se nahrává. Zkuste to prosím za několik sekund.\",\n loadingFile: \"Načítání...\",\n chooseFile: \"Vyberte soubory ...\",\n noFileChosen: \"Není zvolený žádný soubor\",\n confirmDelete: \"Chcete smazat záznam?\",\n keyDuplicationError: \"Tato hodnota by měla být jedinečná.\",\n addColumn: \"Přidat sloupec\",\n addRow: \"Přidat řádek\",\n removeRow: \"Odstranit\",\n addPanel: \"Přidat nový\",\n removePanel: \"Odstranit\",\n choices_Item: \"položka\",\n matrix_column: \"Sloupec\",\n matrix_row: \"Řádek\",\n savingData: \"Výsledky se ukládají na server ...\",\n savingDataError: \"Došlo k chybě a výsledky jsme nemohli uložit.\",\n savingDataSuccess: \"Výsledky byly úspěšně uloženy!\",\n saveAgainButton: \"Zkus to znovu\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Na této stránce jste utratili celkem {0} a celkem {1}.\",\n timerSpentPage: \"Na této stránce jste utratili {0}.\",\n timerSpentSurvey: \"Celkem jste utratili {0}.\",\n timerLimitAll: \"Na této stránce jste utratili {0} z {1} a celkem {2} z {3}.\",\n timerLimitPage: \"Na této stránce jste strávili {0} z {1}.\",\n timerLimitSurvey: \"Celkově jste utratili {0} z {1}.\",\n cleanCaption: \"Čistý\",\n clearCaption: \"Průhledná\",\n chooseFileCaption: \"Vyberte soubor\",\n removeFileCaption: \"Odeberte tento soubor\",\n booleanCheckedLabel: \"Ano\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Opravdu chcete odebrat tento soubor: {0}?\",\n confirmRemoveAllFiles: \"Opravdu chcete odstranit všechny soubory?\",\n questionTitlePatternText: \"Název otázky\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cs\"] = czechSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cs\"] = \"čeština\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/danish.ts\":\n/*!************************************!*\\\n !*** ./src/localization/danish.ts ***!\n \\************************************/\n/*! exports provided: danishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"danishSurveyStrings\", function() { return danishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar danishSurveyStrings = {\n pagePrevText: \"Tilbage\",\n pageNextText: \"Videre\",\n completeText: \"Færdig\",\n previewText: \"Forpremiere\",\n editText: \"Redigér\",\n startSurveyText: \"Start\",\n otherItemText: \"Valgfrit svar...\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Vælg alle\",\n progressText: \"Side {0} af {1}\",\n panelDynamicProgressText: \"Optag {0} af {1}\",\n questionsProgressText: \"Besvarede {0} / {1} spørgsmål\",\n emptySurvey: \"Der er ingen synlige spørgsmål.\",\n completingSurvey: \"Mange tak for din besvarelse!\",\n completingSurveyBefore: \"Vores data viser at du allerede har gennemført dette spørgeskema.\",\n loadingSurvey: \"Spørgeskemaet hentes fra serveren...\",\n optionsCaption: \"Vælg...\",\n value: \"værdi\",\n requiredError: \"Besvar venligst spørgsmålet.\",\n requiredErrorInPanel: \"Besvar venligst mindst ét spørgsmål.\",\n requiredInAllRowsError: \"Besvar venligst spørgsmål i alle rækker.\",\n numericError: \"Angiv et tal.\",\n textMinLength: \"Angiv mindst {0} tegn.\",\n textMaxLength: \"Please enter less than {0} characters.\",\n textMinMaxLength: \"Angiv mere end {0} og mindre end {1} tegn.\",\n minRowCountError: \"Udfyld mindst {0} rækker.\",\n minSelectError: \"Vælg venligst mindst {0} svarmulighed(er).\",\n maxSelectError: \"Vælg venligst færre {0} svarmuligheder(er).\",\n numericMinMax: \"'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}\",\n numericMin: \"'{0}' skal være lig med eller større end {1}\",\n numericMax: \"'{0}' skal være lig med eller mindre end {1}\",\n invalidEmail: \"Angiv venligst en gyldig e-mail adresse.\",\n invalidExpression: \"Udtrykket: {0} skal returnere 'true'.\",\n urlRequestError: \"Forespørgslen returnerede fejlen '{0}'. {1}\",\n urlGetChoicesError: \"Forespørgslen returnerede ingen data eller 'path' parameteren er forkert\",\n exceedMaxSize: \"Filstørrelsen må ikke overstige {0}.\",\n otherRequiredError: \"Angiv en værdi for dit valgfrie svar.\",\n uploadingFile: \"Din fil bliver uploadet. Vent nogle sekunder og prøv eventuelt igen.\",\n loadingFile: \"Indlæser...\",\n chooseFile: \"Vælg fil(er)...\",\n noFileChosen: \"Ingen fil er valgt\",\n confirmDelete: \"Vil du fjerne den?\",\n keyDuplicationError: \"Denne værdi skal være unik.\",\n addColumn: \"Tilføj kolonne\",\n addRow: \"Tilføj række\",\n removeRow: \"Fjern\",\n addPanel: \"Tilføj ny\",\n removePanel: \"Fjern\",\n choices_Item: \"valg\",\n matrix_column: \"Kolonne\",\n matrix_row: \"Række\",\n savingData: \"Resultaterne bliver gemt på serveren...\",\n savingDataError: \"Der opstod en fejl og vi kunne ikke gemme resultatet.\",\n savingDataSuccess: \"Resultatet blev gemt!\",\n saveAgainButton: \"Prøv igen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har brugt {0} på denne side og {1} i alt.\",\n timerSpentPage: \"Du har brugt {0} på denne side.\",\n timerSpentSurvey: \"Du har brugt {0} i alt.\",\n timerLimitAll: \"Du har brugt {0} af {1} på denne side og {2} af {3} i alt.\",\n timerLimitPage: \"Du har brugt {0} af {1} på denne side.\",\n timerLimitSurvey: \"Du har brugt {0} af {1} i alt.\",\n cleanCaption: \"Rens\",\n clearCaption: \"Fjern\",\n chooseFileCaption: \"Vælg fil\",\n removeFileCaption: \"Fjern denne fil\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Ingen\",\n confirmRemoveFile: \"Er du sikker på, at du vil fjerne denne fil: {0}?\",\n confirmRemoveAllFiles: \"Er du sikker på, at du vil fjerne alle filer?\",\n questionTitlePatternText: \"Spørgsmåls titel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"da\"] = danishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"da\"] = \"dansk\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/dutch.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/dutch.ts ***!\n \\***********************************/\n/*! exports provided: dutchSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dutchSurveyStrings\", function() { return dutchSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created on behalf https://github.com/Frank13\n//Modified on behalf Roeland Verbakel\n\nvar dutchSurveyStrings = {\n pagePrevText: \"Vorige\",\n pageNextText: \"Volgende\",\n completeText: \"Verzenden\",\n previewText: \"Voorbeeld\",\n editText: \"Bewerk\",\n startSurveyText: \"Begin met\",\n otherItemText: \"Anders, nl.\",\n noneItemText: \"Geen\",\n selectAllItemText: \"Selecteer Alles\",\n progressText: \"Pagina {0} van {1}\",\n panelDynamicProgressText: \"Record {0} of {1}\",\n questionsProgressText: \"Geantwoord {0}/{1} vragen\",\n emptySurvey: \"Er is geen zichtbare pagina of vraag in deze vragenlijst\",\n completingSurvey: \"Bedankt voor het invullen van de vragenlijst\",\n completingSurveyBefore: \"Onze gegevens tonen aan dat je deze vragenlijst reeds beantwoord hebt.\",\n loadingSurvey: \"De vragenlijst is aan het laden...\",\n optionsCaption: \"Kies...\",\n value: \"waarde\",\n requiredError: \"Dit is een vereiste vraag\",\n requiredErrorInPanel: \"Gelieve ten minste een vraag te beantwoorden.\",\n requiredInAllRowsError: \"Deze vraag vereist één antwoord per rij\",\n numericError: \"Het antwoord moet een getal zijn\",\n textMinLength: \"Vul minstens {0} karakters in\",\n textMaxLength: \"Gelieve minder dan {0} karakters in te vullen.\",\n textMinMaxLength: \"Gelieve meer dan {0} en minder dan {1} karakters in te vullen.\",\n minRowCountError: \"Gelieve ten minste {0} rijen in te vullen.\",\n minSelectError: \"Selecteer minimum {0} antwoorden\",\n maxSelectError: \"Selecteer niet meer dan {0} antwoorden\",\n numericMinMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}\",\n numericMin: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n numericMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n invalidEmail: \"Vul een geldig e-mailadres in\",\n invalidExpression: \"De uitdrukking: {0} moet 'waar' teruggeven.\",\n urlRequestError: \"De vraag keerde een fout terug '{0}'. {1}\",\n urlGetChoicesError: \"De vraag gaf een leeg antwoord terug of de 'pad' eigenschap is niet correct\",\n exceedMaxSize: \"De grootte van het bestand mag niet groter zijn dan {0}\",\n otherRequiredError: \"Vul het veld 'Anders, nl.' in\",\n uploadingFile: \"Uw bestand wordt opgeladen. Gelieve enkele seconden te wachten en opnieuw te proberen.\",\n loadingFile: \"Opladen...\",\n chooseFile: \"Kies uw bestand(en)...\",\n noFileChosen: \"Geen bestand gekozen\",\n confirmDelete: \"Wil je deze gegevens verwijderen?\",\n keyDuplicationError: \"Deze waarde moet uniek zijn.\",\n addColumn: \"Voeg kolom toe\",\n addRow: \"Voeg rij toe\",\n removeRow: \"Verwijder\",\n addPanel: \"Nieuwe toevoegen\",\n removePanel: \"Verwijder\",\n choices_Item: \"onderwerp\",\n matrix_column: \"Kolom\",\n matrix_row: \"Rij\",\n savingData: \"De resultaten worden bewaard op de server...\",\n savingDataError: \"Er was een probleem en we konden de resultaten niet bewaren.\",\n savingDataSuccess: \"De resultaten werden succesvol bewaard!\",\n saveAgainButton: \"Probeer opnieuw\",\n timerMin: \"minimum\",\n timerSec: \"sec\",\n timerSpentAll: \"U heeft {0} gespendeerd op deze pagina en {1} in totaal.\",\n timerSpentPage: \"U heeft {0} op deze pagina gespendeerd.\",\n timerSpentSurvey: \"U heeft in totaal {0} gespendeerd.\",\n timerLimitAll: \"U heeft {0} van {1} op deze pagina gespendeerd en {2} van {3} in totaal.\",\n timerLimitPage: \"U heeft {0} van {1} gespendeerd op deze pagina.\",\n timerLimitSurvey: \"U heeft {0} van {1} in het totaal.\",\n cleanCaption: \"Kuis op\",\n clearCaption: \"Kuis op\",\n chooseFileCaption: \"Gekozen bestand\",\n removeFileCaption: \"Verwijder deze file\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Neen\",\n confirmRemoveFile: \"Bent u zeker dat u deze file wilt verwijderen: {0}?\",\n confirmRemoveAllFiles: \"Bent u zeker dat u al deze files wilt verwijderen?\",\n questionTitlePatternText: \"Titel van de vraag\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"nl\"] = dutchSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"nl\"] = \"nederlands\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/english.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/english.ts ***!\n \\*************************************/\n/*! exports provided: englishStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return englishStrings; });\n//Uncomment this line on creating a translation file\n//import { surveyLocalization } from \"../surveyStrings\";\nvar englishStrings = {\n pagePrevText: \"Previous\",\n pageNextText: \"Next\",\n completeText: \"Complete\",\n previewText: \"Preview\",\n editText: \"Edit\",\n startSurveyText: \"Start\",\n otherItemText: \"Other (describe)\",\n noneItemText: \"None\",\n selectAllItemText: \"Select All\",\n progressText: \"Page {0} of {1}\",\n panelDynamicProgressText: \"Record {0} of {1}\",\n questionsProgressText: \"Answered {0}/{1} questions\",\n emptySurvey: \"There is no visible page or question in the survey.\",\n completingSurvey: \"Thank you for completing the survey!\",\n completingSurveyBefore: \"Our records show that you have already completed this survey.\",\n loadingSurvey: \"Loading Survey...\",\n optionsCaption: \"Choose...\",\n value: \"value\",\n requiredError: \"Please answer the question.\",\n requiredErrorInPanel: \"Please answer at least one question.\",\n requiredInAllRowsError: \"Please answer questions in all rows.\",\n numericError: \"The value should be numeric.\",\n minError: \"The value should not be less than {0}\",\n maxError: \"The value should not be greater than {0}\",\n textMinLength: \"Please enter at least {0} character(s).\",\n textMaxLength: \"Please enter no more than {0} character(s).\",\n textMinMaxLength: \"Please enter at least {0} and no more than {1} characters.\",\n minRowCountError: \"Please fill in at least {0} row(s).\",\n minSelectError: \"Please select at least {0} variant(s).\",\n maxSelectError: \"Please select no more than {0} variant(s).\",\n numericMinMax: \"The '{0}' should be at least {1} and at most {2}\",\n numericMin: \"The '{0}' should be at least {1}\",\n numericMax: \"The '{0}' should be at most {1}\",\n invalidEmail: \"Please enter a valid e-mail address.\",\n invalidExpression: \"The expression: {0} should return 'true'.\",\n urlRequestError: \"The request returned error '{0}'. {1}\",\n urlGetChoicesError: \"The request returned empty data or the 'path' property is incorrect\",\n exceedMaxSize: \"The file size should not exceed {0}.\",\n otherRequiredError: \"Please enter the other value.\",\n uploadingFile: \"Your file is uploading. Please wait several seconds and try again.\",\n loadingFile: \"Loading...\",\n chooseFile: \"Choose file(s)...\",\n noFileChosen: \"No file chosen\",\n confirmDelete: \"Do you want to delete the record?\",\n keyDuplicationError: \"This value should be unique.\",\n addColumn: \"Add column\",\n addRow: \"Add row\",\n removeRow: \"Remove\",\n emptyRowsText: \"There are no rows.\",\n addPanel: \"Add new\",\n removePanel: \"Remove\",\n choices_Item: \"item\",\n matrix_column: \"Column\",\n matrix_row: \"Row\",\n multipletext_itemname: \"text\",\n savingData: \"The results are being saved on the server...\",\n savingDataError: \"An error occurred and we could not save the results.\",\n savingDataSuccess: \"The results were saved successfully!\",\n saveAgainButton: \"Try again\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"You have spent {0} on this page and {1} in total.\",\n timerSpentPage: \"You have spent {0} on this page.\",\n timerSpentSurvey: \"You have spent {0} in total.\",\n timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\",\n timerLimitPage: \"You have spent {0} of {1} on this page.\",\n timerLimitSurvey: \"You have spent {0} of {1} in total.\",\n cleanCaption: \"Clean\",\n clearCaption: \"Clear\",\n signaturePlaceHolder: \"Sign here\",\n chooseFileCaption: \"Choose file\",\n removeFileCaption: \"Remove this file\",\n booleanCheckedLabel: \"Yes\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\",\n confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\",\n questionTitlePatternText: \"Question Title\",\n modalCancelButtonText: \"Cancel\",\n modalApplyButtonText: \"Apply\",\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n//surveyLocalization.locales[\"en\"] = englishStrings;\n//surveyLocalization.localeNames[\"en\"] = \"English\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/estonian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/estonian.ts ***!\n \\**************************************/\n/*! exports provided: estonianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"estonianSurveyStrings\", function() { return estonianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar estonianSurveyStrings = {\n pagePrevText: \"Tagasi\",\n pageNextText: \"Edasi\",\n completeText: \"Lõpeta\",\n previewText: \"Eelvaade\",\n editText: \"Muuda\",\n startSurveyText: \"Alusta\",\n otherItemText: \"Muu (täpsusta)\",\n noneItemText: \"Mitte midagi\",\n selectAllItemText: \"Vali kõik\",\n progressText: \"Lehekülg {0}/{1}\",\n panelDynamicProgressText: \"Kirje {0}/{1}\",\n questionsProgressText: \"Vastatud {0} küsimust {1}-st\",\n emptySurvey: \"Selles uuringus ei ole ühtki nähtavat lehekülge või küsimust.\",\n completingSurvey: \"Aitäh, et vastasid ankeedile!\",\n completingSurveyBefore: \"Meie andmetel oled sa sellele ankeedile juba vastanud.\",\n loadingSurvey: \"Laen ankeeti...\",\n optionsCaption: \"Vali...\",\n value: \"väärtus\",\n requiredError: \"Palun vasta küsimusele.\",\n requiredErrorInPanel: \"Palun vasta vähemalt ühele küsimusele.\",\n requiredInAllRowsError: \"Palun anna vastus igal real.\",\n numericError: \"See peaks olema numbriline väärtus.\",\n textMinLength: \"Palun sisesta vähemalt {0} tähemärki.\",\n textMaxLength: \"Palun ära sisesta rohkem kui {0} tähemärki.\",\n textMinMaxLength: \"Sisesta palun {0} - {1} tähemärki.\",\n minRowCountError: \"Sisesta plaun vähemalt {0} rida.\",\n minSelectError: \"Palun vali vähemalt {0} varianti.\",\n maxSelectError: \"Palun vali kõige rohkem {0} varianti.\",\n numericMinMax: \"'{0}' peaks olema võrdne või suurem kui {1} ja võrdne või väiksem kui {2}\",\n numericMin: \"'{0}' peaks olema võrdne või suurem kui {1}\",\n numericMax: \"'{0}' peaks olema võrnde või väiksem kui {1}\",\n invalidEmail: \"Sisesta palun korrektne e-posti aadress.\",\n invalidExpression: \"Avaldis: {0} peaks tagastama tõese.\",\n urlRequestError: \"Taotlus tagastas vea „{0}”. {1}\",\n urlGetChoicesError: \"Taotlus tagastas tühjad andmed või atribuut 'path' on vale\",\n exceedMaxSize: \"Faili suurus ei tohi ületada {0}.\",\n otherRequiredError: \"Sisesta palun muu vastus.\",\n uploadingFile: \"Sinu fail laeb üles. Palun oota mõned sekundid ning proovi seejärel uuesti.\",\n loadingFile: \"Laen...\",\n chooseFile: \"Vali fail(id)...\",\n noFileChosen: \"Faili pole valitud\",\n confirmDelete: \"Kas tahad kirje kustutada?\",\n keyDuplicationError: \"See väärtus peab olema unikaalne.\",\n addColumn: \"Lisa veerg\",\n addRow: \"Lisa rida\",\n removeRow: \"Eemalda\",\n addPanel: \"Lisa uus\",\n removePanel: \"Eemalda\",\n choices_Item: \"üksus\",\n matrix_column: \"Veerg\",\n matrix_row: \"Rida\",\n savingData: \"Salvestan andmed serveris...\",\n savingDataError: \"Tekkis viga ning me ei saanud vastuseid salvestada.\",\n savingDataSuccess: \"Vastuste salvestamine õnnestus!\",\n saveAgainButton: \"Proovi uuesti\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Oled veetnud {0} sellel lehel ning kokku {1}.\",\n timerSpentPage: \"Oled veetnud {0} sellel lehel.\",\n timerSpentSurvey: \"Oled veetnud {0} kokku.\",\n timerLimitAll: \"Oled kulutanud {0} võimalikust {1} sellel lehel ning {2} võimalikust {3} kokku.\",\n timerLimitPage: \"Oled kulutanud {0} võimalikust {1} sellel lehel.\",\n timerLimitSurvey: \"Oled kulutanud {0} võimalikust {1} koguajast.\",\n cleanCaption: \"Puhasta\",\n clearCaption: \"Puhasta\",\n chooseFileCaption: \"Vali fail\",\n removeFileCaption: \"Eemalda see fail\",\n booleanCheckedLabel: \"Jah\",\n booleanUncheckedLabel: \"Ei\",\n confirmRemoveFile: \"Oled sa kindel, et soovid selle faili eemaldada: {0}?\",\n confirmRemoveAllFiles: \"Oled sa kindel, et soovid eemaldada kõik failid?\",\n questionTitlePatternText: \"Küsimuse pealkiri\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"et\"] = estonianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"et\"] = \"eesti keel\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/finnish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/finnish.ts ***!\n \\*************************************/\n/*! exports provided: finnishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"finnishSurveyStrings\", function() { return finnishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar finnishSurveyStrings = {\n pagePrevText: \"Edellinen\",\n pageNextText: \"Seuraava\",\n completeText: \"Valmis\",\n previewText: \"Esikatselu\",\n editText: \"Muokkaa\",\n startSurveyText: \"Aloita\",\n otherItemText: \"Muu (tarkenna)\",\n noneItemText: \"Ei mitään\",\n selectAllItemText: \"Valitse kaikki\",\n progressText: \"Sivu {0} / {1}\",\n panelDynamicProgressText: \"Osio {0} / {1}\",\n questionsProgressText: \"Olet vastannut {0} / {1} kysymykseen.\",\n emptySurvey: \"Tässä kyselyssä ei ole yhtään näkyvillä olevaa sivua tai kysymystä.\",\n completingSurvey: \"Kiitos kyselyyn vastaamisesta!\",\n completingSurveyBefore: \"Tietojemme mukaan olet jo suorittanut tämän kyselyn.\",\n loadingSurvey: \"Kyselyä ladataan palvelimelta...\",\n optionsCaption: \"Valitse...\",\n value: \"arvo\",\n requiredError: \"Vastaa kysymykseen, kiitos.\",\n requiredErrorInPanel: \"Vastaa ainakin yhteen kysymykseen.\",\n requiredInAllRowsError: \"Vastaa kysymyksiin kaikilla riveillä.\",\n numericError: \"Arvon tulee olla numeerinen.\",\n textMinLength: \"Syötä vähintään {0} merkkiä.\",\n textMaxLength: \"Älä syötä yli {0} merkkiä.\",\n textMinMaxLength: \"Syötä vähintään {0} ja enintään {1} merkkiä.\",\n minRowCountError: \"Täytä vähintään {0} riviä.\",\n minSelectError: \"Valitse vähintään {0} vaihtoehtoa.\",\n maxSelectError: \"Valitse enintään {0} vaihtoehtoa.\",\n numericMinMax: \"Luvun '{0}' tulee olla vähintään {1} ja korkeintaan {2}.\",\n numericMin: \"Luvun '{0}' tulee olla vähintään {1}.\",\n numericMax: \"Luvun '{0}' tulee olla korkeintaan {1}.\",\n invalidEmail: \"Syötä validi sähköpostiosoite.\",\n invalidExpression: \"Lausekkeen: {0} pitäisi palauttaa 'true'.\",\n urlRequestError: \"Pyyntö palautti virheen {0}. {1}\",\n urlGetChoicesError: \"Pyyntö palautti tyhjän tiedoston tai 'path'-asetus on väärä\",\n exceedMaxSize: \"Tiedoston koko ei saa olla suurempi kuin {0}.\",\n otherRequiredError: \"Tarkenna vastaustasi tekstikenttään.\",\n uploadingFile: \"Tiedostoa lähetetään. Odota muutama sekunti ja yritä uudelleen.\",\n loadingFile: \"Ladataan...\",\n chooseFile: \"Valitse tiedosto(t)...\",\n noFileChosen: \"Ei tiedostoa valittuna\",\n confirmDelete: \"Haluatko poistaa osion?\",\n keyDuplicationError: \"Tämä arvo on jo käytössä. Syötä toinen arvo.\",\n addColumn: \"Lisää sarake\",\n addRow: \"Lisää rivi\",\n removeRow: \"Poista\",\n emptyRowsText: \"Ei rivejä\",\n addPanel: \"Lisää uusi\",\n removePanel: \"Poista\",\n choices_Item: \"kohde\",\n matrix_column: \"Sarake\",\n matrix_row: \"Rivi\",\n savingData: \"Tietoja tallennetaan palvelimelle...\",\n savingDataError: \"Tapahtui virhe, emmekä voineet tallentaa kyselyn tietoja.\",\n savingDataSuccess: \"Tiedot tallennettiin onnistuneesti!\",\n saveAgainButton: \"Yritä uudelleen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Olet käyttänyt {0} tällä sivulla ja yhteensä {1}.\",\n timerSpentPage: \"Olet käyttänyt {0} tällä sivulla.\",\n timerSpentSurvey: \"Olet käyttänyt yhteensä {0}.\",\n timerLimitAll: \"Olet käyttänyt tällä sivulla {0} / {1} ja yhteensä {2} / {3}.\",\n timerLimitPage: \"Olet käyttänyt {0} / {1} tällä sivulla.\",\n timerLimitSurvey: \"Olet käyttänyt yhteensä {0} / {1}.\",\n cleanCaption: \"Pyyhi\",\n clearCaption: \"Tyhjennä\",\n chooseFileCaption: \"Valitse tiedosto\",\n removeFileCaption: \"Poista tämä tiedosto\",\n booleanCheckedLabel: \"Kyllä\",\n booleanUncheckedLabel: \"Ei\",\n confirmRemoveFile: \"Haluatko varmasti poistaa tämän tiedoston: {0}?\",\n confirmRemoveAllFiles: \"Haluatko varmasti poistaa kaikki tiedostot?\",\n questionTitlePatternText: \"Kysymyksen otsikko\",\n modalCancelButtonText: \"Peruuta\",\n modalApplyButtonText: \"Käytä\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fi\"] = finnishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fi\"] = \"suomi\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/french.ts\":\n/*!************************************!*\\\n !*** ./src/localization/french.ts ***!\n \\************************************/\n/*! exports provided: frenchSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"frenchSurveyStrings\", function() { return frenchSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar frenchSurveyStrings = {\n pagePrevText: \"Précédent\",\n pageNextText: \"Suivant\",\n completeText: \"Terminer\",\n previewText: \"Aperçu\",\n editText: \"Modifier\",\n startSurveyText: \"Commencer\",\n otherItemText: \"Autre (préciser)\",\n noneItemText: \"Aucun\",\n selectAllItemText: \"Tout sélectionner\",\n progressText: \"Page {0} sur {1}\",\n panelDynamicProgressText: \"Enregistrement {0} sur {1}\",\n questionsProgressText: \"{0}/{1} question(s) répondue(s)\",\n emptySurvey: \"Il n'y a ni page visible ni question visible dans ce questionnaire\",\n completingSurvey: \"Merci d'avoir répondu au questionnaire !\",\n completingSurveyBefore: \"Nos données indiquent que vous avez déjà rempli ce questionnaire.\",\n loadingSurvey: \"Le questionnaire est en cours de chargement...\",\n optionsCaption: \"Choisissez...\",\n value: \"valeur\",\n requiredError: \"La réponse à cette question est obligatoire.\",\n requiredErrorInPanel: \"Merci de répondre au moins à une question.\",\n requiredInAllRowsError: \"Toutes les lignes sont obligatoires\",\n numericError: \"La réponse doit être un nombre.\",\n textMinLength: \"Merci de saisir au moins {0} caractères.\",\n textMaxLength: \"Merci de saisir moins de {0} caractères.\",\n textMinMaxLength: \"Merci de saisir entre {0} et {1} caractères.\",\n minRowCountError: \"Merci de compléter au moins {0} lignes.\",\n minSelectError: \"Merci de sélectionner au minimum {0} réponses.\",\n maxSelectError: \"Merci de sélectionner au maximum {0} réponses.\",\n numericMinMax: \"Votre réponse '{0}' doit être supérieure ou égale à {1} et inférieure ou égale à {2}\",\n numericMin: \"Votre réponse '{0}' doit être supérieure ou égale à {1}\",\n numericMax: \"Votre réponse '{0}' doit être inférieure ou égale à {1}\",\n invalidEmail: \"Merci d'entrer une adresse mail valide.\",\n invalidExpression: \"L'expression: {0} doit retourner 'true'.\",\n urlRequestError: \"La requête a renvoyé une erreur '{0}'. {1}\",\n urlGetChoicesError: \"La requête a renvoyé des données vides ou la propriété 'path' est incorrecte\",\n exceedMaxSize: \"La taille du fichier ne doit pas excéder {0}.\",\n otherRequiredError: \"Merci de préciser le champ 'Autre'.\",\n uploadingFile: \"Votre fichier est en cours de chargement. Merci d'attendre quelques secondes et de réessayer.\",\n loadingFile: \"Chargement...\",\n chooseFile: \"Ajouter des fichiers...\",\n noFileChosen: \"Aucun fichier ajouté\",\n confirmDelete: \"Voulez-vous supprimer cet enregistrement ?\",\n keyDuplicationError: \"Cette valeur doit être unique.\",\n addColumn: \"Ajouter une colonne\",\n addRow: \"Ajouter une ligne\",\n removeRow: \"Supprimer\",\n addPanel: \"Ajouter\",\n removePanel: \"Supprimer\",\n choices_Item: \"item\",\n matrix_column: \"Colonne\",\n matrix_row: \"Ligne\",\n savingData: \"Les résultats sont en cours de sauvegarde sur le serveur...\",\n savingDataError: \"Une erreur est survenue et a empêché la sauvegarde des résultats.\",\n savingDataSuccess: \"Les résultats ont bien été enregistrés !\",\n saveAgainButton: \"Réessayer\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Vous avez passé {0} sur cette page et {1} au total.\",\n timerSpentPage: \"Vous avez passé {0} sur cette page.\",\n timerSpentSurvey: \"Vous avez passé {0} au total.\",\n timerLimitAll: \"Vous avez passé {0} sur {1} sur cette page et {2} sur {3} au total.\",\n timerLimitPage: \"Vous avez passé {0} sur {1} sur cette page.\",\n timerLimitSurvey: \"Vous avez passé {0} sur {1} au total.\",\n cleanCaption: \"Nettoyer\",\n clearCaption: \"Vider\",\n chooseFileCaption: \"Ajouter un fichier\",\n removeFileCaption: \"Enlever ce fichier\",\n booleanCheckedLabel: \"Oui\",\n booleanUncheckedLabel: \"Non\",\n confirmRemoveFile: \"Êtes-vous certains de vouloir supprimer ce fichier : {0}?\",\n confirmRemoveAllFiles: \"Êtes-vous certains de vouloir supprimer tous les fichiers?\",\n questionTitlePatternText: \"Titre de la question\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fr\"] = frenchSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fr\"] = \"français\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/georgian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/georgian.ts ***!\n \\**************************************/\n/*! exports provided: georgianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"georgianSurveyStrings\", function() { return georgianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar georgianSurveyStrings = {\n pagePrevText: \"უკან\",\n pageNextText: \"შემდეგ\",\n completeText: \"დასრულება\",\n progressText: \"გვერდი {0} / {1}\",\n emptySurvey: \"არცერთი კითხვა არ არის.\",\n completingSurvey: \"გმადლობთ კითხვარის შევსებისთვის!\",\n loadingSurvey: \"ჩატვირთვა სერვერიდან...\",\n otherItemText: \"სხვა (გთხოვთ მიუთითეთ)\",\n optionsCaption: \"არჩევა...\",\n requiredError: \"გთხოვთ უპასუხეთ კითხვას.\",\n numericError: \"პასუხი უნდა იყოს რიცხვი.\",\n textMinLength: \"გთხოვთ შეიყვანეთ არანაკლებ {0} სიმბოლო.\",\n minSelectError: \"გთხოვთ აირჩიეთ არანაკლებ {0} ვარიანტი.\",\n maxSelectError: \"გთხოვთ აირჩიეთ არაუმეტეს {0} ვარიანტი.\",\n numericMinMax: \"'{0}' უნდა იყოს მეტი ან ტოლი, ვიდრე {1}, და ნაკლები ან ტოლი ვიდრე {2}\",\n numericMin: \"'{0}' უნდა იყოს მეტი ან ტოლი ვიდრე {1}\",\n numericMax: \"'{0}' უნდა იყოს ნაკლები ან ტოლი ვიდრე {1}\",\n invalidEmail: \"გთხოვთ შეიყვანოთ ელ. ფოსტის რეალური მისამართი.\",\n otherRequiredEror: \"გთხოვთ შეავსეთ ველი 'სხვა'\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ka\"] = georgianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ka\"] = \"ქართული\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/german.ts\":\n/*!************************************!*\\\n !*** ./src/localization/german.ts ***!\n \\************************************/\n/*! exports provided: germanSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"germanSurveyStrings\", function() { return germanSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar germanSurveyStrings = {\n pagePrevText: \"Zurück\",\n pageNextText: \"Weiter\",\n completeText: \"Abschließen\",\n previewText: \"Vorschau\",\n editText: \"Bearbeiten\",\n startSurveyText: \"Start\",\n otherItemText: \"Sonstiges (Bitte angeben)\",\n noneItemText: \"Nichts trifft zu\",\n selectAllItemText: \"Alles auswählen\",\n progressText: \"Seite {0} von {1}\",\n panelDynamicProgressText: \"Eintrag {0} von {1}\",\n questionsProgressText: \"{0}/{1} Fragen beantwortet\",\n emptySurvey: \"Es sind keine Fragen vorhanden.\",\n completingSurvey: \"Vielen Dank, dass Sie die Umfrage abgeschlossen haben!\",\n completingSurveyBefore: \"Wir haben festgestellt, dass Sie diese Umfrage bereits abgeschlossen haben.\",\n loadingSurvey: \"Umfrage wird geladen...\",\n optionsCaption: \"Bitte auswählen...\",\n value: \"Wert\",\n requiredError: \"Bitte beantworten Sie diese Frage.\",\n requiredErrorInPanel: \"Bitte beantworten Sie mindestens eine Frage.\",\n requiredInAllRowsError: \"Bitte beantworten Sie alle Fragen.\",\n numericError: \"Der Wert muss eine Zahl sein.\",\n textMinLength: \"Bitte geben Sie mindestens {0} Zeichen ein.\",\n textMaxLength: \"Bitte geben Sie nicht mehr als {0} Zeichen ein.\",\n textMinMaxLength: \"Bitte geben Sie mindestens {0} und maximal {1} Zeichen ein.\",\n minRowCountError: \"Bitte machen Sie in mindestens {0} Zeilen eine Eingabe.\",\n minSelectError: \"Bitte wählen Sie mindestens {0} Antwort(en) aus.\",\n maxSelectError: \"Bitte wählen Sie nicht mehr als {0} Antwort(en) aus.\",\n numericMinMax: \"'{0}' muss größer oder gleich {1} und kleiner oder gleich {2} sein\",\n numericMin: \"'{0}' muss größer oder gleich {1} sein\",\n numericMax: \"'{0}' muss kleiner oder gleich {1} sein\",\n invalidEmail: \"Bitte geben Sie eine gültige E-Mail-Adresse ein.\",\n invalidExpression: \"Der Ausdruck: {0} muss den Wert 'wahr' zurückgeben.\",\n urlRequestError: \"Ein Netzwerkdienst hat folgenden Fehler zurückgegeben '{0}'. {1}\",\n urlGetChoicesError: \"Eine Netzwerkdienst hat ungültige Daten zurückgegeben\",\n exceedMaxSize: \"Die Datei darf nicht größer als {0} sein.\",\n otherRequiredError: \"Bitte geben Sie einen Wert an.\",\n uploadingFile: \"Bitte warten Sie bis der Upload Ihrer Dateien abgeschlossen ist.\",\n loadingFile: \"Wird hochgeladen...\",\n chooseFile: \"Datei(en) auswählen...\",\n noFileChosen: \"Keine Datei ausgewählt\",\n confirmDelete: \"Wollen Sie den Eintrag löschen?\",\n keyDuplicationError: \"Dieser Wert muss einmalig sein.\",\n addColumn: \"Spalte hinzufügen\",\n addRow: \"Zeile hinzufügen\",\n removeRow: \"Entfernen\",\n addPanel: \"Neu hinzufügen\",\n removePanel: \"Entfernen\",\n choices_Item: \"Element\",\n matrix_column: \"Spalte\",\n matrix_row: \"Zeile\",\n savingData: \"Die Ergebnisse werden auf dem Server gespeichert...\",\n savingDataError: \"Es ist ein Fehler aufgetreten. Die Ergebnisse konnten nicht gespeichert werden.\",\n savingDataSuccess: \"Die Ergebnisse wurden gespeichert!\",\n saveAgainButton: \"Erneut absenden\",\n timerMin: \"Min.\",\n timerSec: \"Sek.\",\n timerSpentAll: \"Sie waren {0} auf dieser Seite und brauchten insgesamt {1}.\",\n timerSpentPage: \"Sie waren {0} auf dieser Seite.\",\n timerSpentSurvey: \"Sie haben insgesamt {0} gebraucht.\",\n timerLimitAll: \"Sie waren {0} von {1} auf dieser Seite und brauchten insgesamt {2} von {3}.\",\n timerLimitPage: \"Sie waren {0} von {1} auf dieser Seite.\",\n timerLimitSurvey: \"Sie haben insgesamt {0} von {1} gebraucht.\",\n cleanCaption: \"Alles löschen\",\n clearCaption: \"Auswahl entfernen\",\n chooseFileCaption: \"Datei auswählen\",\n removeFileCaption: \"Datei löschen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nein\",\n confirmRemoveFile: \"Sind Sie sicher, dass Sie diese Datei löschen möchten: {0}?\",\n confirmRemoveAllFiles: \"Sind Sie sicher, dass Sie alle Dateien löschen möchten?\",\n questionTitlePatternText: \"Fragentitel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"de\"] = germanSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"de\"] = \"deutsch\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/greek.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/greek.ts ***!\n \\***********************************/\n/*! exports provided: greekSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"greekSurveyStrings\", function() { return greekSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created by https://github.com/agelospanagiotakis\n\nvar greekSurveyStrings = {\n pagePrevText: \"Προηγούμενο\",\n pageNextText: \"Επόμενο\",\n completeText: \"Ολοκλήρωση\",\n previewText: \"Προεπισκόπηση\",\n editText: \"Επεξεργασία\",\n startSurveyText: \"Αρχή\",\n otherItemText: \"Άλλο (παρακαλώ διευκρινίστε)\",\n noneItemText: \"Κανένας\",\n selectAllItemText: \"Επιλογή όλων\",\n progressText: \"Σελίδα {0} από {1}\",\n panelDynamicProgressText: \"Εγγραφή {0} από {1}\",\n questionsProgressText: \"Απαντήθηκαν {0} / {1} ερωτήσεις\",\n emptySurvey: \"Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.\",\n completingSurvey: \"Ευχαριστούμε για την συμπλήρωση αυτού του ερωτηματολογίου!\",\n completingSurveyBefore: \"Τα αρχεία μας δείχνουν ότι έχετε ήδη ολοκληρώσει αυτήν την έρευνα.\",\n loadingSurvey: \"Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...\",\n optionsCaption: \"Επιλέξτε...\",\n value: \"αξία\",\n requiredError: \"Παρακαλώ απαντήστε στην ερώτηση.\",\n requiredErrorInPanel: \"Απαντήστε σε τουλάχιστον μία ερώτηση.\",\n requiredInAllRowsError: \"Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.\",\n numericError: \"Η τιμή πρέπει να είναι αριθμητική.\",\n textMinLength: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.\",\n textMaxLength: \"Εισαγάγετε λιγότερους από {0} χαρακτήρες.\",\n textMinMaxLength: \"Εισαγάγετε περισσότερους από {0} και λιγότερους από {1} χαρακτήρες.\",\n minRowCountError: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.\",\n minSelectError: \"Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.\",\n maxSelectError: \"Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.\",\n numericMinMax: \"Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}\",\n numericMin: \"Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}\",\n numericMax: \"Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}\",\n invalidEmail: \"Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.\",\n invalidExpression: \"Η έκφραση: {0} θα πρέπει να επιστρέψει 'true'.\",\n urlRequestError: \"Η αίτηση επέστρεψε σφάλμα '{0}'. {1}\",\n urlGetChoicesError: \"Η αίτηση επέστρεψε κενά δεδομένα ή η ιδιότητα 'μονοπάτι/path' είναι εσφαλμένη\",\n exceedMaxSize: \"Το μέγεθος δεν μπορεί να υπερβαίνει τα {0}.\",\n otherRequiredError: \"Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.\",\n uploadingFile: \"Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.\",\n loadingFile: \"Φόρτωση...\",\n chooseFile: \"Επιλογή αρχείων ...\",\n noFileChosen: \"Δεν έχει επιλεγεί αρχείο\",\n confirmDelete: \"Θέλετε να διαγράψετε την εγγραφή;\",\n keyDuplicationError: \"Αυτή η τιμή πρέπει να είναι μοναδική.\",\n addColumn: \"Προσθήκη στήλης\",\n addRow: \"Προσθήκη γραμμής\",\n removeRow: \"Αφαίρεση\",\n addPanel: \"Προσθεσε νεο\",\n removePanel: \"Αφαιρώ\",\n choices_Item: \"είδος\",\n matrix_column: \"Στήλη\",\n matrix_row: \"Σειρά\",\n savingData: \"Τα αποτελέσματα αποθηκεύονται στον διακομιστή ...\",\n savingDataError: \"Παρουσιάστηκε σφάλμα και δεν ήταν δυνατή η αποθήκευση των αποτελεσμάτων.\",\n savingDataSuccess: \"Τα αποτελέσματα αποθηκεύτηκαν με επιτυχία!\",\n saveAgainButton: \"Προσπάθησε ξανά\",\n timerMin: \"ελάχ\",\n timerSec: \"δευτ\",\n timerSpentAll: \"Έχετε δαπανήσει {0} σε αυτήν τη σελίδα και {1} συνολικά.\",\n timerSpentPage: \"Έχετε ξοδέψει {0} σε αυτήν τη σελίδα.\",\n timerSpentSurvey: \"Έχετε ξοδέψει συνολικά {0}.\",\n timerLimitAll: \"Έχετε δαπανήσει {0} από {1} σε αυτήν τη σελίδα και {2} από {3} συνολικά.\",\n timerLimitPage: \"Έχετε ξοδέψει {0} από {1} σε αυτήν τη σελίδα.\",\n timerLimitSurvey: \"Έχετε ξοδέψει {0} από {1} συνολικά.\",\n cleanCaption: \"ΚΑΘΑΡΗ\",\n clearCaption: \"Σαφή\",\n chooseFileCaption: \"Επιλέξτε το αρχείο\",\n removeFileCaption: \"Καταργήστε αυτό το αρχείο\",\n booleanCheckedLabel: \"Ναί\",\n booleanUncheckedLabel: \"Οχι\",\n confirmRemoveFile: \"Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτό το αρχείο: {0};\",\n confirmRemoveAllFiles: \"Είστε βέβαιοι ότι θέλετε να καταργήσετε όλα τα αρχεία;\",\n questionTitlePatternText: \"Τίτλος ερώτησης\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"gr\"] = greekSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"gr\"] = \"ελληνικά\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hebrew.ts\":\n/*!************************************!*\\\n !*** ./src/localization/hebrew.ts ***!\n \\************************************/\n/*! exports provided: hebrewSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hebrewSurveyStrings\", function() { return hebrewSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hebrewSurveyStrings = {\n pagePrevText: \"אחורה\",\n pageNextText: \"קדימה\",\n completeText: \"סיום\",\n previewText: \"תצוגה מקדימה\",\n editText: \"לַעֲרוֹך\",\n startSurveyText: \"הַתחָלָה\",\n otherItemText: \"אחר (נא לתאר)\",\n noneItemText: \"אף אחד\",\n selectAllItemText: \"בחר הכל\",\n progressText: \"דף {1} מתוך {0}\",\n panelDynamicProgressText: \"הקלטה {0} מתוך {1}\",\n questionsProgressText: \"ענה על שאלות\",\n emptySurvey: \"אין שאלות\",\n completingSurvey: \"תודה על מילוי השאלון!\",\n completingSurveyBefore: \"הרשומות שלנו מראות שכבר סיימת את הסקר הזה.\",\n loadingSurvey: \"טעינה מהשרת...\",\n optionsCaption: \"בחר...\",\n value: \"ערך\",\n requiredError: \"אנא השב על השאלה\",\n requiredErrorInPanel: \"אנא ענה לפחות על שאלה אחת.\",\n requiredInAllRowsError: \"אנא ענה על שאלות בכל השורות.\",\n numericError: \"התשובה צריכה להיות מספר.\",\n textMinLength: \"הזן לפחות {0} תווים.\",\n textMaxLength: \"הזן פחות מ- {0} תווים.\",\n textMinMaxLength: \"הזן יותר מ- {0} ופחות מ- {1} תווים.\",\n minRowCountError: \"אנא מלא לפחות {0} שורות.\",\n minSelectError: \"בחר לפחות {0} אפשרויות.\",\n maxSelectError: \"בחר עד {0} אפשרויות.\",\n numericMinMax: \"'{0}' חייב להיות שווה או גדול מ {1}, ושווה ל- {2} או פחות מ- {}}\",\n numericMin: \"'{0}' חייב להיות שווה או גדול מ {1}\",\n numericMax: \"'{0}' חייב להיות שווה או קטן מ {1}\",\n invalidEmail: 'הזן כתובת דוא\"ל חוקית.',\n invalidExpression: \"הביטוי: {0} צריך להחזיר 'אמת'.\",\n urlRequestError: \"הבקשה החזירה את השגיאה '{0}'. {1}\",\n urlGetChoicesError: \"הבקשה החזירה נתונים ריקים או שהמאפיין 'נתיב' שגוי\",\n exceedMaxSize: \"גודל הקובץ לא יעלה על {0}.\",\n otherRequiredError: 'נא להזין נתונים בשדה \"אחר\"',\n uploadingFile: \"הקובץ שלך נטען. המתן מספר שניות ונסה שוב.\",\n loadingFile: \"טוען...\",\n chooseFile: \"לבחור קבצים...\",\n noFileChosen: \"לא נבחר קובץ\",\n confirmDelete: \"האם אתה רוצה למחוק את הרשומה?\",\n keyDuplicationError: \"ערך זה צריך להיות ייחודי.\",\n addColumn: \"הוסף עמודה\",\n addRow: \"להוסיף שורה\",\n removeRow: \"לְהַסִיר\",\n addPanel: \"הוסף חדש\",\n removePanel: \"לְהַסִיר\",\n choices_Item: \"פריט\",\n matrix_column: \"טור\",\n matrix_row: \"שׁוּרָה\",\n savingData: \"התוצאות נשמרות בשרת ...\",\n savingDataError: \"אירעה שגיאה ולא הצלחנו לשמור את התוצאות.\",\n savingDataSuccess: \"התוצאות נשמרו בהצלחה!\",\n saveAgainButton: \"נסה שוב\",\n timerMin: \"דקה\",\n timerSec: \"שניות\",\n timerSpentAll: \"הוצאת {0} בדף זה ובסך הכל {1}.\",\n timerSpentPage: \"הוצאת {0} בדף זה.\",\n timerSpentSurvey: \"הוצאת סכום כולל של {0}.\",\n timerLimitAll: \"הוצאת {0} מתוך {1} בדף זה ו- {2} מתוך {3} בסך הכל.\",\n timerLimitPage: \"הוצאת {0} מתוך {1} בדף זה.\",\n timerLimitSurvey: \"הוצאת סכום כולל של {0} מתוך {1}.\",\n cleanCaption: \"לְנַקוֹת\",\n clearCaption: \"ברור\",\n chooseFileCaption: \"בחר קובץ\",\n removeFileCaption: \"הסר קובץ זה\",\n booleanCheckedLabel: \"כן\",\n booleanUncheckedLabel: \"לא\",\n confirmRemoveFile: \"האם אתה בטוח שברצונך להסיר קובץ זה: {0}?\",\n confirmRemoveAllFiles: \"האם אתה בטוח שברצונך להסיר את כל הקבצים?\",\n questionTitlePatternText: \"כותרת שאלה\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"he\"] = hebrewSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"he\"] = \"עברית\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hindi.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/hindi.ts ***!\n \\***********************************/\n/*! exports provided: hindiStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hindiStrings\", function() { return hindiStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hindiStrings = {\n pagePrevText: \"पिछला\",\n pageNextText: \"अगला\",\n completeText: \"पूरा\",\n previewText: \"पूर्वसमीक्षा\",\n editText: \"संपादित\",\n startSurveyText: \"शुरू\",\n otherItemText: \"दूसरा (वर्णन करें)\",\n noneItemTex: \"कोई नहीं\",\n selectAllItemText: \"सभी का चयन करें\",\n progressText: \"पृष्ठ 1 में से 0\",\n panelDynamicProgressText: \" दस्तावेज {1} के {0}\",\n questionsProgressText: \"{1} सवालों में से {0} के जवाब दिए\",\n emptySurvey: \"सर्वेक्षण में कोई दृश्यमान पृष्ठ या प्रश्न नहीं है\",\n completingSurvey: \"सर्वेक्षण को पूरा करने के लिए धन्यवाद\",\n completingSurveyBefore: \" हमारे रिकॉर्ड बताते हैं कि आप पहले ही इस सर्वेक्षण को पूरा कर चुके हैं\",\n loadingSurvey: \"सर्वेक्षण खुल रहा है.…\",\n optionsCaption: \"चुनें\",\n value: \"मूल्य\",\n requiredError: \"कृपया प्रश्न का उत्तर दें\",\n requiredErrorInPanel: \"कृपया कम से कम एक प्रश्न का उत्तर दें\",\n requiredInAllRowsError: \"कृपया सभी पंक्तियों में सवालों के जवाब दें\",\n numericError: \"मूल्य संख्यात्मक होना चाहिए\",\n textMinLength: \"कृपया कम से कम {0} वर्ण दर्ज करें\",\n textMaxLength: \"कृपया {0} से कम वर्ण दर्ज करें\",\n textMinMaxLength: \"कृपया {0} से अधिक और {1} से कम पात्रों में प्रवेश करें\",\n minRowCountError: \"कृपया कम से कम {0} पंक्तियों को भरें\",\n minSelectError: \"कृपया कम से कम {0} विकल्प का चयन करें\",\n maxSelectError: \"कृपया {0} विकल्पों से अधिक नहीं चुनें\",\n numericMinMax: \"'{0}' {1} से बराबर या अधिक और {2} से बराबर या कम होना चाहिए\",\n numericMin: \"'{0}' {1} से बराबर या अधिक होना चाहिए\",\n numericMax: \"'{0}' {1} से बराबर या कम होना चाहिए\",\n invalidEmail: \"कृपया एक वैध ईमेल पता दर्ज करें\",\n invalidExpression: \"अभिव्यक्ति: {0} को ' सच ' लौटना चाहिए\",\n urlRequestError: \"अनुरोध लौटाया त्रुटि '{0}' . {1}\",\n urlGetChoicesError: \"अनुरोध ने खाली डेटा वापस कर दिया है \",\n exceedMaxSize: \"फ़ाइल का आकार {0} से अधिक नहीं होना चाहिए या फिर 'पाथ' प्रॉपर्टी गलत है\",\n otherRequiredError: \"कृपया दूसरा मूल्य दर्ज करें\",\n uploadingFile: \"आपकी फाइल अपलोड हो रही है। कृपया कई सेकंड इंतजार करें और फिर से प्रयास करें।\",\n loadingFile: \"लोडिंग\",\n chooseFile: \"फ़ाइल चुनें\",\n noFileChosen: \"कोई फाइल नहीं चुनी गई\",\n confirmDelete: \"क्या आप रिकॉर्ड हटाना चाहते हैं\",\n keyDuplicationError: \"यह मान अनोखा होना चाहिए\",\n addColumn: \"कॉलम जोड़ें\",\n addRow: \"पंक्ति जोड़ें\",\n removeRow: \"हटाए\",\n addPanel: \"नया जोड़ें\",\n removePanel: \"हटाए\",\n choices_Item: \"मद\",\n matrix_column: \"कॉलम\",\n matrix_row: \"पंक्ति\",\n savingData: \"परिणाम सर्वर पर सेव हो रहे हैं\",\n savingDataError: \"एक त्रुटि हुई और हम परिणामों को नहीं सेव कर सके\",\n savingDataSuccess: \"परिणाम सफलतापूर्वक सेव हो गए\",\n saveAgainButton: \"फिर कोशिश करो\",\n timerMin: \"मिनट\",\n timerSec: \"सेकंड\",\n timerSpentAll: \"आपने इस पृष्ठ पर {0} खर्च किए हैं और कुल {1}\",\n timerSpentPage: \"आपने इस पृष्ठ पर {0} खर्च किया है\",\n timerSpentSurvey: \"आपने कुल {0} खर्च किया है\",\n timerLimitAll: \"आपने इस पृष्ठ पर {1} की {0} और कुल {3} की {2} खर्च की है।\",\n timerLimitPage: \"आपने इस पृष्ठ पर {1} का {0} खर्च किया है\",\n timerLimitSurvey: \"आपने कुल {1} की {0} खर्च की है\",\n cleanCaption: \"साफ\",\n clearCaption: \"स्पष्ट\",\n chooseFileCaption: \"फ़ाइल चुनें\",\n removeFileCaption: \"इस फाइल को निकालें\",\n booleanCheckedLabel: \"हाँ\",\n booleanUncheckedLabel: \"नहीं\",\n confirmRemoveFile: \"क्या आप सुनिश्चित हैं कि आप इस फ़ाइल को हटाना चाहते हैं: {0}\",\n confirmRemoveAllFiles: \"क्या आप सुनिश्चित हैं कि आप सभी फ़ाइलों को हटाना चाहते हैं\",\n questionTitlePatternText: \"प्रश्न का शीर्षक\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hi\"] = hindiStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hi\"] = \"hindi\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hungarian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/hungarian.ts ***!\n \\***************************************/\n/*! exports provided: hungarianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hungarianSurveyStrings\", function() { return hungarianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hungarianSurveyStrings = {\n pagePrevText: \"Vissza\",\n pageNextText: \"Tovább\",\n completeText: \"Kész\",\n previewText: \"Előnézet\",\n editText: \"Szerkesztés\",\n startSurveyText: \"Rajt\",\n otherItemText: \"Egyéb (adja meg)\",\n noneItemText: \"Egyik sem\",\n selectAllItemText: \"Mindet kiválaszt\",\n progressText: \"{0}./{1} oldal\",\n panelDynamicProgressText: \"{0} / {1} rekord\",\n questionsProgressText: \"Válaszolt kérdések: {0} / {1}\",\n emptySurvey: \"There is no visible page or question in the survey.\",\n completingSurvey: \"Köszönjük, hogy kitöltötte felmérésünket!\",\n completingSurveyBefore: \"Már kitöltötte a felmérést.\",\n loadingSurvey: \"Felmérés betöltése...\",\n optionsCaption: \"Válasszon...\",\n value: \"érték\",\n requiredError: \"Kérjük, válaszolja meg ezt a kérdést!\",\n requiredErrorInPanel: \"Kérjük, válaszoljon legalább egy kérdésre.\",\n requiredInAllRowsError: \"Kérjük adjon választ minden sorban!\",\n numericError: \"Az érték szám kell, hogy legyen!\",\n textMinLength: \"Adjon meg legalább {0} karaktert!\",\n textMaxLength: \"Legfeljebb {0} karaktert adjon meg!\",\n textMinMaxLength: \"Adjon meg legalább {0}, de legfeljebb {1} karaktert!\",\n minRowCountError: \"Töltsön ki minimum {0} sort!\",\n minSelectError: \"Válasszon ki legalább {0} lehetőséget!\",\n maxSelectError: \"Ne válasszon többet, mint {0} lehetőség!\",\n numericMinMax: \"'{0}' legyen nagyobb, vagy egyenlő, mint {1} és kisebb, vagy egyenlő, mint {2}!\",\n numericMin: \"'{0}' legyen legalább {1}!\",\n numericMax: \"The '{0}' ne legyen nagyobb, mint {1}!\",\n invalidEmail: \"Adjon meg egy valós email címet!\",\n invalidExpression: \"A következő kifejezés: {0} vissza kell adnia az „igaz” értéket.\",\n urlRequestError: \"A lekérdezés hibával tért vissza: '{0}'. {1}\",\n urlGetChoicesError: \"A lekérdezés üres adattal tért vissza, vagy a 'path' paraméter helytelen.\",\n exceedMaxSize: \"A méret nem lehet nagyobb, mint {0}.\",\n otherRequiredError: \"Adja meg az egyéb értéket!\",\n uploadingFile: \"Feltöltés folyamatban. Várjon pár másodpercet, majd próbálja újra.\",\n loadingFile: \"Betöltés...\",\n chooseFile: \"Fájlok kiválasztása ...\",\n noFileChosen: \"Nincs kiválasztva fájl\",\n confirmDelete: \"Törli ezt a rekordot?\",\n keyDuplicationError: \"Az értéknek egyedinek kell lennie.\",\n addColumn: \"Oszlop hozzáadása\",\n addRow: \"Sor hozzáadása\",\n removeRow: \"Eltávolítás\",\n addPanel: \"Új hozzáadása\",\n removePanel: \"Eltávolítás\",\n choices_Item: \"elem\",\n matrix_column: \"Oszlop\",\n matrix_row: \"Sor\",\n savingData: \"Eredmény mentése a szerverre...\",\n savingDataError: \"Egy hiba folytán nem tudtuk elmenteni az eredményt.\",\n savingDataSuccess: \"Eredmény sikeresen mentve!\",\n saveAgainButton: \"Próbálja újra\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Ön {0} összeget költött ezen az oldalon, és összesen {1}.\",\n timerSpentPage: \"{0} összeget költött ezen az oldalon.\",\n timerSpentSurvey: \"Összesen {0} költött.\",\n timerLimitAll: \"Ön {0} / {1} összeget költött ezen az oldalon, és összesen {2} / {3}.\",\n timerLimitPage: \"Ön {0} / {1} összeget költött ezen az oldalon.\",\n timerLimitSurvey: \"Összesen {0} / {1} összeget költött el.\",\n cleanCaption: \"Tiszta\",\n clearCaption: \"Egyértelmű\",\n chooseFileCaption: \"Válassz fájlt\",\n removeFileCaption: \"Távolítsa el ezt a fájlt\",\n booleanCheckedLabel: \"Igen\",\n booleanUncheckedLabel: \"Nem\",\n confirmRemoveFile: \"Biztosan eltávolítja ezt a fájlt: {0}?\",\n confirmRemoveAllFiles: \"Biztosan el akarja távolítani az összes fájlt?\",\n questionTitlePatternText: \"Kérdés címe\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hu\"] = hungarianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hu\"] = \"magyar\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/icelandic.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/icelandic.ts ***!\n \\***************************************/\n/*! exports provided: icelandicSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icelandicSurveyStrings\", function() { return icelandicSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar icelandicSurveyStrings = {\n pagePrevText: \"Tilbaka\",\n pageNextText: \"Áfram\",\n completeText: \"Lokið\",\n previewText: \"Forskoða\",\n editText: \"Breyta\",\n startSurveyText: \"Byrjaðu\",\n otherItemText: \"Hinn (skýring)\",\n noneItemText: \"Enginn\",\n selectAllItemText: \"Velja allt\",\n progressText: \"Síða {0} of {1}\",\n panelDynamicProgressText: \"Taka upp {0} af {1}\",\n questionsProgressText: \"Svarað {0} / {1} spurningum\",\n emptySurvey: \"Það er enginn síða eða spurningar í þessari könnun.\",\n completingSurvey: \"Takk fyrir að fyllja út þessa könnun!\",\n completingSurveyBefore: \"Skrár okkar sýna að þú hefur þegar lokið þessari könnun.\",\n loadingSurvey: \"Könnunin er að hlaða...\",\n optionsCaption: \"Veldu...\",\n value: \"gildi\",\n requiredError: \"Vinsamlegast svarið spurningunni.\",\n requiredErrorInPanel: \"Vinsamlegast svaraðu að minnsta kosti einni spurningu.\",\n requiredInAllRowsError: \"Vinsamlegast svarið spurningum í öllum röðum.\",\n numericError: \"Þetta gildi verður að vera tala.\",\n textMinLength: \"Það ætti að vera minnst {0} tákn.\",\n textMaxLength: \"Það ætti að vera mest {0} tákn.\",\n textMinMaxLength: \"Það ætti að vera fleiri en {0} og færri en {1} tákn.\",\n minRowCountError: \"Vinsamlegast fyllið úr að minnsta kosti {0} raðir.\",\n minSelectError: \"Vinsamlegast veljið að minnsta kosti {0} möguleika.\",\n maxSelectError: \"Vinsamlegast veljið ekki fleiri en {0} möguleika.\",\n numericMinMax: \"'{0}' ætti að vera meira en eða jafnt og {1} minna en eða jafnt og {2}\",\n numericMin: \"{0}' ætti að vera meira en eða jafnt og {1}\",\n numericMax: \"'{0}' ætti að vera minna en eða jafnt og {1}\",\n invalidEmail: \"Vinsamlegast sláið inn gilt netfang.\",\n invalidExpression: \"Tjáningin: {0} ætti að skila 'satt'.\",\n urlRequestError: \"Beiðninn skilaði eftirfaranadi villu '{0}'. {1}\",\n urlGetChoicesError: \"Beiðninng skilaði engum gögnum eða slóðinn var röng\",\n exceedMaxSize: \"Skráinn skal ekki vera stærri en {0}.\",\n otherRequiredError: \"Vinamlegast fyllið út hitt gildið.\",\n uploadingFile: \"Skráinn þín var send. Vinsamlegast bíðið í nokkrar sekúndur og reynið aftur.\",\n loadingFile: \"Hleður ...\",\n chooseFile: \"Veldu skrár ...\",\n noFileChosen: \"Engin skrá valin\",\n confirmDelete: \"Viltu eyða skránni?\",\n keyDuplicationError: \"Þetta gildi ætti að vera einstakt.\",\n addColumn: \"Bæta við dálki\",\n addRow: \"Bæta við röð\",\n removeRow: \"Fjarlægja\",\n addPanel: \"Bæta við nýju\",\n removePanel: \"Fjarlægðu\",\n choices_Item: \"hlutur\",\n matrix_column: \"Dálkur\",\n matrix_row: \"Röð\",\n savingData: \"Niðurstöðurnar eru að spara á netþjóninum ... \",\n savingDataError: \"Villa kom upp og við gátum ekki vistað niðurstöðurnar.\",\n savingDataSuccess: \"Árangurinn var vistaður með góðum árangri!\",\n saveAgainButton: \"Reyndu aftur\",\n timerMin: \"mín\",\n timerSec: \"sek\",\n timerSpentAll: \"Þú hefur eytt {0} á þessari síðu og {1} samtals.\",\n timerSpentPage: \"Þú hefur eytt {0} á þessari síðu.\",\n timerSpentSurvey: \"Þú hefur eytt {0} samtals.\",\n timerLimitAll: \"Þú hefur eytt {0} af {1} á þessari síðu og {2} af {3} samtals.\",\n timerLimitPage: \"Þú hefur eytt {0} af {1} á þessari síðu.\",\n timerLimitSurvey: \"Þú hefur eytt {0} af {1} samtals.\",\n cleanCaption: \"Hreint\",\n clearCaption: \"Hreinsa\",\n chooseFileCaption: \"Veldu skrá\",\n removeFileCaption: \"Fjarlægðu þessa skrá\",\n booleanCheckedLabel: \"Já\",\n booleanUncheckedLabel: \"Nei\",\n confirmRemoveFile: \"Ertu viss um að þú viljir fjarlægja þessa skrá: {0}?\",\n confirmRemoveAllFiles: \"Ertu viss um að þú viljir fjarlægja allar skrár?\",\n questionTitlePatternText: \"Spurningartitill\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"is\"] = icelandicSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"is\"] = \"íslenska\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/indonesian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/indonesian.ts ***!\n \\****************************************/\n/*! exports provided: indonesianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"indonesianStrings\", function() { return indonesianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar indonesianStrings = {\n pagePrevText: \"Sebelumnya\",\n pageNextText: \"Selanjutnya\",\n completeText: \"Selesai\",\n previewText: \"Pratinjau\",\n editText: \"Sunting\",\n startSurveyText: \"Mulai\",\n otherItemText: \"Lainnya (jelaskan)\",\n noneItemText: \"Tidak Ada\",\n selectAllItemText: \"Pilih Semua\",\n progressText: \"Halaman {0} dari {1}\",\n panelDynamicProgressText: \"Rekam {0} dari {1}\",\n questionsProgressText: \"Menjawab pertanyaan {0} / {1}\",\n emptySurvey: \"Tidak ada halaman atau pertanyaan dalam survei.\",\n completingSurvey: \"Terima kasih telah menyelesaikan survei!\",\n completingSurveyBefore: \"Catatan kami menunjukkan bahwa Anda telah menyelesaikan survei ini.\",\n loadingSurvey: \"Memuat survei...\",\n optionsCaption: \"Pilih...\",\n value: \"nilai\",\n requiredError: \"Silahkan jawab pertanyaan berikut.\",\n requiredErrorInPanel: \"Silahkan jawab setidaknya satu petanyaan.\",\n requiredInAllRowsError: \"Silahkan jawab pertanyaan pada semua baris.\",\n numericError: \"Nilai harus berupa angka.\",\n textMinLength: \"Silahkan masukkan setidaknya {0} karakter.\",\n textMaxLength: \"Silahkan masukkan kurang {0} karakter.\",\n textMinMaxLength: \"PSilahkan masukkan lebih dari {0} dan kurang dari {1} karakter.\",\n minRowCountError: \"Silahkan isi setidaknya {0} baris.\",\n minSelectError: \"Silahkan pilih setidaknya {0} varian.\",\n maxSelectError: \"Silahkan pilih tidak lebih dari {0} varian.\",\n numericMinMax: \"'{0}' harus sama dengan atau lebih dari {1} dan harus sama dengan atau kurang dari {2}\",\n numericMin: \"'{0}' harus sama dengan atau lebih dari {1}\",\n numericMax: \"'{0}' harus sama dengan atau kurang dari {1}\",\n invalidEmail: \"Silahkan masukkan e-mail yang benar.\",\n invalidExpression: \"Ekspresi: {0} harus mengembalikan 'benar'.\",\n urlRequestError: \"Permintaan mengembalikan kesalahan '{0}'. {1}\",\n urlGetChoicesError: \"Permintaan mengembalikan data kosong atau properti 'path' salah.\",\n exceedMaxSize: \"Ukuran berkas tidak boleh melebihi {0}.\",\n otherRequiredError: \"Silahkan masukkan nilai lainnnya.\",\n uploadingFile: \"Berkas Anda sedang diunggah. Silahkan tunggu beberapa saat atau coba lagi.\",\n loadingFile: \"Memuat...\",\n chooseFile: \"Pilih berkas...\",\n noFileChosen: \"Tidak ada file yang dipilih\",\n confirmDelete: \"Apakah Anda ingin menghapus catatan?\",\n keyDuplicationError: \"Nilai harus unik.\",\n addColumn: \"Tambah kolom\",\n addRow: \"Tambah baris\",\n removeRow: \"Hapus\",\n addPanel: \"Tambah baru\",\n removePanel: \"Hapus\",\n choices_Item: \"item\",\n matrix_column: \"Kolom\",\n matrix_row: \"Baris\",\n savingData: \"Hasil sedang disimpan pada server...\",\n savingDataError: \"Kesalahan terjadi dan kami tidak dapat menyimpan hasil.\",\n savingDataSuccess: \"Hasil telah sukses disimpan!\",\n saveAgainButton: \"Coba lagi\",\n timerMin: \"menit\",\n timerSec: \"detik\",\n timerSpentAll: \"Anda telah menghabiskan {0} pada halaman ini dan {1} secara keseluruhan.\",\n timerSpentPage: \"YAnda telah menghabiskan {0} pada halaman ini.\",\n timerSpentSurvey: \"Anda telah menghabiskan {0} secara keseluruhan.\",\n timerLimitAll: \"Anda telah menghabiskan {0} dari {1} pada halaman ini dan {2} dari {3} secara keseluruhan.\",\n timerLimitPage: \"Anda telah menghabiskan {0} dari {1} pada halaman ini.\",\n timerLimitSurvey: \"Anda telah menghabiskan {0} dari {1} secara keseluruhan.\",\n cleanCaption: \"Bersihkan\",\n clearCaption: \"Bersihkan\",\n chooseFileCaption: \"Pilih File\",\n removeFileCaption: \"Hapus berkas ini\",\n booleanCheckedLabel: \"Iya\",\n booleanUncheckedLabel: \"Tidak\",\n confirmRemoveFile: \"Anda yakin ingin menghapus file ini: {0}?\",\n confirmRemoveAllFiles: \"Anda yakin ingin menghapus semua file?\",\n questionTitlePatternText: \"Judul pertanyaan\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"id\"] = indonesianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"id\"] = \"bahasa Indonesia\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/italian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/italian.ts ***!\n \\*************************************/\n/*! exports provided: italianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"italianSurveyStrings\", function() { return italianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar italianSurveyStrings = {\n pagePrevText: \"Precedente\",\n pageNextText: \"Successivo\",\n completeText: \"Salva\",\n previewText: \"Anteprima\",\n editText: \"Modifica\",\n startSurveyText: \"Inizio\",\n otherItemText: \"Altro (descrivi)\",\n noneItemText: \"Nessuno\",\n selectAllItemText: \"Seleziona tutti\",\n progressText: \"Pagina {0} di {1}\",\n panelDynamicProgressText: \"Record di {0} di {1}\",\n questionsProgressText: \"Risposte a {0}/{1} domande\",\n emptySurvey: \"Non ci sono pagine o domande visibili nel questionario.\",\n completingSurvey: \"Grazie per aver completato il questionario!\",\n completingSurveyBefore: \"I nostri records mostrano che hai già completato questo questionario.\",\n loadingSurvey: \"Caricamento del questionario in corso...\",\n optionsCaption: \"Scegli...\",\n value: \"valore\",\n requiredError: \"Campo obbligatorio\",\n requiredErrorInPanel: \"Per Favore, rispondi ad almeno una domanda.\",\n requiredInAllRowsError: \"Completare tutte le righe\",\n numericError: \"Il valore deve essere numerico\",\n textMinLength: \"Inserire almeno {0} caratteri\",\n textMaxLength: \"Lunghezza massima consentita {0} caratteri\",\n textMinMaxLength: \"Inserire una stringa con minimo {0} e massimo {1} caratteri\",\n minRowCountError: \"Completare almeno {0} righe.\",\n minSelectError: \"Selezionare almeno {0} varianti.\",\n maxSelectError: \"Selezionare massimo {0} varianti.\",\n numericMinMax: \"'{0}' deve essere uguale o superiore a {1} e uguale o inferiore a {2}\",\n numericMin: \"'{0}' deve essere uguale o superiore a {1}\",\n numericMax: \"'{0}' deve essere uguale o inferiore a {1}\",\n invalidEmail: \"Inserire indirizzo mail valido\",\n invalidExpression: \"L'espressione: {0} dovrebbe tornare 'vero'.\",\n urlRequestError: \"La richiesta ha risposto con un errore '{0}'. {1}\",\n urlGetChoicesError: \"La richiesta ha risposto null oppure il percorso non è corretto\",\n exceedMaxSize: \"Il file non può eccedere {0}\",\n otherRequiredError: \"Inserire il valore 'altro'\",\n uploadingFile: \"File in caricamento. Attendi alcuni secondi e riprova\",\n loadingFile: \"Caricamento...\",\n chooseFile: \"Selezionare file(s)...\",\n noFileChosen: \"Nessun file selezionato\",\n confirmDelete: \"Sei sicuro di voler elminare il record?\",\n keyDuplicationError: \"Questo valore deve essere univoco.\",\n addColumn: \"Aggiungi colonna\",\n addRow: \"Aggiungi riga\",\n removeRow: \"Rimuovi riga\",\n addPanel: \"Aggiungi riga\",\n removePanel: \"Elimina\",\n choices_Item: \"Elemento\",\n matrix_column: \"Colonna\",\n matrix_row: \"Riga\",\n savingData: \"Salvataggio dati sul server...\",\n savingDataError: \"Si è verificato un errore e non è stato possibile salvare i risultati.\",\n savingDataSuccess: \"I risultati sono stati salvati con successo!\",\n saveAgainButton: \"Riprova\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Hai impiegato {0} su questa pagina e {1} in totale.\",\n timerSpentPage: \"Hai impiegato {0} su questa pagina.\",\n timerSpentSurvey: \"Hai impiegato {0} in totale.\",\n timerLimitAll: \"Hai impiegato {0} di {1} su questa pagina e {2} di {3} in totale.\",\n timerLimitPage: \"Hai impiegato {0} di {1} su questa pagina.\",\n timerLimitSurvey: \"Hai impiegato {0} di {1} in totale.\",\n cleanCaption: \"Pulisci\",\n clearCaption: \"Cancella\",\n chooseFileCaption: \"Scegliere il file\",\n removeFileCaption: \"Rimuovere questo file\",\n booleanCheckedLabel: \"Sì\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"Sei sicuro di voler elminare questo file: {0}?\",\n confirmRemoveAllFiles: \"Sei sicuro di voler elminare tutti i files?\",\n questionTitlePatternText: \"Titolo della domanda\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"it\"] = italianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"it\"] = \"italiano\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/japanese.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/japanese.ts ***!\n \\**************************************/\n/*! exports provided: japaneseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"japaneseSurveyStrings\", function() { return japaneseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar japaneseSurveyStrings = {\n pagePrevText: \"前へ\",\n pageNextText: \"次へ\",\n completeText: \"完了\",\n previewText: \"プレビュー\",\n editText: \"編集\",\n startSurveyText: \"スタート\",\n otherItemText: \"その他(説明)\",\n noneItemText: \"なし\",\n selectAllItemText: \"すべて選択\",\n progressText: \"{0}/{1}頁\",\n panelDynamicProgressText: \"{1}の{0}を記録する\",\n questionsProgressText: \"{0}/{1}の質問に回答しました。\",\n emptySurvey: \"この調査に表示できるページや質問はありません\",\n completingSurvey: \"調査を完了してくれてありがとうございました\",\n completingSurveyBefore: \"当社の記録によると、この調査はすでに完了しています。\",\n loadingSurvey: \"調査をダウンロード中\",\n optionsCaption: \"選択\",\n value: \"値打ち\",\n requiredError: \"質問にお答え下さい\",\n requiredErrorInPanel: \"最低でも1つの質問に答えてください。\",\n requiredInAllRowsError: \"質問には全列で回答してください。\",\n numericError: \"数字でご記入下さい\",\n textMinLength: \"{0} 文字以上で入力して下さい\",\n textMaxLength: \"{0}文字以下で入力してください。\",\n textMinMaxLength: \"{0}以上{1}未満の文字を入力してください。\",\n minRowCountError: \"{0}行以上で入力して下さい\",\n minSelectError: \"{0}種類以上を選択して下さい\",\n maxSelectError: \"{0}以上のバリアントを選択しないでください。\",\n numericMinMax: \"{0}は{1}以上であり、{2}以下であることが望ましい。\",\n numericMin: \"'{0}' は同等か{1}より大きくなければなりません\",\n numericMax: \"'{0}' は同等か{1}より小さくなければなりません\",\n invalidEmail: \"有効なメールアドレスをご記入下さい\",\n invalidExpression: \"式は {0}は'true'を返すべきです。\",\n urlRequestError: \"リクエストはエラー '{0}' を返しました。{1}\",\n urlGetChoicesError: \"リクエストが空のデータを返したか、'path' プロパティが正しくありません。\",\n exceedMaxSize: \"ファイルのサイズは{0}を超えてはいけません\",\n otherRequiredError: \"その他の値を入力してください。\",\n uploadingFile: \"ファイルをアップロード中です。しばらくしてから再度お試し下さい\",\n loadingFile: \"読み込み中\",\n chooseFile: \"ファイルを選択\",\n noFileChosen: \"選択されたファイルはありません\",\n confirmDelete: \"レコードを削除しますか?\",\n keyDuplicationError: \"この値は一意でなければなりません。\",\n addColumn: \"列の追加\",\n addRow: \"追加行\",\n removeRow: \"除去\",\n addPanel: \"新規追加\",\n removePanel: \"除去\",\n choices_Item: \"品目\",\n matrix_column: \"コラム\",\n matrix_row: \"行\",\n savingData: \"結果はサーバーに保存されています...。\",\n savingDataError: \"エラーが発生し、結果を保存できませんでした。\",\n savingDataSuccess: \"結果は無事に保存されました\",\n saveAgainButton: \"もう一度試してみてください。\",\n timerMin: \"僅少\",\n timerSec: \"セック\",\n timerSpentAll: \"あなたはこのページに{0}を費やし、合計で{1}を費やしました。\",\n timerSpentPage: \"あなたはこのページに{0}を費やしました。\",\n timerSpentSurvey: \"合計で{0}を使ったことになります。\",\n timerLimitAll: \"このページに{1}のうち{0}を費やし、{3}のうち{2}を合計で費やしました。\",\n timerLimitPage: \"このページで{1}の{0}を使ったことがあります。\",\n timerLimitSurvey: \"合計で{1}の{0}を使ったことがあります。\",\n cleanCaption: \"削除\",\n clearCaption: \"空白\",\n chooseFileCaption: \"ファイルを選択\",\n removeFileCaption: \"このファイルを削除\",\n booleanCheckedLabel: \"噫\",\n booleanUncheckedLabel: \"否\",\n confirmRemoveFile: \"このファイルを削除してもよろしいですか?{0}?\",\n confirmRemoveAllFiles: \"すべてのファイルを削除してもよろしいですか?\",\n questionTitlePatternText: \"質問名\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ja\"] = japaneseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ja\"] = \"日本語\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/kazakh.ts\":\n/*!************************************!*\\\n !*** ./src/localization/kazakh.ts ***!\n \\************************************/\n/*! exports provided: kazakhStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"kazakhStrings\", function() { return kazakhStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar kazakhStrings = {\n pagePrevText: \"Артқа\",\n pageNextText: \"Келесі\",\n completeText: \"Дайын\",\n previewText: \"Алдын ала қарау\",\n editText: \"Редакциялау\",\n startSurveyText: \"Бастау\",\n otherItemText: \"Басқа (өтінеміз, жазыңыз)\",\n noneItemText: \"Жоқ\",\n selectAllItemText: \"Барлығын таңдау\",\n progressText: \"{0} ден {1} бет \",\n panelDynamicProgressText: \"{0} ден {1} жазба\",\n questionsProgressText: \"{0}/{1} сұрақтарға жауап\",\n emptySurvey: \"Бір де бір сұрақ жоқ.\",\n completingSurvey: \"Сауалнаманы толтырғаныңыз үшін рахмет!\",\n completingSurveyBefore: \"Сіз бұл сауалнаманы өтіп қойдыңыз.\",\n loadingSurvey: \"Серверден жүктеу...\",\n optionsCaption: \"Таңдау...\",\n value: \"мәні\",\n requiredError: \"Өтінеміз, сұраққа жауап беріңіз.\",\n requiredErrorInPanel: \"Өтінеміз, кем дегенде бір сұраққа жауап беріңіз.\",\n requiredInAllRowsError: \"Өтінеміз, әрбір жолдың сұрағаны жауап беріңіз.\",\n numericError: \"Жауап сан түрінде болуы керек.\",\n textMinLength: \"Өтінеміз, {0} ден көп таңба енгізіңіз.\",\n textMaxLength: \"Өтінеміз, {0} ден аз таңба енгізіңіз.\",\n textMinMaxLength: \"Өтінеміз, {0} аз және {1} көп таңба енгізіңіз.\",\n minRowCountError: \"Өтінеміз, {0} ден кем емес жол толтырыңыз.\",\n minSelectError: \"Өтінеміз, тым болмаса {0} нұсқа таңдаңыз.\",\n maxSelectError: \"Өтінеміз, {0} нұсқадан көп таңдамаңыз.\",\n numericMinMax: \"'{0}' {1} ден кем емес және {2} ден көп емес болу керек\",\n numericMin: \"'{0}' {1} ден кем емес болу керек\",\n numericMax: \"'{0}' {1} ден көп емес болу керек\",\n invalidEmail: \"Өтінеміз, жарамды электрондық поштаңызды енгізіңіз.\",\n invalidExpression: \"{0} өрнегі 'true' қайтару керек.\",\n urlRequestError: \"Сұратым қателікті қайтарды'{0}'. {1}\",\n urlGetChoicesError: \"Сұратымға жауап бос келді немесе 'path' қасиеті қате көрсетілген \",\n exceedMaxSize: \"Файлдың мөлшері {0} аспау керек.\",\n otherRequiredError: \"Өтінеміз, “Басқа” жолына деректі енгізіңіз\",\n uploadingFile: \"Сіздің файлыңыз жүктеліп жатыр. Бірнеше секунд тосып, қайтадан байқап көріңіз.\",\n loadingFile: \"Жүктеу...\",\n chooseFile: \"Файлдарды таңдаңыз...\",\n noFileChosen: \"Файл таңдалынбады\",\n confirmDelete: \"Сіз жазбаны жоятыныңызға сенімдісіз бе?\",\n keyDuplicationError: \"Бұл мән бірегей болу керек.\",\n addColumn: \"Бағана қосу\",\n addRow: \"Жолды қосу\",\n removeRow: \"Өшіру\",\n addPanel: \"Жаңа қосу\",\n removePanel: \"Өшіру\",\n choices_Item: \"Нұсқа\",\n matrix_column: \"Бағана\",\n matrix_row: \"Жол\",\n savingData: \"Нәтижелер серверде сақталады...\",\n savingDataError: \"Қателік туындады, нәтиже сақталынбады.\",\n savingDataSuccess: \"Нәтиже ойдағыдай сақталды!\",\n saveAgainButton: \"Қайтадан байқап көру\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Сіз бұл бетте {0} кетірдіңіз және барлығы {1}.\",\n timerSpentPage: \"Сіз бұл бетте {0} кетірдіңіз.\",\n timerSpentSurvey: \"Сіз сауалнама кезінде {0} кетірдіңіз.\",\n timerLimitAll: \"Сіз бұл бетте {0} ден {1} кетірдіңіз және {2} ден {3} бүкіл сауалнама үшін.\",\n timerLimitPage: \"Сіз бұл бетте {0} ден {1} кетірдіңіз.\",\n timerLimitSurvey: \"Сіз бүкіл сауалнама үшін {0} ден {1} кетірдіңіз \",\n cleanCaption: \"Тазалау\",\n clearCaption: \"Тазалау\",\n chooseFileCaption: \"Файл таңдаңыз\",\n removeFileCaption: \"Файлды жойыңыз\",\n booleanCheckedLabel: \"Иә\",\n booleanUncheckedLabel: \"Жоқ\",\n confirmRemoveFile: \"Сіз бұл файлды жоятыныңызға сенімдісіз бе: {0}?\",\n confirmRemoveAllFiles: \"Сіз барлық файлдарды жоятыныңызға сенімдісіз бе?\",\n questionTitlePatternText: \"Сұрақтың атауы\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"kk\"] = kazakhStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"kk\"] = \"Kazakh\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/korean.ts\":\n/*!************************************!*\\\n !*** ./src/localization/korean.ts ***!\n \\************************************/\n/*! exports provided: koreanStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"koreanStrings\", function() { return koreanStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar koreanStrings = {\n pagePrevText: \"이전\",\n pageNextText: \"다음\",\n completeText: \"완료\",\n previewText: \"시사\",\n editText: \"편집하다\",\n startSurveyText: \"시작\",\n otherItemText: \"기타(설명)\",\n noneItemText: \"없음\",\n selectAllItemText: \"모두 선택\",\n progressText: \"페이지 {1} 중 {0}\",\n panelDynamicProgressText: \"{0} / {1} 기록\",\n questionsProgressText: \"{0} / {1} 개의 질문에 답변 함\",\n emptySurvey: \"설문지에 보여지는 페이지나 질문이 없습니다\",\n completingSurvey: \"설문 조사를 완료해 주셔서 감사합니다!\",\n completingSurveyBefore: \"기록에 따르면 이미 설문 조사를 마치셨습니다.\",\n loadingSurvey: \"설문조사가 로드중입니다...\",\n optionsCaption: \"선택하십시오...\",\n value: \"값\",\n requiredError: \"질문에 답하시오.\",\n requiredErrorInPanel: \"하나 이상의 질문에 답하십시오.\",\n requiredInAllRowsError: \"모든 행에 있는 질문에 답하십시오.\",\n numericError: \"값은 숫자여야 합니다.\",\n textMinLength: \"답변의 길이는 최소 {0}자여야 입니다.\",\n textMaxLength: \"답변의 길이는 {0}자를 초과 할 수 없습니다.\",\n textMinMaxLength: \"답변의 길이는 {0} - {1}자 사이여야 합니다.\",\n minRowCountError: \"최소 {0}개의 행을 채우십시오\",\n minSelectError: \"최소 {0}개의 변수를 선택하십시오.\",\n maxSelectError: \"최대 {0}개의 변수를 선택하십시오.\",\n numericMinMax: \"'{0}'은 {1}보다 크거나 같고 {2}보다 작거나 같아야합니다.\",\n numericMin: \"'{0}'은 {1}보다 크거나 같아야합니다.\",\n numericMax: \"'{0}'은 {1}보다 작거나 같아야합니다.\",\n invalidEmail: \"올바른 이메일 주소를 입력하십시오.\",\n invalidExpression: \"표현식: {0}은 '참'이어야 합니다.\",\n urlRequestError: \"'{0}'으로 잘못된 요청입니다. {1}\",\n urlGetChoicesError: \"비어있는 데이터를 요청했거나 잘못된 속성의 경로입니다.\",\n exceedMaxSize: \"파일 크기가 {0}을 초과 할 수 없습니다.\",\n otherRequiredError: \"다른 질문을 작성하십시오.\",\n uploadingFile: \"파일 업로드 중입니다. 잠시 후 다시 시도하십시오.\",\n loadingFile: \"로드 중...\",\n chooseFile: \"파일 선택...\",\n noFileChosen: \"선택된 파일이 없습니다\",\n confirmDelete: \"기록을 삭제하시겠습니까?\",\n keyDuplicationError: \" 이 값은 고유해야합니다.\",\n addColumn: \"열 추가\",\n addRow: \"행 추가\",\n removeRow: \"제거\",\n addPanel: \"새롭게 추가\",\n removePanel: \"제거\",\n choices_Item: \"항목\",\n matrix_column: \"열\",\n matrix_row: \"행\",\n savingData: \"결과가 서버에 저장 중입니다...\",\n savingDataError: \"오류가 발생하여 결과를 저장할 수 없습니다.\",\n savingDataSuccess: \"결과가 성공적으로 저장되었습니다!\",\n saveAgainButton: \"다시 시도하십시오\",\n timerMin: \"분\",\n timerSec: \"초\",\n timerSpentAll: \"현재 페이지에서 {0}을 소요해 총 {1}이 걸렸습니다.\",\n timerSpentPage: \"현재 페이지에서 {0]이 걸렸습니다\",\n timerSpentSurvey: \"총 {0}이 걸렸습니다.\",\n timerLimitAll: \"현재 페이지에서 {0}/{1}을 소요해 총 {2}/{3}이 걸렸습니다.\",\n timerLimitPage: \"현재 페이지에서 {0}/{1}이 걸렸습니다.\",\n timerLimitSurvey: \"총 {0}/{1}이 걸렸습니다.\",\n cleanCaption: \"닦기\",\n clearCaption: \"지우기\",\n chooseFileCaption: \"파일을 선택\",\n removeFileCaption: \"이 파일 제거\",\n booleanCheckedLabel: \"예\",\n booleanUncheckedLabel: \"아니\",\n confirmRemoveFile: \"{0} 파일을 제거 하시겠습니까?\",\n confirmRemoveAllFiles: \"모든 파일을 제거 하시겠습니까?\",\n questionTitlePatternText: \"질문 제목\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ko\"] = koreanStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ko\"] = \"한국어\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/latvian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/latvian.ts ***!\n \\*************************************/\n/*! exports provided: latvianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"latvianSurveyStrings\", function() { return latvianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar latvianSurveyStrings = {\n pagePrevText: \"Atpakaļ\",\n pageNextText: \"Tālāk\",\n completeText: \"Pabeigt\",\n previewText: \"Priekšskatījums\",\n editText: \"Rediģēt\",\n startSurveyText: \"Sākt\",\n otherItemText: \"Cits (lūdzu, aprakstiet!)\",\n noneItemText: \"Nav\",\n selectAllItemText: \"Izvēlēties visus\",\n progressText: \"Lappuse {0} no {1}\",\n panelDynamicProgressText: \"Ierakstīt {0} no {1}\",\n questionsProgressText: \"Atbildēja uz jautājumiem {0} / {1}\",\n emptySurvey: \"Nav neviena jautājuma.\",\n completingSurvey: \"Pateicamies Jums par anketas aizpildīšanu!\",\n completingSurveyBefore: \"Mūsu ieraksti liecina, ka jūs jau esat aizpildījis šo aptauju.\",\n loadingSurvey: \"Ielāde no servera...\",\n optionsCaption: \"Izvēlēties...\",\n value: \"value\",\n requiredError: \"Lūdzu, atbildiet uz jautājumu!\",\n requiredErrorInPanel: \"Lūdzu, atbildiet uz vismaz vienu jautājumu.\",\n requiredInAllRowsError: \"Lūdzu, atbildiet uz jautājumiem visās rindās.\",\n numericError: \"Atbildei ir jābūt skaitlim.\",\n textMinLength: \"Lūdzu, ievadiet vismaz {0} simbolus.\",\n textMaxLength: \"Lūdzu, ievadiet mazāk nekā {0} rakstzīmes.\",\n textMinMaxLength: \"Lūdzu, ievadiet vairāk nekā {0} rakstzīmes un mazāk nekā {1} rakstzīmes.\",\n minRowCountError: \"Lūdzu, aizpildiet vismaz {0} rindas.\",\n minSelectError: \"Lūdzu, izvēlieties vismaz {0} variantu.\",\n maxSelectError: \"Lūdzu, izvēlieties ne vairak par {0} variantiem.\",\n numericMinMax: \"'{0}' jābūt vienādam vai lielākam nekā {1}, un vienādam vai mazākam, nekā {2}\",\n numericMin: \"'{0}' jābūt vienādam vai lielākam {1}\",\n numericMax: \"'{0}' jābūt vienādam vai lielākam {1}\",\n invalidEmail: \"Lūdzu, ievadiet patiesu e-pasta adresi!\",\n invalidExpression: \"Izteicienam: {0} jāatgriež “true”.\",\n urlRequestError: \"Pieprasījumā tika atgriezta kļūda “{0}”. {1}\",\n urlGetChoicesError: \"Pieprasījums atgrieza tukšus datus vai rekvizīts “path” ir nepareizs\",\n exceedMaxSize: \"Faila lielums nedrīkst pārsniegt {0}.\",\n otherRequiredError: \"Lūdzu, ievadiet datus laukā 'Cits'\",\n uploadingFile: \"Jūsu fails tiek augšupielādēts. Lūdzu, uzgaidiet vairākas sekundes un mēģiniet vēlreiz.\",\n loadingFile: \"Notiek ielāde ...\",\n chooseFile: \"Izvēlieties failus ...\",\n noFileChosen: \"Nav izvēlēts neviens fails\",\n confirmDelete: \"Vai vēlaties izdzēst ierakstu?\",\n keyDuplicationError: \"Šai vērtībai jābūt unikālai.\",\n addColumn: \"Pievienot kolonnu\",\n addRow: \"Pievienot rindu\",\n removeRow: \"Noņemt\",\n addPanel: \"Pievieno jaunu\",\n removePanel: \"Noņemt\",\n choices_Item: \"lieta\",\n matrix_column: \"Sleja\",\n matrix_row: \"Rinda\",\n savingData: \"Rezultāti tiek saglabāti serverī ...\",\n savingDataError: \"Radās kļūda, un mēs nevarējām saglabāt rezultātus.\",\n savingDataSuccess: \"Rezultāti tika veiksmīgi saglabāti!\",\n saveAgainButton: \"Mēģini vēlreiz\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Šajā lapā esat iztērējis {0} un kopā {1}.\",\n timerSpentPage: \"Šajā lapā esat iztērējis {0}.\",\n timerSpentSurvey: \"Kopā esat iztērējis {0}.\",\n timerLimitAll: \"Šajā lapā esat iztērējis {0} no {1} un kopā {2} no {3}.\",\n timerLimitPage: \"Šajā lapā esat iztērējis {0} no {1}.\",\n timerLimitSurvey: \"Kopā esat iztērējis {0} no {1}.\",\n cleanCaption: \"Tīrs\",\n clearCaption: \"Skaidrs\",\n chooseFileCaption: \"Izvēlēties failu\",\n removeFileCaption: \"Noņemiet šo failu\",\n booleanCheckedLabel: \"Jā\",\n booleanUncheckedLabel: \"Nē\",\n confirmRemoveFile: \"Vai tiešām vēlaties noņemt šo failu: {0}?\",\n confirmRemoveAllFiles: \"Vai tiešām vēlaties noņemt visus failus?\",\n questionTitlePatternText: \"Jautājuma nosaukums\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lv\"] = latvianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lv\"] = \"latviešu\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/lithuanian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/lithuanian.ts ***!\n \\****************************************/\n/*! exports provided: lithuaniaSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lithuaniaSurveyStrings\", function() { return lithuaniaSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar lithuaniaSurveyStrings = {\n pagePrevText: \"Atgal\",\n pageNextText: \"Toliau\",\n completeText: \"Baigti\",\n previewText: \"Peržiūra\",\n editText: \"Redaguoti\",\n startSurveyText: \"Pradėti\",\n otherItemText: \"Kita (įvesti)\",\n noneItemText: \"Nėra\",\n selectAllItemText: \"Pasirinkti visus\",\n progressText: \"Puslapis {0} iš {1}\",\n panelDynamicProgressText: \"Įrašyti {0} iš {1}\",\n questionsProgressText: \"Atsakė į {0} / {1} klausimus\",\n emptySurvey: \"Apklausoje nėra matomo puslapio ar klausimo.\",\n completingSurvey: \"Dėkojame už dalyvavimą apklausoje!\",\n completingSurveyBefore: \"Mūsų įrašai rodo, kad jau atlikote šią apklausą.\",\n loadingSurvey: \"Prašome palaukti...\",\n optionsCaption: \"Pasirinkti...\",\n value: \"reikšmė\",\n requiredError: \"Būtina atsakyti į šį klausimą.\",\n requiredErrorInPanel: \"Būtina atsakyti bent į vieną klausimą.\",\n requiredInAllRowsError: \"Prašome atsakyti į klausimus visose eilutėse.\",\n numericError: \"Turi būti skaičiai.\",\n textMinLength: \"Prašome suvesti bent {0} simbolius.\",\n textMaxLength: \"Prašome suvesti mažiau nei {0} simbolių.\",\n textMinMaxLength: \"Prašome suvesti daugiau nei {0} ir mažiau nei {1} simbolių.\",\n minRowCountError: \"Prašome suvesti ne mažiau nei {0} eilučių.\",\n minSelectError: \"Prašome pasirinkti bent {0} variantų.\",\n maxSelectError: \"Pasirinkite ne daugiau kaip {0} variantus.\",\n numericMinMax: \"'{0}' turi būti lygus arba didesnis nei {1} ir lygus arba mažesnis nei {2}\",\n numericMin: \"'{0}' turėtų būti lygus arba didesnis nei {1}\",\n numericMax: \"'{0}' turėtų būti lygus ar mažesnis už {1}\",\n invalidEmail: \"Prašome įvesti galiojantį elektroninio pašto adresą.\",\n invalidExpression: \"Reikšmė: {0} turi grąžinti 'true'.\",\n urlRequestError: \"Užklausa grąžino klaidą'{0}'. {1}\",\n urlGetChoicesError: \"Užklausa grąžino tuščius duomenis arba 'path' savybė yra neteisinga\",\n exceedMaxSize: \"Failo dydis neturi viršyti {0}.\",\n otherRequiredError: \"Įveskite kitą reikšmę.\",\n uploadingFile: \"Jūsų failas yra keliamas. Palaukite keletą sekundžių ir bandykite dar kartą.\",\n loadingFile: \"Prašome palaukti...\",\n chooseFile: \"Pasirinkti failą(us)...\",\n noFileChosen: \"Nepasirinktas joks failas\",\n confirmDelete: \"Ar norite ištrinti įrašą?\",\n keyDuplicationError: \"Ši reikšmė turėtų būti unikali.\",\n addColumn: \"Pridėti stulpelį\",\n addRow: \"Pridėti eilutę\",\n removeRow: \"Ištrinti\",\n addPanel: \"Pridėti naują\",\n removePanel: \"Ištrinti\",\n choices_Item: \"elementas\",\n matrix_column: \"Stulpelis\",\n matrix_row: \"Eilutė\",\n savingData: \"Rezultatai saugomi serveryje...\",\n savingDataError: \"Įvyko klaida ir mes negalėjome išsaugoti rezultatų.\",\n savingDataSuccess: \"Rezultatai buvo išsaugoti sėkmingai!\",\n saveAgainButton: \"Bandyti dar kartą\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Praleidote {0} šiame puslapyje ir {1} iš viso.\",\n timerSpentPage: \"Praleidote {0} šiame puslapyje.\",\n timerSpentSurvey: \"Praleidote {0} iš viso.\",\n timerLimitAll: \"Praleidote {0} iš {1} šiame puslapyje ir {2} iš {3} iš viso.\",\n timerLimitPage: \"Praleidote {0} iš {1} šiame puslapyje.\",\n timerLimitSurvey: \"Praleidote {0} iš {1} iš viso.\",\n cleanCaption: \"Išvalyti\",\n clearCaption: \"Valyti\",\n chooseFileCaption: \"Pasirinkti failą\",\n removeFileCaption: \"Ištrinti šį failą\",\n booleanCheckedLabel: \"Taip\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Ar tikrai norite pašalinti šį failą: {0}?\",\n confirmRemoveAllFiles: \"Ar tikrai norite pašalinti visus failus?\",\n questionTitlePatternText: \"Klausimo pavadinimas\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lt\"] = lithuaniaSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lt\"] = \"lietuvių\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/macedonian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/macedonian.ts ***!\n \\****************************************/\n/*! exports provided: macedonianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"macedonianSurveyStrings\", function() { return macedonianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar macedonianSurveyStrings = {\n pagePrevText: \"Претходна\",\n pageNextText: \"Следно\",\n completeText: \"Заврши\",\n previewText: \"Преглед\",\n editText: \"Уредување\",\n startSurveyText: \"Започнете\",\n otherItemText: \"Друго (опиши)\",\n noneItemText: \"Ништо\",\n selectAllItemText: \"Селектирај се\",\n progressText: \"Страница {0} од {1}\",\n panelDynamicProgressText: \"Сними {0} од {1}\",\n questionsProgressText: \"Одговорени на {0} / {1} прашања\",\n emptySurvey: \"Нема видлива страница или прашање во истражувањето.\",\n completingSurvey: \"Ви благодариме што го завршивте истражувањето!\",\n completingSurveyBefore: \"Нашите записи покажуваат дека веќе сте го завршиле ова истражување.\",\n loadingSurvey: \"Анкетата се вчитува ...\",\n optionsCaption: \"Изберете ...\",\n value: \"вредност\",\n requiredError: \"Ве молам, одговорете на прашањето.\",\n requiredErrorInPanel: \"Ве молам, одговорете барем на едно прашање.\",\n requiredInAllRowsError: \"Ве молиме, одговорете на прашања во сите редови.\",\n numericError: \"Вредноста треба да биде нумеричка.\",\n minError: \"Вредноста не треба да биде помала од {0}\",\n maxError: \"Вредноста не треба да биде поголема од {0}\",\n textMinLength: \"Внесете најмалку {0} знак/ци.\",\n textMaxLength: \"Внесете не повеќе од {0} знак/ци.\",\n textMinMaxLength: \"Внесете најмалку {0} и не повеќе од {1} знаци.\",\n minRowCountError: \"Пополнете најмалку {0} ред(ови).\",\n minSelectError: \"Ве молиме изберете најмалку {0} варијанта(и).\",\n maxSelectError: \"Изберете не повеќе од {0} варијанта(и).\",\n numericMinMax: \"'{0}' треба да биде најмалку {1} и најмногу {2}\",\n numericMin: \"'{0}' треба да биде најмалку {1}\",\n numericMax: \"'{0}' треба да биде најмногу {1}\",\n invalidEmail: \"Ве молиме внесете валидна е-маил адреса.\",\n invalidExpression: \"Изразот: {0} треба да се врати 'true'.\",\n urlRequestError: \"Барањето врати грешка '{0}'. {1} \",\n urlGetChoicesError: \"Барањето врати празни податоци или својството 'path' е неточно\",\n exceedMaxSize: \"Големината на датотеката не треба да надминува {0}.\",\n otherRequiredError: \"Внесете ја другата вредност.\",\n uploadingFile: \"Вашата датотека се поставува. Ве молиме почекајте неколку секунди и обидете се повторно.\",\n loadingFile: \"Се вчитува ...\",\n chooseFile: \"Изберете датотека (и) ...\",\n noFileChosen: \"Не се избрани датотеки\",\n confirmDelete: \"Дали сакате да го избришете записот?\",\n keyDuplicationError: \"Оваа вредност треба да биде единствена.\",\n addColumn: \"Додај колона\",\n addRow: \"Додади ред\",\n removeRow: \"Отстрани\",\n emptyRowsText: \"Нема редови.\",\n addPanel: \"Додади ново\",\n removePanel: \"Отстрани\",\n choices_Item: \"ставка\",\n matrix_column: \"Колона\",\n matrix_row: \"Ред\",\n savingData: \"Резултатите се зачувуваат на серверот ...\",\n savingDataError: \"Настана грешка и не можевме да ги зачуваме резултатите.\",\n savingDataSuccess: \"Резултатите беа успешно зачувани!\",\n saveAgainButton: \"Обиди се повторно\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Поминавте {0} на оваа страница и вкупно {1}.\",\n timerSpentPage: \"Поминавте {0} на оваа страница.\",\n timerSpentSurvey: \"Вие потрошивте вкупно {0}.\",\n timerLimitAll: \"Поминавте {0} од {1} на оваа страница и {2} од {3} вкупно.\",\n timerLimitPage: \"Поминавте {0} од {1} на оваа страница.\",\n timerLimitSurvey: \"Вие потрошивте вкупно {0} од {1}.\",\n cleanCaption: \"Чисти\",\n clearCaption: \"Да расчисти\",\n chooseFileCaption: \"Изберете датотека\",\n removeFileCaption: \"Отстранете ја оваа датотека\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Не\",\n confirmRemoveFile: \"Дали сте сигурни дека сакате да ја отстраните оваа датотека: {0}?\",\n confirmRemoveAllFiles: \"Дали сте сигурни дека сакате да ги отстраните сите датотеки?\",\n questionTitlePatternText: \"Наслов на прашањето\",\n modalCancelButtonText: \"Откажи\",\n modalApplyButtonText: \"Аплицирај\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"mk\"] = macedonianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"mk\"] = \"Македонски\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/norwegian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/norwegian.ts ***!\n \\***************************************/\n/*! exports provided: norwegianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"norwegianSurveyStrings\", function() { return norwegianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar norwegianSurveyStrings = {\n pagePrevText: \"Forrige\",\n pageNextText: \"Neste\",\n completeText: \"Fullfør\",\n previewText: \"Forhåndsvisning\",\n editText: \"Redigere\",\n startSurveyText: \"Start\",\n otherItemText: \"Annet (beskriv)\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Velg alle\",\n progressText: \"Side {0} av {1}\",\n panelDynamicProgressText: \"Ta opp {0} av {1}\",\n questionsProgressText: \"Besvarte {0} / {1} spørsmål\",\n emptySurvey: \"Det er ingen synlig side eller spørsmål i undersøkelsen.\",\n completingSurvey: \"Takk for at du fullførte undersøkelsen!\",\n completingSurveyBefore: \"Våre data viser at du allerede har gjennomført denne undersøkelsen.\",\n loadingSurvey: \"Undersøkelsen laster...\",\n optionsCaption: \"Velg...\",\n value: \"verdi\",\n requiredError: \"Vennligst svar på spørsmålet.\",\n requiredErrorInPanel: \"Vennligst svar på minst ett spørsmål.\",\n requiredInAllRowsError: \"Vennligst svar på spørsmål i alle rader.\",\n numericError: \"Verdien skal være numerisk.\",\n textMinLength: \"Vennligst skriv inn minst {0} tegn.\",\n textMaxLength: \"Vennligst skriv inn mindre enn {0} tegn.\",\n textMinMaxLength: \"Vennligst skriv inn mer enn {0} og mindre enn {1} tegn.\",\n minRowCountError: \"Vennligst fyll inn minst {0} rader.\",\n minSelectError: \"Vennligst velg minst {0} varianter.\",\n maxSelectError: \"Vennligst ikke velg mer enn {0} varianter.\",\n numericMinMax: \"'{0}' bør være lik eller mer enn {1} og lik eller mindre enn {2}\",\n numericMin: \"'{0}' bør være lik eller mer enn {1}\",\n numericMax: \"'{0}' bør være lik eller mindre enn {1}\",\n invalidEmail: \"Vennligst skriv inn en gyldig e-post adresse.\",\n invalidExpression: \"Uttrykket: {0} skal returnere 'sant'.\",\n urlRequestError: \"Forespørselen returnerte feilen '{0}'. {1}\",\n urlGetChoicesError: \"Forespørselen returnerte tomme data, eller 'sti' -egenskapen er feil\",\n exceedMaxSize: \"Filstørrelsen bør ikke overstige {0}.\",\n otherRequiredError: \"Vennligst skriv inn den andre verdien.\",\n uploadingFile: \"Filen din lastes opp. Vennligst vent noen sekunder og prøv igjen.\",\n loadingFile: \"Laster inn ...\",\n chooseFile: \"Velg fil (er) ...\",\n noFileChosen: \"Ingen fil valgt\",\n confirmDelete: \"Ønsker du å slette posten?\",\n keyDuplicationError: \"Denne verdien skal være unik.\",\n addColumn: \"Legg til kolonne\",\n addRow: \"Legg til rad\",\n removeRow: \"Fjern\",\n addPanel: \"Legg til ny\",\n removePanel: \"Fjerne\",\n choices_Item: \"element\",\n matrix_column: \"Kolonne\",\n matrix_row: \"Rad\",\n savingData: \"Resultatene lagres på serveren ...\",\n savingDataError: \"Det oppsto en feil, og vi kunne ikke lagre resultatene.\",\n savingDataSuccess: \"Resultatene ble lagret!\",\n saveAgainButton: \"Prøv igjen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har tilbrakt {0} på denne siden og {1} totalt.\",\n timerSpentPage: \"Du har tilbrakt {0} på denne siden.\",\n timerSpentSurvey: \"Du har tilbrakt {0} totalt.\",\n timerLimitAll: \"Du har tilbrakt {0} av {1} på denne siden og totalt {2} av {3}.\",\n timerLimitPage: \"Du har tilbrakt {0} av {1} på denne siden.\",\n timerLimitSurvey: \"Du har tilbrakt {0} av {1} totalt.\",\n cleanCaption: \"Rens\",\n clearCaption: \"Klar\",\n chooseFileCaption: \"Velg Fil\",\n removeFileCaption: \"Fjern denne filen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nei\",\n confirmRemoveFile: \"Er du sikker på at du vil fjerne denne filen: {0}?\",\n confirmRemoveAllFiles: \"Er du sikker på at du vil fjerne alle filene?\",\n questionTitlePatternText: \"Spørsmålstittel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"no\"] = norwegianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"no\"] = \"norsk\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/persian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/persian.ts ***!\n \\*************************************/\n/*! exports provided: persianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"persianSurveyStrings\", function() { return persianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar persianSurveyStrings = {\n pagePrevText: \"قبلی\",\n pageNextText: \"بعدی\",\n completeText: \"تکمیل\",\n previewText: \"پیش نمایش\",\n editText: \"ویرایش\",\n startSurveyText: \"شروع\",\n otherItemText: \"دیگر(توضیح)\",\n noneItemText: \"هیچ\",\n selectAllItemText: \"انتخاب همه\",\n progressText: \"صفحه {0} از {1}\",\n panelDynamicProgressText: \"مورد {0} از {1}\",\n questionsProgressText: \"تعداد پاسخ {0}/{1} سوال\",\n emptySurvey: \"صفحه ای یا گزینه ای برای این پرسشنامه موجود نیست.\",\n completingSurvey: \"از شما بابت تکمیل این پرسشنامه متشکریم\",\n completingSurveyBefore: \"به نظر می رسد هم هم اکنون پرسشنامه را تکمیل کرده اید.\",\n loadingSurvey: \"درحال ایجاد پرسشنامه\",\n optionsCaption: \"انتخاب کنید...\",\n value: \"مقدار\",\n requiredError: \"لطفا به سوال پاسخ دهید\",\n requiredErrorInPanel: \"لطفا حداقل به یک سوال پاسخ دهید.\",\n requiredInAllRowsError: \"لطفا سوالات تمام سطرها را پاسخ دهید.\",\n numericError: \"مقدار باید عددی باشد\",\n textMinLength: \"لطفا حداقل {0} حرف وارد کنید\",\n textMaxLength: \"لطفا کمتر از {0} حرف وارد کنید.\",\n textMinMaxLength: \"لطفا بیشتر از {0} حرف و کمتر از {1} حرف وارد کنید.\",\n minRowCountError: \"لطفا حداقل {0} سطر وارد کنید.\",\n minSelectError: \"حداقل {0} انتخاب کنید.\",\n maxSelectError: \"لطفا بیشتر از {0} انتخاب کنید.\",\n numericMinMax: \"'{0}' باید بین {1} و {2} باشد\",\n numericMin: \"'{0}' بزرگتر مساوی {1} باشد\",\n numericMax: \"'{0}' باید کوچکتر یا مساوی {1} باشد\",\n invalidEmail: \"لطفا ایمیل صحیح درج کنید\",\n invalidExpression: \"عبارت: {0} پاسخ باید 'true' باشد.\",\n urlRequestError: \"درخواست با خطا روبرو شد: '{0}'. {1}\",\n urlGetChoicesError: \"درخواست مسیری خالی بازگشت داده یا مسیر درست تنظیم نشده\",\n exceedMaxSize: \"بیشترین حجم مجاز فایل: {0}\",\n otherRequiredError: \"مقدار 'دیگر' را وارد کنید\",\n uploadingFile: \"فایل در حال آیلود است. لطفا صبر کنید.\",\n loadingFile: \"بارگیری...\",\n chooseFile: \"انتخاب فایل(ها)...\",\n noFileChosen: \"هیچ فایلی انتخاب نشده\",\n confirmDelete: \"آیا مایل به حذف این ردیف هستید؟\",\n keyDuplicationError: \"این مقدار باید غیر تکراری باشد\",\n addColumn: \"ستون جدید\",\n addRow: \"سطر جدید\",\n removeRow: \"حذف\",\n addPanel: \"جدید\",\n removePanel: \"حذف\",\n choices_Item: \"آیتم\",\n matrix_column: \"ستون\",\n matrix_row: \"سطر\",\n savingData: \"نتایج در حال ذخیره سازی در سرور است\",\n savingDataError: \"خطایی در ذخیره سازی نتایج رخ داده است\",\n savingDataSuccess: \"نتایج با موفقیت ذخیره شد\",\n saveAgainButton: \"مجدد تلاش کنید\",\n timerMin: \"دقیقه\",\n timerSec: \"ثانیه\",\n timerSpentAll: \"شما مدت {0} در این صفحه و مدت {1} را در مجموع سپری کرده اید.\",\n timerSpentPage: \"شما مدت {0} را در این صفحه سپری کرده اید.\",\n timerSpentSurvey: \"شما مدت {0} را در مجموع سپری کرده اید.\",\n timerLimitAll: \"شما مدت {0} از {1} در این صفحه و مدت {2} از {3} را در مجموع سپری کرده اید.\",\n timerLimitPage: \"شما مدت {0} از {1} را در این صفحه سپری کرده اید.\",\n timerLimitSurvey: \"شما مدت {0} از {1} را در مجموع سپری کرده اید.\",\n cleanCaption: \"پاکسازی\",\n clearCaption: \"خالی کردن\",\n chooseFileCaption: \"انتخاب فایل\",\n removeFileCaption: \"حذف این فایل\",\n booleanCheckedLabel: \"بله\",\n booleanUncheckedLabel: \"خیر\",\n confirmRemoveFile: \"آیا میخواهید این فایل را پاک کنید: {0}?\",\n confirmRemoveAllFiles: \"آیا میخواهید تمام فایل ها را پاک کنید?\",\n questionTitlePatternText: \"عنوان سوال\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fa\"] = persianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fa\"] = \"فارْسِى\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/polish.ts\":\n/*!************************************!*\\\n !*** ./src/localization/polish.ts ***!\n \\************************************/\n/*! exports provided: polishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"polishSurveyStrings\", function() { return polishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar polishSurveyStrings = {\n pagePrevText: \"Wstecz\",\n pageNextText: \"Dalej\",\n completeText: \"Gotowe\",\n previewText: \"Premiera\",\n editText: \"Edycja\",\n startSurveyText: \"Start\",\n otherItemText: \"Inna odpowiedź (wpisz)\",\n noneItemText: \"Brak\",\n selectAllItemText: \"Wybierz wszystkie\",\n progressText: \"Strona {0} z {1}\",\n panelDynamicProgressText: \"Zapis {0} z {1}\",\n questionsProgressText: \"Odpowiedzi na {0}/{1} pytania\",\n emptySurvey: \"Nie ma widocznych pytań.\",\n completingSurvey: \"Dziękujemy za wypełnienie ankiety!\",\n completingSurveyBefore: \"Z naszych zapisów wynika, że wypełniłeś już tę ankietę.\",\n loadingSurvey: \"Trwa wczytywanie ankiety...\",\n optionsCaption: \"Wybierz...\",\n value: \"Wartość\",\n requiredError: \"Proszę odpowiedzieć na to pytanie.\",\n requiredErrorInPanel: \"Proszę odpowiedzieć na co najmniej jedno pytanie.\",\n requiredInAllRowsError: \"Proszę odpowiedzieć na wszystkie pytania.\",\n numericError: \"W tym polu można wpisać tylko liczby.\",\n textMinLength: \"Proszę wpisać co najmniej {0} znaków.\",\n textMaxLength: \"Proszę wpisać mniej niż {0} znaków.\",\n textMinMaxLength: \"Proszę wpisać więcej niż {0} i mniej niż {1} znaków.\",\n minRowCountError: \"Proszę uzupełnić przynajmniej {0} wierszy.\",\n minSelectError: \"Proszę wybrać co najmniej {0} pozycji.\",\n maxSelectError: \"Proszę wybrać nie więcej niż {0} pozycji.\",\n numericMinMax: \"Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}\",\n numericMin: \"Odpowiedź '{0}' powinna być większa lub równa {1}\",\n numericMax: \"Odpowiedź '{0}' powinna być mniejsza lub równa {1}\",\n invalidEmail: \"Proszę podać prawidłowy adres email.\",\n invalidExpression: \"Wyrażenie: {0} powinno wracać 'prawdziwe'.\",\n urlRequestError: \"Żądanie zwróciło błąd '{0}'. {1}\",\n urlGetChoicesError: \"Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa\",\n exceedMaxSize: \"Rozmiar przesłanego pliku nie może przekraczać {0}.\",\n otherRequiredError: \"Proszę podać inną odpowiedź.\",\n uploadingFile: \"Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.\",\n loadingFile: \"Ładowanie...\",\n chooseFile: \"Wybierz plik(i)...\",\n noFileChosen: \"Nie wybrano żadnego pliku\",\n confirmDelete: \"Chcesz skasować nagranie?\",\n keyDuplicationError: \"Ta wartość powinna być wyjątkowa.\",\n addColumn: \"Dodaj kolumnę\",\n addRow: \"Dodaj wiersz\",\n removeRow: \"Usuń\",\n addPanel: \"Dodaj panel\",\n removePanel: \"Usuń\",\n choices_Item: \"element\",\n matrix_column: \"Kolumna\",\n matrix_row: \"Wiersz\",\n savingData: \"Zapisuję wyniki ankiety na serwerze...\",\n savingDataError: \"Wystąpił błąd i wyniki nie mogły zostać zapisane.\",\n savingDataSuccess: \"Wyniki zostały poprawnie zapisane!\",\n saveAgainButton: \"Spróbuj ponownie\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Spędziłeś {0} na tej stronie a w sumie {1}.\",\n timerSpentPage: \"Spędziłeś {0} na tej stronie.\",\n timerSpentSurvey: \"Spędziłeś w sumie {0}.\",\n timerLimitAll: \"Spędziłeś {0} z {1} na tej stronie a w sumie {2} z {3}.\",\n timerLimitPage: \"Spędziłeś {0} z {1} na tej stronie\",\n timerLimitSurvey: \"Spędziłeś {0} z {1}.\",\n cleanCaption: \"Wyczyść\",\n clearCaption: \"Jasne\",\n chooseFileCaption: \"Wybierz plik\",\n removeFileCaption: \"Usuń ten plik\",\n booleanCheckedLabel: \"Tak\",\n booleanUncheckedLabel: \"Nie\",\n confirmRemoveFile: \"Jesteś pewien, że chcesz usunąć ten plik: {0}?\",\n confirmRemoveAllFiles: \"Jesteś pewien, że chcesz usunąć wszystkie pliki?\",\n questionTitlePatternText: \"Tytuł pytania\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pl\"] = polishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pl\"] = \"polski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese-br.ts\":\n/*!*******************************************!*\\\n !*** ./src/localization/portuguese-br.ts ***!\n \\*******************************************/\n/*! exports provided: portugueseBrSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"portugueseBrSurveyStrings\", function() { return portugueseBrSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar portugueseBrSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Próximo\",\n completeText: \"Finalizar\",\n previewText: \"Pré-visualização\",\n editText: \"Editar\",\n startSurveyText: \"Começar\",\n otherItemText: \"Outros (descrever)\",\n noneItemText: \"Nenhum\",\n selectAllItemText: \"Selecionar Todos\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registro {0} de {1}\",\n questionsProgressText: \"Respostas {0}/{1} perguntas\",\n emptySurvey: \"Não há página visível ou pergunta na pesquisa.\",\n completingSurvey: \"Obrigado por finalizar a pesquisa!\",\n completingSurveyBefore: \"Nossos registros mostram que você já finalizou a pesquisa.\",\n loadingSurvey: \"A pesquisa está carregando...\",\n optionsCaption: \"Selecione...\",\n value: \"valor\",\n requiredError: \"Por favor, responda a pergunta.\",\n requiredErrorInPanel: \"Por favor, responda pelo menos uma pergunta.\",\n requiredInAllRowsError: \"Por favor, responda as perguntas em todas as linhas.\",\n numericError: \"O valor deve ser numérico.\",\n textMinLength: \"Por favor, insira pelo menos {0} caracteres.\",\n textMaxLength: \"Por favor, insira menos de {0} caracteres.\",\n textMinMaxLength: \"Por favor, insira mais de {0} e menos de {1} caracteres.\",\n minRowCountError: \"Preencha pelo menos {0} linhas.\",\n minSelectError: \"Selecione pelo menos {0} opções.\",\n maxSelectError: \"Por favor, selecione não mais do que {0} opções.\",\n numericMinMax: \"O '{0}' deve ser igual ou superior a {1} e igual ou menor que {2}\",\n numericMin: \"O '{0}' deve ser igual ou superior a {1}\",\n numericMax: \"O '{0}' deve ser igual ou inferior a {1}\",\n invalidEmail: \"Por favor, informe um e-mail válido.\",\n invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n urlRequestError: \"A requisição retornou o erro '{0}'. {1}\",\n urlGetChoicesError: \"A requisição não retornou dados ou o 'caminho' da requisição não está correto\",\n exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n otherRequiredError: \"Por favor, informe o outro valor.\",\n uploadingFile: \"Seu arquivo está sendo carregado. Por favor, aguarde alguns segundos e tente novamente.\",\n loadingFile: \"Carregando...\",\n chooseFile: \"Selecione o(s) arquivo(s)...\",\n noFileChosen: \"Nenhum arquivo escolhido\",\n confirmDelete: \"Tem certeza que deseja deletar?\",\n keyDuplicationError: \"Esse valor deve ser único.\",\n addColumn: \"Adicionar coluna\",\n addRow: \"Adicionar linha\",\n removeRow: \"Remover linha\",\n addPanel: \"Adicionar novo\",\n removePanel: \"Remover\",\n choices_Item: \"item\",\n matrix_column: \"Coluna\",\n matrix_row: \"Linha\",\n savingData: \"Os resultados esto sendo salvos no servidor...\",\n savingDataError: \"Ocorreu um erro e não foi possível salvar os resultados.\",\n savingDataSuccess: \"Os resultados foram salvos com sucesso!\",\n saveAgainButton: \"Tente novamente\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"Você gastou {0} nesta página e {1} no total.\",\n timerSpentPage: \"Você gastou {0} nesta página.\",\n timerSpentSurvey: \"Você gastou {0} no total.\",\n timerLimitAll: \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\",\n timerLimitPage: \"Você gastou {0} de {1} nesta página.\",\n timerLimitSurvey: \"Você gastou {0} de {1} no total.\",\n cleanCaption: \"Limpar\",\n clearCaption: \"Limpar\",\n chooseFileCaption: \"Escolher arquivo\",\n removeFileCaption: \"Remover este arquivo\",\n booleanCheckedLabel: \"Sim\",\n booleanUncheckedLabel: \"Não\",\n confirmRemoveFile: \"Tem certeza que deseja remover este arquivo: {0}?\",\n confirmRemoveAllFiles: \"Tem certeza que deseja remover todos os arquivos?\",\n questionTitlePatternText: \"Título da questão\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt-br\"] = portugueseBrSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt-br\"] = \"português brasileiro\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/portuguese.ts ***!\n \\****************************************/\n/*! exports provided: portugueseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"portugueseSurveyStrings\", function() { return portugueseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar portugueseSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Próximo\",\n completeText: \"Finalizar\",\n previewText: \"Pré-visualização\",\n editText: \"Editar\",\n startSurveyText: \"Começar\",\n otherItemText: \"Outros (descrever)\",\n noneItemText: \"Nenhum\",\n selectAllItemText: \"Selecionar Todos\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registo {0} de {1}\",\n questionsProgressText: \"Respostas {0}/{1} perguntas\",\n emptySurvey: \"Não há página visível ou pergunta no questionário.\",\n completingSurvey: \"Obrigado por finalizar o questionário!\",\n completingSurveyBefore: \"Os nossos registos mostram que já finalizou o questionário.\",\n loadingSurvey: \"O questionário está a carregar...\",\n optionsCaption: \"Selecione...\",\n value: \"valor\",\n requiredError: \"Por favor, responda à pergunta.\",\n requiredErrorInPanel: \"Por favor, responda pelo menos a uma pergunta.\",\n requiredInAllRowsError: \"Por favor, responda às perguntas em todas as linhas.\",\n numericError: \"O valor deve ser numérico.\",\n textMinLength: \"Por favor, insira pelo menos {0} caracteres.\",\n textMaxLength: \"Por favor, insira menos de {0} caracteres.\",\n textMinMaxLength: \"Por favor, insira mais de {0} e menos de {1} caracteres.\",\n minRowCountError: \"Preencha pelo menos {0} linhas.\",\n minSelectError: \"Selecione pelo menos {0} opções.\",\n maxSelectError: \"Por favor, selecione no máximo {0} opções.\",\n numericMinMax: \"O '{0}' deve ser igual ou superior a {1} e igual ou menor que {2}\",\n numericMin: \"O '{0}' deve ser igual ou superior a {1}\",\n numericMax: \"O '{0}' deve ser igual ou inferior a {1}\",\n invalidEmail: \"Por favor, insira um e-mail válido.\",\n invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n urlRequestError: \"O pedido retornou o erro '{0}'. {1}\",\n urlGetChoicesError: \"O pedido não retornou dados ou o 'caminho' do pedido não está correto\",\n exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n otherRequiredError: \"Por favor, insira o outro valor.\",\n uploadingFile: \"O seu ficheiro está a carregar. Por favor, aguarde alguns segundos e tente novamente.\",\n loadingFile: \"A carregar...\",\n chooseFile: \"Selecione o(s) arquivo(s)...\",\n noFileChosen: \"Nenhum ficheiro escolhido\",\n confirmDelete: \"Tem a certeza que deseja apagar?\",\n keyDuplicationError: \"Este valor deve ser único.\",\n addColumn: \"Adicionar coluna\",\n addRow: \"Adicionar linha\",\n removeRow: \"Remover linha\",\n addPanel: \"Adicionar novo\",\n removePanel: \"Remover\",\n choices_Item: \"item\",\n matrix_column: \"Coluna\",\n matrix_row: \"Linha\",\n savingData: \"Os resultados estão a ser guardados no servidor...\",\n savingDataError: \"Ocorreu um erro e não foi possível guardar os resultados.\",\n savingDataSuccess: \"Os resultados foram guardados com sucesso!\",\n saveAgainButton: \"Tente novamente\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"Você gastou {0} nesta página e {1} no total.\",\n timerSpentPage: \"Você gastou {0} nesta página.\",\n timerSpentSurvey: \"Você gastou {0} no total.\",\n timerLimitAll: \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\",\n timerLimitPage: \"Você gastou {0} de {1} nesta página.\",\n timerLimitSurvey: \"Você gastou {0} de {1} no total.\",\n cleanCaption: \"Limpar\",\n clearCaption: \"Limpar\",\n chooseFileCaption: \"Escolher ficheiro\",\n removeFileCaption: \"Remover este ficheiro\",\n booleanCheckedLabel: \"Sim\",\n booleanUncheckedLabel: \"Não\",\n confirmRemoveFile: \"Tem a certeza que deseja remover este ficheiro: {0}?\",\n confirmRemoveAllFiles: \"Tem a certeza que deseja remover todos os ficheiros?\",\n questionTitlePatternText: \"Título da questão\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt\"] = portugueseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt\"] = \"português\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/romanian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/romanian.ts ***!\n \\**************************************/\n/*! exports provided: romanianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"romanianSurveyStrings\", function() { return romanianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar romanianSurveyStrings = {\n pagePrevText: \"Precedent\",\n pageNextText: \"Următor\",\n completeText: \"Finalizare\",\n previewText: \"previzualizare\",\n editText: \"Editați\",\n startSurveyText: \"start\",\n otherItemText: \"Altul(precizaţi)\",\n noneItemText: \"Nici unul\",\n selectAllItemText: \"Selectează tot\",\n progressText: \"Pagina {0} din {1}\",\n panelDynamicProgressText: \"Înregistrare {0} din {1}\",\n questionsProgressText: \"Răspunsuri la {0} / {1} întrebări\",\n emptySurvey: \"Nu sunt întrebări pentru acest chestionar\",\n completingSurvey: \"Vă mulţumim pentru timpul acordat!\",\n completingSurveyBefore: \"Din înregistrările noastre reiese că ați completat deja acest chestionar.\",\n loadingSurvey: \"Chestionarul se încarcă...\",\n optionsCaption: \"Alegeţi...\",\n value: \"valoare\",\n requiredError: \"Răspunsul la această întrebare este obligatoriu.\",\n requiredErrorInPanel: \"Vă rugăm să răspundeți la cel puțin o întrebare.\",\n requiredInAllRowsError: \"Toate răspunsurile sunt obligatorii\",\n numericError: \"Răspunsul trebuie să fie numeric.\",\n textMinLength: \"Trebuie să introduceți minim {0} caractere.\",\n textMaxLength: \"Trebuie să introduceți maxim {0} caractere.\",\n textMinMaxLength: \"Trebuie să introduceți mai mult de {0} și mai puțin de {1} caractere.\",\n minRowCountError: \"Trebuie să completați minim {0} rânduri.\",\n minSelectError: \"Trebuie să selectați minim {0} opţiuni.\",\n maxSelectError: \"Trebuie să selectați maxim {0} opţiuni.\",\n numericMinMax: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}\",\n numericMin: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}\",\n numericMax: \"Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}\",\n invalidEmail: \"Trebuie să introduceţi o adresa de email validă.\",\n invalidExpression: \"Expresia: {0} ar trebui să returneze „adevărat”.\",\n urlRequestError: \"Request-ul a returnat eroarea '{0}'. {1}\",\n urlGetChoicesError: \"Request-ul nu a returnat date sau proprietatea 'path' este incorectă\",\n exceedMaxSize: \"Dimensiunea fişierului nu trebuie să depăşească {0}.\",\n otherRequiredError: \"Trebuie să completați câmpul 'Altul'.\",\n uploadingFile: \"Fișierul dumneavoastră este în curs de încărcare. Vă rugăm așteptați câteva secunde și reveniți apoi.\",\n loadingFile: \"Se încarcă...\",\n chooseFile: \"Alege fisierele...\",\n noFileChosen: \"Niciun fișier ales\",\n confirmDelete: \"Sunteți sigur că doriți să ștergeți înregistrarea?\",\n keyDuplicationError: \"Valoarea trebuie să fie unică.\",\n addColumn: \"Adăugați coloană\",\n addRow: \"Adăugare rând\",\n removeRow: \"Ștergere\",\n addPanel: \"Adăugare\",\n removePanel: \"Ștergere\",\n choices_Item: \"opțiune\",\n matrix_column: \"Coloană\",\n matrix_row: \"Rând\",\n savingData: \"Rezultatele sunt în curs de salvare...\",\n savingDataError: \"A intervenit o eroare, rezultatele nu au putut fi salvate.\",\n savingDataSuccess: \"Rezultatele au fost salvate cu succes!\",\n saveAgainButton: \"Încercați din nou\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Ați petrecut {0} pe această pagină și {1} în total.\",\n timerSpentPage: \"Ați petrecut {0} pe această pagină.\",\n timerSpentSurvey: \"Ați petrecut {0} în total.\",\n timerLimitAll: \"Ați petrecut {0} din {1} pe această pagină și {2} din {3} în total.\",\n timerLimitPage: \"Ați petrecut {0} din {1} pe această pagină.\",\n timerLimitSurvey: \"Ați petrecut {0} din {1} în total.\",\n cleanCaption: \"Curat\",\n clearCaption: \"clar\",\n chooseFileCaption: \"Alege fișierul\",\n removeFileCaption: \"Eliminați acest fișier\",\n booleanCheckedLabel: \"da\",\n booleanUncheckedLabel: \"Nu\",\n confirmRemoveFile: \"Sigur doriți să eliminați acest fișier: {0}?\",\n confirmRemoveAllFiles: \"Sigur doriți să eliminați toate fișierele?\",\n questionTitlePatternText: \"Titlul intrebarii\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ro\"] = romanianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ro\"] = \"română\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/russian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/russian.ts ***!\n \\*************************************/\n/*! exports provided: russianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"russianSurveyStrings\", function() { return russianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar russianSurveyStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Далее\",\n completeText: \"Готово\",\n previewText: \"Предварительный просмотр\",\n editText: \"Редактирование\",\n startSurveyText: \"Начать\",\n otherItemText: \"Другое (пожалуйста, опишите)\",\n noneItemText: \"Нет\",\n selectAllItemText: \"Выбрать всё\",\n progressText: \"Страница {0} из {1}\",\n panelDynamicProgressText: \"Запись {0} из {1}\",\n questionsProgressText: \"Ответы на {0}/{1}вопросы\",\n emptySurvey: \"Нет ни одного вопроса.\",\n completingSurvey: \"Благодарим Вас за заполнение анкеты!\",\n completingSurveyBefore: \"Вы уже проходили этот опрос.\",\n loadingSurvey: \"Загрузка с сервера...\",\n optionsCaption: \"Выбрать...\",\n value: \"значение\",\n requiredError: \"Пожалуйста, ответьте на вопрос.\",\n requiredErrorInPanel: \"Пожалуйста, ответьте по крайней мере на один вопрос.\",\n requiredInAllRowsError: \"Пожалуйста, ответьте на вопросы в каждой строке.\",\n numericError: \"Ответ должен быть числом.\",\n textMinLength: \"Пожалуйста введите больше {0} символов.\",\n textMaxLength: \"Пожалуйста введите меньше {0} символов.\",\n textMinMaxLength: \"Пожалуйста введите больше {0} и меньше {1} символов.\",\n minRowCountError: \"Пожалуйста, заполните не меньше {0} строк.\",\n minSelectError: \"Пожалуйста, выберите хотя бы {0} вариантов.\",\n maxSelectError: \"Пожалуйста, выберите не более {0} вариантов.\",\n numericMinMax: \"'{0}' должно быть не меньше чем {1}, и не больше чем {2}\",\n numericMin: \"'{0}' должно быть не меньше чем {1}\",\n numericMax: \"'{0}' должно быть не больше чем {1}\",\n invalidEmail: \"Пожалуйста, введите действительный адрес электронной почты.\",\n invalidExpression: \"Выражение {0} должно возвращать 'true'.\",\n urlRequestError: \"Запрос вернул ошибку '{0}'. {1}\",\n urlGetChoicesError: \"Ответ на запрос пришел пустой или свойство 'path' указано неверно\",\n exceedMaxSize: \"Размер файла не должен превышать {0}.\",\n otherRequiredError: \"Пожалуйста, введите данные в поле 'Другое'\",\n uploadingFile: \"Ваш файл загружается. Подождите несколько секунд и попробуйте снова.\",\n loadingFile: \"Загрузка...\",\n chooseFile: \"Выберите файл(ы)...\",\n noFileChosen: \"Файл не выбран\",\n confirmDelete: \"Вы точно хотите удалить запись?\",\n keyDuplicationError: \"Это значение должно быть уникальным.\",\n addColumn: \"Добавить колонку\",\n addRow: \"Добавить строку\",\n removeRow: \"Удалить\",\n addPanel: \"Добавить новую\",\n removePanel: \"Удалить\",\n choices_Item: \"Вариант\",\n matrix_column: \"Колонка\",\n matrix_row: \"Строка\",\n savingData: \"Результаты сохраняются на сервер...\",\n savingDataError: \"Произошла ошибка, результат не был сохранён.\",\n savingDataSuccess: \"Результат успешно сохранён!\",\n saveAgainButton: \"Попробовать снова\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Вы потратили {0} на этой странице и {1} всего.\",\n timerSpentPage: \"Вы потратили {0} на этой странице.\",\n timerSpentSurvey: \"Вы потратили {0} в течение теста.\",\n timerLimitAll: \"Вы потратили {0} из {1} на этой странице и {2} из {3} для всего теста.\",\n timerLimitPage: \"Вы потратили {0} из {1} на этой странице.\",\n timerLimitSurvey: \"Вы потратили {0} из {1} для всего теста.\",\n cleanCaption: \"Очистить\",\n clearCaption: \"Очистить\",\n chooseFileCaption: \"Выберите файл\",\n removeFileCaption: \"Удалить файл\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Нет\",\n confirmRemoveFile: \"Вы уверены, что хотите удалить этот файл: {0}?\",\n confirmRemoveAllFiles: \"Вы уверены, что хотите удалить все файлы?\",\n questionTitlePatternText: \"Название вопроса\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ru\"] = russianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ru\"] = \"русский\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/serbian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/serbian.ts ***!\n \\*************************************/\n/*! exports provided: serbianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"serbianStrings\", function() { return serbianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Uncomment this line on creating a translation file\n\nvar serbianStrings = {\n pagePrevText: \"Nazad\",\n pageNextText: \"Dalje\",\n completeText: \"Završi\",\n previewText: \"Pregledaj\",\n editText: \"Izmeni\",\n startSurveyText: \"Započni\",\n otherItemText: \"Drugo (upiši)\",\n noneItemText: \"Ništa\",\n selectAllItemText: \"Izaberi sve\",\n progressText: \"Stranica {0} od {1}\",\n panelDynamicProgressText: \"Upis {0} od {1}\",\n questionsProgressText: \"Odgovoreno na {0}/{1} pitanja\",\n emptySurvey: \"Nema vidljivih stranica ili pitanja u anketi.\",\n completingSurvey: \"Hvala na popunjavanju ankete!\",\n completingSurveyBefore: \"Prema našim podacima, već ste popunili ovu anketu.\",\n loadingSurvey: \"Učitavam anketu...\",\n optionsCaption: \"Izaberi...\",\n value: \"vrednost\",\n requiredError: \"Molimo odgovorite na ovo pitanje.\",\n requiredErrorInPanel: \"Molimo odgovorite na bar jedno pitanje.\",\n requiredInAllRowsError: \"Molimo odgovorite na pitanja u svim redovima.\",\n numericError: \"Vrednost bi trebalo da bude numerička.\",\n minError: \"Vrednost ne bi trebalo da bude manja od {0}\",\n maxError: \"Vrednost ne bi trebalo da bude veća od {0}\",\n textMinLength: \"Molimo unesite bar {0} znak(ov)a.\",\n textMaxLength: \"Molimo unesite najviše {0} znak(ov)a.\",\n textMinMaxLength: \"Molimo unesite najmanje {0} i ne više od {1} znak(ov)a.\",\n minRowCountError: \"Molimo popunite najmanje {0} red(ova).\",\n minSelectError: \"Molimo izaberite najmanje {0} opcija/e.\",\n maxSelectError: \"Molimo izaberite najviše {0} opcija/e.\",\n numericMinMax: \"'{0}' bi trebalo da bude najmanje {1} i najviše {2}\",\n numericMin: \"'{0}' bi trebalo da bude najmanje {1}\",\n numericMax: \"'{0}' bi trebalo da bude najviše {1}\",\n invalidEmail: \"Molimo unesite ispravnu e-mail adresu.\",\n // vratiti \"true\" ?\n invalidExpression: \"Izraz: {0} bi trebalo da bude tačan.\",\n urlRequestError: \"Zahtev je naišao na grešku '{0}'. {1}\",\n urlGetChoicesError: \"Zahtev nije pronašao podatke, ili je putanja netačna\",\n exceedMaxSize: \"Veličina fajla ne bi trebalo da prelazi {0}.\",\n otherRequiredError: \"Molimo unesite drugu vrednost.\",\n uploadingFile: \"Fajl se šalje. Molimo sačekajte neko vreme i pokušajte ponovo.\",\n loadingFile: \"Učitavanje...\",\n chooseFile: \"Izaberite fajlove...\",\n noFileChosen: \"Nije izabran nijedan fajl\",\n confirmDelete: \"Da li želite da izbrišete unos?\",\n keyDuplicationError: \"Ova vrednost treba da bude jedinstvena.\",\n addColumn: \"Dodaj kolonu\",\n addRow: \"Dodaj red\",\n removeRow: \"Ukloni\",\n emptyRowsText: \"Nema redova.\",\n addPanel: \"Dodaj novo\",\n removePanel: \"Ukloni\",\n choices_Item: \"stavka\",\n matrix_column: \"Kolona\",\n matrix_row: \"Red\",\n multipletext_itemname: \"tekst\",\n savingData: \"U toku je čuvanje podataka na serveru...\",\n savingDataError: \"Došlo je do greške i rezultati nisu sačuvani.\",\n savingDataSuccess: \"Rezultati su uspešno sačuvani!\",\n saveAgainButton: \"Pokušajte ponovo\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Proveli ste {0} na ovoj stranici i {1} ukupno.\",\n timerSpentPage: \"Proveli ste {0} na ovoj stranici.\",\n timerSpentSurvey: \"Proveli ste {0} ukupno.\",\n timerLimitAll: \"Proveli ste {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n timerLimitPage: \"Proveli ste {0} od {1} na ovoj stranici.\",\n timerLimitSurvey: \"Proveli ste {0} od {1} ukupno.\",\n cleanCaption: \"Očisti\",\n clearCaption: \"Poništi\",\n chooseFileCaption: \"Izaberi fajl\",\n removeFileCaption: \"Ukloni ovaj fajl\",\n booleanCheckedLabel: \"Da\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Da li ste sigurni da želite da uklonite ovaj fajl: {0}?\",\n confirmRemoveAllFiles: \"Da li ste sigurni da želite da uklonite sve fajlove?\",\n questionTitlePatternText: \"Naslov pitanja\",\n modalCancelButtonText: \"Otkaži\",\n modalApplyButtonText: \"Primeni\",\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"rs\"] = serbianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"rs\"] = \"Srpski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/simplified-chinese.ts\":\n/*!************************************************!*\\\n !*** ./src/localization/simplified-chinese.ts ***!\n \\************************************************/\n/*! exports provided: simplifiedChineseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"simplifiedChineseSurveyStrings\", function() { return simplifiedChineseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar simplifiedChineseSurveyStrings = {\n pagePrevText: \"上一页\",\n pageNextText: \"下一页\",\n completeText: \"提交问卷\",\n previewText: \"预览\",\n editText: \"编辑\",\n startSurveyText: \"开始问卷\",\n otherItemText: \"填写其他答案\",\n noneItemText: \"无\",\n selectAllItemText: \"选择全部\",\n progressText: \"第 {0} 页, 共 {1} 页\",\n panelDynamicProgressText: \"{0} of {1}\",\n questionsProgressText: \"第 {0}/{1} 题\",\n emptySurvey: \"问卷中没有问题或页面\",\n completingSurvey: \"感谢您的参与!\",\n completingSurveyBefore: \"你已完成问卷.\",\n loadingSurvey: \"问卷正在加载中...\",\n optionsCaption: \"请选择...\",\n value: \"值\",\n requiredError: \"请填写此问题\",\n requiredErrorInPanel: \"至少回答一题.\",\n requiredInAllRowsError: \"请填写所有行中问题\",\n numericError: \"答案必须是个数字\",\n minError: \"该值不能小于 {0}\",\n maxError: \"该值不能大于 {0}\",\n textMinLength: \"答案长度至少 {0} 个字符\",\n textMaxLength: \"答案长度不能超过 {0} 个字符\",\n textMinMaxLength: \"答案长度必须在 {0} - {1} 个字符之间\",\n minRowCountError: \"最少需要填写 {0} 行答案\",\n minSelectError: \"最少需要选择 {0} 项答案\",\n maxSelectError: \"最多只能选择 {0} 项答案\",\n numericMinMax: \"答案 '{0}' 必须大于等于 {1} 且小于等于 {2}\",\n numericMin: \"答案 '{0}' 必须大于等于 {1}\",\n numericMax: \"答案 '{0}' 必须小于等于 {1}\",\n invalidEmail: \"请输入有效的 Email 地址\",\n invalidExpression: \"公式: {0} 无效.\",\n urlRequestError: \"载入选项时发生错误 '{0}': {1}\",\n urlGetChoicesError: \"未能载入有效的选项或请求参数路径有误\",\n exceedMaxSize: \"文件大小不能超过 {0}\",\n otherRequiredError: \"请完成其他问题\",\n uploadingFile: \"文件上传中... 请耐心等待几秒后重试\",\n loadingFile: \"加载...\",\n chooseFile: \"选择文件...\",\n noFileChosen: \"未选择文件\",\n confirmDelete: \"删除记录?\",\n keyDuplicationError: \"主键不能重复\",\n addColumn: \"添加列\",\n addRow: \"添加行\",\n removeRow: \"删除答案\",\n emptyRowsText: \"无内容\",\n addPanel: \"新添\",\n removePanel: \"删除\",\n choices_Item: \"选项\",\n matrix_column: \"列\",\n matrix_row: \"行\",\n multipletext_itemname: \"文本\",\n savingData: \"正在将结果保存到服务器...\",\n savingDataError: \"在保存结果过程中发生了错误,结果未能保存\",\n savingDataSuccess: \"结果保存成功!\",\n saveAgainButton: \"请重试\",\n timerMin: \"分\",\n timerSec: \"秒\",\n timerSpentAll: \"本页用时 {0} 总计用时{1} .\",\n timerSpentPage: \"本页用时{0} .\",\n timerSpentSurvey: \"总计用时 {0} .\",\n timerLimitAll: \"本页用时 {0} 共 {1}, 总计用时 {2} 共 {3} .\",\n timerLimitPage: \"本页用时 {0} 共 {1} .\",\n timerLimitSurvey: \"总计用时 {0} 共 {1}.\",\n cleanCaption: \"清理\",\n clearCaption: \"清除\",\n chooseFileCaption: \"选择文件\",\n removeFileCaption: \"移除文件\",\n booleanCheckedLabel: \"是\",\n booleanUncheckedLabel: \"否\",\n confirmRemoveFile: \"删除文件: {0}?\",\n confirmRemoveAllFiles: \"删除所有文件?\",\n questionTitlePatternText: \"标题\",\n modalCancelButtonText: \"取消\",\n modalApplyButtonText: \"确定\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-cn\"] = simplifiedChineseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-cn\"] = \"简体中文\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/spanish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/spanish.ts ***!\n \\*************************************/\n/*! exports provided: spanishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"spanishSurveyStrings\", function() { return spanishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar spanishSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Siguiente\",\n completeText: \"Completar\",\n previewText: \"Vista previa\",\n editText: \"Edita\",\n startSurveyText: \"Comienza\",\n otherItemText: \"Otro (describa)\",\n noneItemText: \"Ninguno\",\n selectAllItemText: \"Seleccionar todo\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registro {0} de {1}\",\n questionsProgressText: \"Respondió a {0}/{1} preguntas\",\n emptySurvey: \"No hay página visible o pregunta en la encuesta.\",\n completingSurvey: \"Gracias por completar la encuesta!\",\n completingSurveyBefore: \"Nuestros registros muestran que ya ha completado esta encuesta.\",\n loadingSurvey: \"La encuesta está cargando...\",\n optionsCaption: \"Seleccione...\",\n value: \"valor\",\n requiredError: \"Por favor conteste la pregunta.\",\n requiredErrorInPanel: \"Por favor, responda al menos una pregunta.\",\n requiredInAllRowsError: \"Por favor conteste las preguntas en cada hilera.\",\n numericError: \"La estimación debe ser numérica.\",\n textMinLength: \"Por favor entre por lo menos {0} símbolos.\",\n textMaxLength: \"Por favor entre menos de {0} símbolos.\",\n textMinMaxLength: \"Por favor entre más de {0} y menos de {1} símbolos.\",\n minRowCountError: \"Por favor llene por lo menos {0} hileras.\",\n minSelectError: \"Por favor seleccione por lo menos {0} variantes.\",\n maxSelectError: \"Por favor seleccione no más de {0} variantes.\",\n numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n numericMin: \"El '{0}' debe ser igual o más de {1}\",\n numericMax: \"El '{0}' debe ser igual o menos de {1}\",\n invalidEmail: \"Por favor agregue un correo electrónico válido.\",\n invalidExpression: \"La expresión: {0} debería devolver 'verdadero'.\",\n urlRequestError: \"La solicitud regresó error '{0}'. {1}\",\n urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n exceedMaxSize: \"El tamaño del archivo no debe de exceder {0}.\",\n otherRequiredError: \"Por favor agregue la otra estimación.\",\n uploadingFile: \"Su archivo se está subiendo. Por favor espere unos segundos e intente de nuevo.\",\n loadingFile: \"Cargando...\",\n chooseFile: \"Elija archivo(s)...\",\n noFileChosen: \"No se ha elegido ningún archivo\",\n confirmDelete: \"¿Quieres borrar el registro?\",\n keyDuplicationError: \"Este valor debe ser único.\",\n addColumn: \"Añadir columna\",\n addRow: \"Agregue una hilera\",\n removeRow: \"Eliminar una hilera\",\n addPanel: \"Añadir nuevo\",\n removePanel: \"Retire\",\n choices_Item: \"artículo\",\n matrix_column: \"Columna\",\n matrix_row: \"Hilera\",\n savingData: \"Los resultados se están guardando en el servidor...\",\n savingDataError: \"Los resultados se están guardando en el servidor...\",\n savingDataSuccess: \"¡Los resultados se guardaron con éxito!\",\n saveAgainButton: \"Inténtalo de nuevo.\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Has gastado {0} en esta página y {1} en total.\",\n timerSpentPage: \"Usted ha pasado {0} en esta página.\",\n timerSpentSurvey: \"Has gastado en total.\",\n timerLimitAll: \"Has gastado {0} de {1} en esta página y {2} de {3} en total.\",\n timerLimitPage: \"Has gastado {0} de {1} en esta página.\",\n timerLimitSurvey: \"Usted ha gastado {0} de {1} en total.\",\n cleanCaption: \"Limpia\",\n clearCaption: \"Despejen\",\n chooseFileCaption: \"Elija el archivo\",\n removeFileCaption: \"Elimina este archivo\",\n booleanCheckedLabel: \"Sí\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"¿Estás seguro de que quieres eliminar este archivo: {0}?\",\n confirmRemoveAllFiles: \"¿Estás seguro de que quieres eliminar todos los archivos?\",\n questionTitlePatternText: \"Título de la pregunta\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"es\"] = spanishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"es\"] = \"español\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/swahili.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/swahili.ts ***!\n \\*************************************/\n/*! exports provided: swahiliStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swahiliStrings\", function() { return swahiliStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar swahiliStrings = {\n pagePrevText: \"Iliyotangulia\",\n pageNextText: \"Ifuatayo\",\n completeText: \"Kamili\",\n previewText: \"Hakiki\",\n editText: \"Hariri\",\n startSurveyText: \"Anza\",\n otherItemText: \"Nyingine (eleza)\",\n noneItemText: \"Hakuna\",\n selectAllItemText: \"Chagua Zote\",\n progressText: \"Ukurasa {0} wa {1}\",\n panelDynamicProgressText: \"Rekodi {0} ya {1}\",\n questionsProgressText: \"Yaliyojibiwa {0}/{1} maswali\",\n emptySurvey: \"Hakuna ukurasa unaoonekana au swali katika utafiti.\",\n completingSurvey: \"Asanti kwa kukamilisha utafiti!\",\n completingSurveyBefore: \"Recodi zetu zinatuonyesha tayari umekamilisha utafiti.\",\n loadingSurvey: \"Tunaandaa utafiti...\",\n optionsCaption: \"Chagua...\",\n value: \"thamani\",\n requiredError: \"Tafadhali jibu hili swali.\",\n requiredErrorInPanel: \"Tafadhali jibu swali angalau moja.\",\n requiredInAllRowsError: \"Tafadhali jibu maswali katika safu zote.\",\n numericError: \"Thamani inapaswa kuwa ya nambari.\",\n textMinLength: \"Tafadhali ingiza angalau{0} husika.\",\n textMaxLength: \"Tafadhali ingiza isiozidi {0} husika.\",\n textMinMaxLength: \"Tafadhali ingiza kiwango zaidi ya {0} na kisichopungua {1} husika.\",\n minRowCountError: \"Tafadhali jaza isiopungua {0} safu.\",\n minSelectError: \"Tafadhali chagua angalau {0} lahaja.\",\n maxSelectError: \"Tafadhali changua isiozidi {0} lahaja.\",\n numericMinMax: \" '{0}' inapaswa kuwa sawa au zaidi ya {1} na sawa au chini ya {2}\",\n numericMin: \" '{0}'inapaswa kuwa sawa au zaidi ya {1}\",\n numericMax: \" '{0}'inapaswa kuwa sawa au chini ya {1}\",\n invalidEmail: \"Tafadhali ingiza anwani halali ya barua-pepe.\",\n invalidExpression: \"Usemi:{0} inapaswa kurudi 'kweli'.\",\n urlRequestError: \"Ombi lina kosa '{0}'. {1}\",\n urlGetChoicesError: \"Ombi lilirudisha data tupu au the 'path' mali ya njia sio sahihi\",\n exceedMaxSize: \"Saizi ya faili haipaswi kuzidi {0}.\",\n otherRequiredError: \"Tafadhali ingiza thamani nyingine.\",\n uploadingFile: \"Faili yako inapakia.Tafadhali subiri sekunde kadhaa na ujaribu tena.\",\n loadingFile: \"Inapakia...\",\n chooseFile: \"Chagua faili...\",\n noFileChosen: \"Hujachagua faili\",\n confirmDelete: \"Je! Unataka kufuta rekodi?\",\n keyDuplicationError: \"Thamani hii inapaswa kuwa ya kipekee.\",\n addColumn: \"Ongeza Kolamu\",\n addRow: \"Ongeza safu\",\n removeRow: \"Toa\",\n addPanel: \"Ongeza mpya\",\n removePanel: \"Toa\",\n choices_Item: \"kitu\",\n matrix_column: \"Kolamu\",\n matrix_row: \"Safu\",\n savingData: \"Matokeo yamehifadhiwa kwa seva...\",\n savingDataError: \"Kosa limetokea na hatukuweza kuhifadhi matokeo.\",\n savingDataSuccess: \"Matokeo yamehifadhiwa!\",\n saveAgainButton: \"Jaribu tena\",\n timerMin: \"dakika\",\n timerSec: \"sekunde\",\n timerSpentAll: \"Umetumia {0} kwenye ukurasa huu na {1} kwa jumla.\",\n timerSpentPage: \"Umetumia {0} kwenye ukurasa huu.\",\n timerSpentSurvey: \"Umetumia {0} kwa jumla.\",\n timerLimitAll: \"Umetumia {0} ya {1} kwenye ukurasa huu {2} wa {3} kwa jumla.\",\n timerLimitPage: \"Umetumia {0} ya {1} kwenye ukurasa huu.\",\n timerLimitSurvey: \"Umetumia {0} ya {1} kwa jumla.\",\n cleanCaption: \"Safisha\",\n clearCaption: \"Ondoa\",\n chooseFileCaption: \"Chagua faili\",\n removeFileCaption: \"Ondoa faili\",\n booleanCheckedLabel: \"Ndio\",\n booleanUncheckedLabel: \"Hapana\",\n confirmRemoveFile: \"Je! Una uhakika kuwa unataka kuondoa faili hii: {0}?\",\n confirmRemoveAllFiles: \"Je! Una uhakika kuwa unataka kuondoa faili zote?\",\n questionTitlePatternText: \"Kichwa cha Swali\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sw\"] = swahiliStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sw\"] = \"swahili\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/swedish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/swedish.ts ***!\n \\*************************************/\n/*! exports provided: swedishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swedishSurveyStrings\", function() { return swedishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Create by Mattias Asplund\n\nvar swedishSurveyStrings = {\n pagePrevText: \"Föregående\",\n pageNextText: \"Nästa\",\n completeText: \"Färdig\",\n previewText: \"Förhandsvisning\",\n editText: \"Redigera\",\n startSurveyText: \"Start\",\n otherItemText: \"Annat (beskriv)\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Välj alla\",\n progressText: \"Sida {0} av {1}\",\n panelDynamicProgressText: \"Spela in {0} av {1}\",\n questionsProgressText: \"Besvarade {0} / {1} frågor\",\n emptySurvey: \"Det finns ingen synlig sida eller fråga i enkäten.\",\n completingSurvey: \"Tack för att du genomfört enkäten!!\",\n completingSurveyBefore: \"Våra register visar att du redan har slutfört denna undersökning.\",\n loadingSurvey: \"Enkäten laddas...\",\n optionsCaption: \"Välj...\",\n value: \"värde\",\n requiredError: \"Var vänlig besvara frågan.\",\n requiredErrorInPanel: \"Vänligen svara på minst en fråga.\",\n requiredInAllRowsError: \"Var vänlig besvara frågorna på alla rader.\",\n numericError: \"Värdet ska vara numeriskt.\",\n textMinLength: \"Var vänlig ange minst {0} tecken.\",\n textMaxLength: \"Ange färre än {0} tecken.\",\n textMinMaxLength: \"Ange mer än {0} och färre än {1} tecken.\",\n minRowCountError: \"Var vänlig fyll i minst {0} rader.\",\n minSelectError: \"Var vänlig välj åtminstone {0} varianter.\",\n maxSelectError: \"Var vänlig välj inte fler än {0} varianter.\",\n numericMinMax: \"'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}\",\n numericMin: \"'{0}' ska vara lika med eller mer än {1}\",\n numericMax: \"'{0}' ska vara lika med eller mindre än {1}\",\n invalidEmail: \"Var vänlig ange en korrekt e-postadress.\",\n invalidExpression: \"Uttrycket: {0} ska returnera 'true'.\",\n urlRequestError: \"Förfrågan returnerade felet '{0}'. {1}\",\n urlGetChoicesError: \"Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt\",\n exceedMaxSize: \"Filstorleken får ej överstiga {0}.\",\n otherRequiredError: \"Var vänlig ange det andra värdet.\",\n uploadingFile: \"Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.\",\n loadingFile: \"Läser in...\",\n chooseFile: \"Välj fil (er) ...\",\n noFileChosen: \"Ingen fil vald\",\n confirmDelete: \"Vill du radera posten?\",\n keyDuplicationError: \"Detta värde ska vara unikt.\",\n addColumn: \"Lägg till kolumn\",\n addRow: \"Lägg till rad\",\n removeRow: \"Ta bort\",\n addPanel: \"Lägg till ny\",\n removePanel: \"Ta bort\",\n choices_Item: \"Artikel\",\n matrix_column: \"Kolumn\",\n matrix_row: \"Rad\",\n savingData: \"Resultaten sparas på servern ...\",\n savingDataError: \"Ett fel inträffade och vi kunde inte spara resultaten.\",\n savingDataSuccess: \"Resultaten sparades framgångsrikt!\",\n saveAgainButton: \"Försök igen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har spenderat {0} på den här sidan och {1} totalt.\",\n timerSpentPage: \"Du har spenderat {0} på den här sidan.\",\n timerSpentSurvey: \"Du har spenderat {0} totalt.\",\n timerLimitAll: \"Du har spenderat {0} av {1} på den här sidan och {2} av {3} totalt.\",\n timerLimitPage: \"Du har spenderat {0} av {1} på den här sidan.\",\n timerLimitSurvey: \"Du har spenderat {0} av {1} totalt.\",\n cleanCaption: \"Rena\",\n clearCaption: \"Klar\",\n chooseFileCaption: \"Välj FIL\",\n removeFileCaption: \"Ta bort den här filen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nej\",\n confirmRemoveFile: \"Är du säker på att du vill ta bort den här filen: {0}?\",\n confirmRemoveAllFiles: \"Är du säker på att du vill ta bort alla filer?\",\n questionTitlePatternText: \"Frågetitel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sv\"] = swedishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sv\"] = \"svenska\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/tajik.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/tajik.ts ***!\n \\***********************************/\n/*! exports provided: tajikSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"tajikSurveyStrings\", function() { return tajikSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar tajikSurveyStrings = {\n pagePrevText: \"Бозгашт\",\n pageNextText: \"Оянда\",\n completeText: \"Иҷро шуд\",\n startSurveyText: \"Оғоз\",\n otherItemText: \"Дигар (лутфан тавсиф кунед)\",\n noneItemText: \"Не\",\n selectAllItemText: \"Ҳамаро интихоб кардан\",\n progressText: \"Саҳифаи {0} аз {1}\",\n emptySurvey: \"Ягон савол вуҷуд надорад.\",\n completingSurvey: \"Ташаккур барои пур кардани саволнома!\",\n completingSurveyBefore: \"Шумо аллакай ин пурсишро анҷом додаед.\",\n loadingSurvey: \"Боргирӣ аз сервер...\",\n optionsCaption: \"Интихоб кардан...\",\n value: \"қиммат\",\n requiredError: \"Илтимос, ба савол ҷавоб диҳед.\",\n requiredErrorInPanel: \"Илтимос, ақалан ба як савол ҷавоб диҳед.\",\n requiredInAllRowsError: \"Илтимос, ба ҳамаи саволҳо дар ҳамаи сатрҳо ҷавоб диҳед.\",\n numericError: \"Ҷавоб бояд рақам бошад.\",\n textMinLength: \"Илтимос, аз {0} зиёдтар рамз ворид кунед.\",\n textMaxLength: \"Илтимос, аз {0} камтар рамз ворид кунед.\",\n textMinMaxLength: \"Илтимос, аз {0} зиёдтар ва аз {1} камтар рамз ворид кунед.\",\n minRowCountError: \"Илтимос, на камтар аз {0} сатр пур кунед.\",\n minSelectError: \"Илтимос, ақалан {0} вариант интихоб кунед.\",\n maxSelectError: \"Илтимос, на зиёдтар аз {0} вариант интихоб кунед.\",\n numericMinMax: \"'{0}' бояд на кам аз {1} ва на бисёр аз {2} бошад\",\n numericMin: \"'{0}' бояд на кам аз {1} бошад\",\n numericMax: \"'{0}' бояд на зиёд аз {1} бошад\",\n invalidEmail: \"Илтимос, почтаи электронии воқеиро ворид кунед.\",\n invalidExpression: \"Ифодаи {0} бояд 'true' баргардонад.\",\n urlRequestError: \"Дархост хатогӣ бозгардонд '{0}'. {1}\",\n urlGetChoicesError: \"Ҷавоб ба дархост холӣ омад ё хосияти 'path' нодуруст муайян карда шудааст\",\n exceedMaxSize: \"Андозаи файл бояд на калон аз {0} бошад.\",\n otherRequiredError: \"Илтимос, ба майдони 'Дигар' додаҳоро ворид кунед\",\n uploadingFile: \"Файли шумо бор шуда истодааст. Якчанд сония интизор шавед ва бори дигар кӯшиш кунед.\",\n loadingFile: \"Боркунӣ...\",\n chooseFile: \"Файл(ҳо)-ро интихоб кунед...\",\n confirmDelete: \"Шумо мутмаин ҳастед, ки мехоҳед воридро тоза кунед?\",\n keyDuplicationError: \"Ин арзиш бояд беназир бошад.\",\n addColumn: \"Иловаи сутун\",\n addRow: \"Иловаи сатр\",\n removeRow: \"Нест кардан\",\n addPanel: \"Илова кардан\",\n removePanel: \"Нест кардан\",\n choices_Item: \"Вариант\",\n matrix_column: \"Сутун\",\n matrix_row: \"Сатр\",\n savingData: \"Натиҷа ба сервер сабт шуда истодаанд...\",\n savingDataError: \"Хатогӣ ба амал омад, натиҷа сабт нашуд.\",\n savingDataSuccess: \"Натиҷа бомуваффакият сабт шуд!\",\n saveAgainButton: \"Бори дигар кӯшиш карданд\",\n timerMin: \"дақ\",\n timerSec: \"сон\",\n timerSpentAll: \"Шумо {0} дар ин саҳифа ва {1} дар умум сарф кардед.\",\n timerSpentPage: \"Шумо {0} дар ин саҳифа сарф кардед.\",\n timerSpentSurvey: \"Шумо {0} дар ин тест сарф намудед.\",\n timerLimitAll: \"Шумо {0} аз {1} дар ин саҳифа ва {2} аз {3} дар умум сарф кардед дар дохили ин тест.\",\n timerLimitPage: \"Шумо {0} аз {1} дар ин саҳифа сарф кардед.\",\n timerLimitSurvey: \"Шумо {0} аз {1} дар ҳамаи тест сарф кардед.\",\n cleanCaption: \"Тоза кардан\",\n clearCaption: \"Тоза кардан\",\n removeFileCaption: \"Файлро нест кардан\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tg\"] = tajikSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tg\"] = \"тоҷикӣ\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/thai.ts\":\n/*!**********************************!*\\\n !*** ./src/localization/thai.ts ***!\n \\**********************************/\n/*! exports provided: thaiStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"thaiStrings\", function() { return thaiStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created by Padet Taweekunkan\n\nvar thaiStrings = {\n pagePrevText: \"ก่อนหน้า\",\n pageNextText: \"ถัดไป\",\n completeText: \"สำเร็จ\",\n previewText: \"ดูตัวอย่าง\",\n editText: \"แก้ไข\",\n startSurveyText: \"เริ่ม\",\n otherItemText: \"อื่นๆ (โปรดระบุ)\",\n noneItemText: \"ไม่มี\",\n selectAllItemText: \"เลือกทั้งหมด\",\n progressText: \"หน้าที่ {0} จาก {1}\",\n panelDynamicProgressText: \"รายการที่ {0} จาก {1}\",\n questionsProgressText: \"คำตอบที่ {0}/{1} จำนวนคำถาม\",\n emptySurvey: \"ไม่มีหน้าเพจที่มองเห็น หรือ คำถามใน survey นี้\",\n completingSurvey: \"ขอบคุณที่ทำ survey จนเสร็จ\",\n completingSurveyBefore: \"รายการของเราแสดงว่าคุณได้ทำ survey เสร็จเรียบร้อยแล้ว\",\n loadingSurvey: \"กำลังโหลด Survey...\",\n optionsCaption: \"เลือก...\",\n value: \"ข้อมูล\",\n requiredError: \"กรุณาตอบคำถาม\",\n requiredErrorInPanel: \"กรุณาตอบขั้นต่ำหนึ่งคำถาม\",\n requiredInAllRowsError: \"กรุณาตอบคำถามในทุกๆแถว\",\n numericError: \"ข้อมูลที่ใส่ต้องเป็นตัวเลข\",\n textMinLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} ตัวอักษร\",\n textMaxLength: \"กรุณาใส่ไม่เกินจำนวน {0} ตัวอักษร\",\n textMinMaxLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} และไม่เกินจำนวน {1} ตัวอักษร\",\n minRowCountError: \"กรุณาใส่ขั้นต่ำจำนวน {0} แถว\",\n minSelectError: \"กรุณาเลือกอย่างน้อย {0} รายการ\",\n maxSelectError: \"กรุณาเลือกไม่เกิน {0} รายการ\",\n numericMinMax: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1} และน้อยกว่าหรือเท่ากับ {2}\",\n numericMin: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1}\",\n numericMax: \"'{0}' น้อยกว่าหรือเท่ากับ {1}\",\n invalidEmail: \"กรุณาใส่อีเมล์แอดเดรสที่ถูกต้อง\",\n invalidExpression: \"The expression: {0} ต้องรีเทิร์น 'true'.\",\n urlRequestError: \"รีเควสรีเทิร์น error '{0}'. {1}\",\n urlGetChoicesError: \"รีเควสรีเทิร์นข้อมูลว่างเปล่า หรือ 'path' property ไม่ถูกต้อง\",\n exceedMaxSize: \"ขนาดไฟล์ต้องไม่เกิน {0}.\",\n otherRequiredError: \"กรุณาใส่ค่าอื่น\",\n uploadingFile: \"ไฟล์ของคุณกำลังอัพโหลดอยู่. กรุณารอสักครู่แล้วทำการลองอีกครั้ง\",\n loadingFile: \"กำลังโหลด...\",\n chooseFile: \"เลือกไฟล์...\",\n noFileChosen: \"ไม่ไฟล์ที่เลือก\",\n confirmDelete: \"คุณต้องการลบรายการนี้จริงหรือไม่?\",\n keyDuplicationError: \"ข้อมูลนี้ต้องเป็น unique.\",\n addColumn: \"เพิ่มคอลัมน์\",\n addRow: \"เพิ่มแถว\",\n removeRow: \"ลบ\",\n addPanel: \"เพิ่ม\",\n removePanel: \"ลบ\",\n choices_Item: \"ชิ้น\",\n matrix_column: \"คอลัมน์\",\n matrix_row: \"แถว\",\n savingData: \"ผลลัพท์กำลังบันทึกลงที่เซิร์ฟเวอร์...\",\n savingDataError: \"มีความผิดพลาดเกิดขึ้นส่งผลให้ไม่สามารถบันทึกผลได้\",\n savingDataSuccess: \"บันทึกสำเร็จแล้ว\",\n saveAgainButton: \"รบกวนลองอีกครั้ง\",\n timerMin: \"นาที\",\n timerSec: \"วินาที\",\n timerSpentAll: \"คุณใช้เวลา {0} บนหน้านี้และ {1} รวมทั้งหมด\",\n timerSpentPage: \"คุณใช้เวลา {0} บนหน้านี้\",\n timerSpentSurvey: \"คุณใช้เวลา {0} รวมทั้งหมด\",\n timerLimitAll: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้และ {2} ของ {3} รวมทั้งหมด\",\n timerLimitPage: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้\",\n timerLimitSurvey: \"คุณใช้เวลา {0} ของ {1} รวมทั้งหมด\",\n cleanCaption: \"คลีน\",\n clearCaption: \"เคลียร์\",\n chooseFileCaption: \"เลือกไฟล์\",\n removeFileCaption: \"นำไฟล์นี้ออก\",\n booleanCheckedLabel: \"ใช่\",\n booleanUncheckedLabel: \"ไม่ใช่\",\n confirmRemoveFile: \"คุณแน่ใจที่จะนำไฟล์นี้ออกใช่หรือไม่: {0}?\",\n confirmRemoveAllFiles: \"คุณแน่ใจที่จะนำไฟล์ทั้งหมดออกใช่หรือไม่\",\n questionTitlePatternText: \"ชื่อคำถาม\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"th\"] = thaiStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"th\"] = \"ไทย\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/traditional-chinese.ts\":\n/*!*************************************************!*\\\n !*** ./src/localization/traditional-chinese.ts ***!\n \\*************************************************/\n/*! exports provided: traditionalChineseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"traditionalChineseSurveyStrings\", function() { return traditionalChineseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar traditionalChineseSurveyStrings = {\n pagePrevText: \"上一頁\",\n pageNextText: \"下一頁\",\n completeText: \"提交問卷\",\n otherItemText: \"填寫其他答案\",\n progressText: \"第 {0} 頁, 共 {1} 頁\",\n emptySurvey: \"問卷中沒有問題或頁面\",\n completingSurvey: \"感謝您的參與!\",\n loadingSurvey: \"問卷載入中...\",\n optionsCaption: \"請選擇...\",\n requiredError: \"請填寫此問題\",\n requiredInAllRowsError: \"請填寫所有行中問題\",\n numericError: \"答案必須是個數字\",\n textMinLength: \"答案長度至少 {0} 個字元\",\n textMaxLength: \"答案長度不能超過 {0} 個字元\",\n textMinMaxLength: \"答案長度必須在 {0} - {1} 個字元之間\",\n minRowCountError: \"最少需要填寫 {0} 行答案\",\n minSelectError: \"最少需要選擇 {0} 項答案\",\n maxSelectError: \"最多只能選擇 {0} 項答案\",\n numericMinMax: \"答案 '{0}' 必須大於等於 {1} 且小於等於 {2}\",\n numericMin: \"答案 '{0}' 必須大於等於 {1}\",\n numericMax: \"答案 '{0}' 必須小於等於 {1}\",\n invalidEmail: \"請輸入有效的 Email 地址\",\n urlRequestError: \"載入選項時發生錯誤 '{0}': {1}\",\n urlGetChoicesError: \"未能載入有效的選項或請求參數路徑有誤\",\n exceedMaxSize: \"文件大小不能超過 {0}\",\n otherRequiredError: \"請完成其他問題\",\n uploadingFile: \"文件上傳中... 請耐心等待幾秒後重試\",\n addRow: \"添加答案\",\n removeRow: \"刪除答案\",\n choices_Item: \"選項\",\n matrix_column: \"列\",\n matrix_row: \"行\",\n savingData: \"正在將結果保存到服務器...\",\n savingDataError: \"在保存結果過程中發生了錯誤,結果未能保存\",\n savingDataSuccess: \"結果保存成功!\",\n saveAgainButton: \"請重試\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-tw\"] = traditionalChineseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-tw\"] = \"繁體中文\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/turkish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/turkish.ts ***!\n \\*************************************/\n/*! exports provided: turkishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"turkishSurveyStrings\", function() { return turkishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar turkishSurveyStrings = {\n pagePrevText: \"Geri\",\n pageNextText: \"İleri\",\n completeText: \"Anketi Tamamla\",\n previewText: \"Ön izleme\",\n editText: \"Düzenle\",\n startSurveyText: \"Başlat\",\n otherItemText: \"Diğer (açıklayınız)\",\n noneItemText: \"Yok\",\n selectAllItemText: \"Hepsini seç\",\n progressText: \"Sayfa {0} / {1}\",\n panelDynamicProgressText: \"Kayıt {0} / {1}\",\n questionsProgressText: \"Soruları cevapladı {0} / {1}\",\n emptySurvey: \"Ankette görüntülenecek sayfa ya da soru mevcut değil.\",\n completingSurvey: \"Anketimizi tamamladığınız için teşekkür ederiz.\",\n completingSurveyBefore: \"Kayıtlarımız, bu anketi zaten tamamladığınızı gösteriyor.\",\n loadingSurvey: \"Anket sunucudan yükleniyor ...\",\n optionsCaption: \"Seçiniz ...\",\n value: \"değer\",\n requiredError: \"Lütfen soruya cevap veriniz\",\n requiredErrorInPanel: \"Lütfen en az bir soruyu yanıtlayın.\",\n requiredInAllRowsError: \"Lütfen tüm satırlardaki soruları cevaplayınız.\",\n numericError: \"Girilen değer numerik olmalıdır\",\n textMinLength: \"En az {0} sembol giriniz.\",\n textMaxLength: \"Lütfen {0} karakterden az girin.\",\n textMinMaxLength: \"Lütfen {0} ’den fazla ve {1} ’den az karakter girin.\",\n minRowCountError: \"Lütfen en az {0} satırı doldurun.\",\n minSelectError: \"Lütfen en az {0} seçeneği seçiniz.\",\n maxSelectError: \"Lütfen {0} adetten fazla seçmeyiniz.\",\n numericMinMax: \"The '{0}' should be equal or more than {1} and equal or less than {2}\",\n numericMin: \"'{0}' değeri {1} değerine eşit veya büyük olmalıdır\",\n numericMax: \"'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.\",\n invalidEmail: \"Lütfen geçerli bir eposta adresi giriniz.\",\n invalidExpression: \"İfade: {0} 'true' döndürmelidir.\",\n urlRequestError: \"Talebi şu hatayı döndü '{0}'. {1}\",\n urlGetChoicesError: \"Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.\",\n exceedMaxSize: \"Dosya boyutu {0} değerini geçemez.\",\n otherRequiredError: \"Lütfen diğer değerleri giriniz.\",\n uploadingFile: \"Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.\",\n loadingFile: \"Yükleniyor...\",\n chooseFile: \"Dosyaları seçin ...\",\n noFileChosen: \"Dosya seçili değil\",\n confirmDelete: \"Kaydı silmek istiyor musunuz?\",\n keyDuplicationError: \"Bu değer benzersiz olmalıdır.\",\n addColumn: \"Sütun ekleyin\",\n addRow: \"Satır Ekle\",\n removeRow: \"Kaldır\",\n addPanel: \"Yeni ekle\",\n removePanel: \"Kaldırmak\",\n choices_Item: \"eşya\",\n matrix_column: \"Sütun\",\n matrix_row: \"Kürek çekmek\",\n savingData: \"Sonuçlar sunucuya kaydediliyor ...\",\n savingDataError: \"Bir hata oluştu ve sonuçları kaydedemedik.\",\n savingDataSuccess: \"Sonuçlar başarıyla kaydedildi!\",\n saveAgainButton: \"Tekrar deneyin\",\n timerMin: \"min\",\n timerSec: \"saniye\",\n timerSpentAll: \"Bu sayfada {0} ve toplamda {1} harcadınız.\",\n timerSpentPage: \"Bu sayfaya {0} harcadınız.\",\n timerSpentSurvey: \"Toplamda {0} harcadınız.\",\n timerLimitAll: \"Bu sayfaya {0} / {1} ve toplamda {2} / {3} harcadınız.\",\n timerLimitPage: \"Bu sayfaya {0} / {1} harcadınız.\",\n timerLimitSurvey: \"Toplamda {0} / {1} harcadınız.\",\n cleanCaption: \"Temiz\",\n clearCaption: \"Açık\",\n chooseFileCaption: \"Dosya seçin\",\n removeFileCaption: \"Bu dosyayı kaldır\",\n booleanCheckedLabel: \"Evet\",\n booleanUncheckedLabel: \"Hayır\",\n confirmRemoveFile: \"Bu dosyayı kaldırmak istediğinizden emin misiniz: {0}?\",\n confirmRemoveAllFiles: \"Tüm dosyaları kaldırmak istediğinizden emin misiniz?\",\n questionTitlePatternText: \"Soru başlığı\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tr\"] = turkishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tr\"] = \"türkçe\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/ukrainian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/ukrainian.ts ***!\n \\***************************************/\n/*! exports provided: ukrainianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ukrainianSurveyStrings\", function() { return ukrainianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar ukrainianSurveyStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Далі\",\n completeText: \"Завершити\",\n previewText: \"Попередній перегляд\",\n editText: \"Редагувати\",\n startSurveyText: \"Почати\",\n otherItemText: \"Інше (будь ласка, опишіть)\",\n noneItemText: \"Жоден\",\n selectAllItemText: \"Вибрати все\",\n progressText: \"Сторінка {0} з {1}\",\n panelDynamicProgressText: \"Запис {0} із {1}\",\n questionsProgressText: \"Відповіли на {0}/{1} питань\",\n emptySurvey: \"Немає жодного питання.\",\n completingSurvey: \"Дякуємо Вам за заповнення анкети!\",\n completingSurveyBefore: \"Ви вже проходили це опитування.\",\n loadingSurvey: \"Завантаження опитування...\",\n optionsCaption: \"Вибрати...\",\n value: \"значення\",\n requiredError: \"Будь ласка, дайте відповідь.\",\n requiredErrorInPanel: \"Будь ласка, дайте відповідь хоча б на одне питання.\",\n requiredInAllRowsError: \"Будь ласка, дайте відповідь на питання в кожному рядку.\",\n numericError: \"Відповідь повинна бути числом.\",\n textMinLength: \"Будь ласка введіть більше {0} символів.\",\n textMaxLength: \"Будь ласка введіть менше {0} символів.\",\n textMinMaxLength: \"Будь ласка введіть більше {0} и менше {1} символів.\",\n minRowCountError: \"Будь ласка, заповніть не менше {0} рядків.\",\n minSelectError: \"Будь ласка, виберіть хоча б {0} варіантів.\",\n maxSelectError: \"Будь ласка, виберіть не більше {0} варіантів.\",\n numericMinMax: \"'{0}' повинно бути не менше ніж {1}, і не більше ніж {2}\",\n numericMin: \"'{0}' повинно бути не менше ніж {1}\",\n numericMax: \"'{0}' повинно бути не більше ніж {1}\",\n invalidEmail: \"Будь ласка, введіть дійсну адресу електронної пошти.\",\n invalidExpression: \"Вираз {0} повинен повертати 'true'.\",\n urlRequestError: \"Запит повернув помилку '{0}'. {1}\",\n urlGetChoicesError: \"Відповідь на запит повернулась порожньою або властивіть 'path' вказано невірно\",\n exceedMaxSize: \"Розмір файлу не повинен перевищувати {0}.\",\n otherRequiredError: \"Будь ласка, введіть дані в поле 'Інше'\",\n uploadingFile: \"Ваш файл завантажується. Зачекайте декілька секунд і спробуйте знову.\",\n loadingFile: \"Завантаження...\",\n chooseFile: \"Виберіть файл(и)...\",\n noFileChosen: \"Файл не вибрано\",\n confirmDelete: \"Ви хочете видалити запис?\",\n keyDuplicationError: \"Це значення повинно бути унікальним.\",\n addColumn: \"Додати колонку\",\n addRow: \"Додати рядок\",\n removeRow: \"Видалити\",\n addPanel: \"Додати нову\",\n removePanel: \"Видалити\",\n choices_Item: \"Варіант\",\n matrix_column: \"Колонка\",\n matrix_row: \"Рядок\",\n savingData: \"Результати зберігаються на сервер...\",\n savingDataError: \"Відбулася помилка, результат не був збережений.\",\n savingDataSuccess: \"Резвультат успішно збережений!\",\n saveAgainButton: \"Спробувати знову\",\n timerMin: \"хв\",\n timerSec: \"сек\",\n timerSpentAll: \"Ви витратили {0} на цій сторінці і {1} загалом.\",\n timerSpentPage: \"Ви витратили {0} на цій сторінці.\",\n timerSpentSurvey: \"Ви витратили {0} протягом тесту.\",\n timerLimitAll: \"Ви витратили {0} з {1} на цій сторінці і {2} з {3} для всього тесту.\",\n timerLimitPage: \"Ви витратили {0} з {1} на цій сторінці.\",\n timerLimitSurvey: \"Ви витратили {0} з {1} для всього тесту.\",\n cleanCaption: \"Очистити\",\n clearCaption: \"Очистити\",\n chooseFileCaption: \"Виберіть файл\",\n removeFileCaption: \"Видалити файл\",\n booleanCheckedLabel: \"Так\",\n booleanUncheckedLabel: \"Ні\",\n confirmRemoveFile: \"Ви впевнені, що хочете видалити цей файл: {0}?\",\n confirmRemoveAllFiles: \"Ви впевнені, що хочете видалити всі файли?\",\n questionTitlePatternText: \"Назва запитання\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ua\"] = ukrainianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ua\"] = \"українська\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/vietnamese.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/vietnamese.ts ***!\n \\****************************************/\n/*! exports provided: vietnameseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"vietnameseSurveyStrings\", function() { return vietnameseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Uncomment this line on creating a translation file\n\nvar vietnameseSurveyStrings = {\n pagePrevText: \"Previous\",\n pageNextText: \"Next\",\n completeText: \"Complete\",\n previewText: \"Preview\",\n editText: \"Edit\",\n startSurveyText: \"Start\",\n otherItemText: \"Other (describe)\",\n noneItemText: \"None\",\n selectAllItemText: \"Select All\",\n progressText: \"Page {0} of {1}\",\n panelDynamicProgressText: \"Record {0} of {1}\",\n questionsProgressText: \"Answered {0}/{1} questions\",\n emptySurvey: \"There is no visible page or question in the survey.\",\n completingSurvey: \"Thank you for completing the survey!\",\n completingSurveyBefore: \"Our records show that you have already completed this survey.\",\n loadingSurvey: \"Loading Survey...\",\n optionsCaption: \"Chọn...\",\n value: \"value\",\n requiredError: \"Please answer the question.\",\n requiredErrorInPanel: \"Please answer at least one question.\",\n requiredInAllRowsError: \"Please answer questions in all rows.\",\n numericError: \"The value should be numeric.\",\n textMinLength: \"Please enter at least {0} characters.\",\n textMaxLength: \"Please enter less than {0} characters.\",\n textMinMaxLength: \"Please enter more than {0} and less than {1} characters.\",\n minRowCountError: \"Please fill in at least {0} rows.\",\n minSelectError: \"Please select at least {0} variants.\",\n maxSelectError: \"Please select no more than {0} variants.\",\n numericMinMax: \"The '{0}' should be equal or more than {1} and equal or less than {2}\",\n numericMin: \"The '{0}' should be equal or more than {1}\",\n numericMax: \"The '{0}' should be equal or less than {1}\",\n invalidEmail: \"Please enter a valid e-mail address.\",\n invalidExpression: \"The expression: {0} should return 'true'.\",\n urlRequestError: \"The request returned error '{0}'. {1}\",\n urlGetChoicesError: \"The request returned empty data or the 'path' property is incorrect\",\n exceedMaxSize: \"The file size should not exceed {0}.\",\n otherRequiredError: \"Please enter the other value.\",\n uploadingFile: \"Your file is uploading. Please wait several seconds and try again.\",\n loadingFile: \"Loading...\",\n chooseFile: \"Choose file(s)...\",\n noFileChosen: \"No file chosen\",\n confirmDelete: \"Do you want to delete the record?\",\n keyDuplicationError: \"This value should be unique.\",\n addColumn: \"Add column\",\n addRow: \"Add row\",\n removeRow: \"Remove\",\n addPanel: \"Add new\",\n removePanel: \"Remove\",\n choices_Item: \"item\",\n matrix_column: \"Column\",\n matrix_row: \"Row\",\n savingData: \"The results are saving on the server...\",\n savingDataError: \"An error occurred and we could not save the results.\",\n savingDataSuccess: \"The results were saved successfully!\",\n saveAgainButton: \"Try again\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"You have spent {0} on this page and {1} in total.\",\n timerSpentPage: \"You have spent {0} on this page.\",\n timerSpentSurvey: \"You have spent {0} in total.\",\n timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\",\n timerLimitPage: \"You have spent {0} of {1} on this page.\",\n timerLimitSurvey: \"You have spent {0} of {1} in total.\",\n cleanCaption: \"Clean\",\n clearCaption: \"Clear\",\n chooseFileCaption: \"Choose file\",\n removeFileCaption: \"Remove this file\",\n booleanCheckedLabel: \"Yes\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\",\n confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\",\n questionTitlePatternText: \"Question Title\",\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"vi\"] = vietnameseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"vi\"] = \"vietnamese\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/welsh.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/welsh.ts ***!\n \\***********************************/\n/*! exports provided: welshSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"welshSurveyStrings\", function() { return welshSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar welshSurveyStrings = {\n pagePrevText: \"Blaenorol\",\n pageNextText: \"Nesaf\",\n completeText: \"Cwblhau\",\n previewText: \"Rhagolwg\",\n editText: \"Golygu\",\n startSurveyText: \"Dechrau\",\n otherItemText: \"Arall (disgrifiwch)\",\n noneItemText: \"Dim\",\n selectAllItemText: \"Dewis y Cyfan \",\n progressText: \"Tudalen {0} o {1}\",\n panelDynamicProgressText: \"Cofnod {0} o {1}\",\n questionsProgressText: \"Wedi ateb {0}/{1} cwestiwn\",\n emptySurvey: \"Does dim modd gweld tudalen na chwestiwn yn yr arolwg.\",\n completingSurvey: \"Diolch am lenwi’r holiadur!\",\n completingSurveyBefore: \"Rydych chi wedi llenwi’r arolwg hwn yn barod yn ôl ein cofnodion.\",\n loadingSurvey: \"Wrthi’n Llwytho’r Arolwg...\",\n optionsCaption: \"Dewiswch...\",\n value: \"gwerth\",\n requiredError: \"Atebwch y cwestiwn.\",\n requiredErrorInPanel: \"Atebwch o leiaf un cwestiwn.\",\n requiredInAllRowsError: \"Atebwch y cwestiynau ym mhob rhes.\",\n numericError: \"Dylai’r gwerth fod yn rhif.\",\n textMinLength: \"Rhowch o leiaf {0} nod.\",\n textMaxLength: \"Rhowch lai na {0} nod.\",\n textMinMaxLength: \"Rhowch o leiaf {0} nod ond dim mwy na {1}.\",\n minRowCountError: \"Llenwch o leiaf {0} rhes.\",\n minSelectError: \"Dewiswch o leiaf {0} amrywiolyn.\",\n maxSelectError: \"Peidiwch â dewis mwy na {0} amrywiolyn.\",\n numericMinMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy, a’r fath â {2} neu’n llai\",\n numericMin: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy\",\n numericMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n llai\",\n invalidEmail: \"Rhowch gyfeiriad e-bost dilys.\",\n invalidExpression: \"Dylai’r mynegiad {0} arwain at 'true'.\",\n urlRequestError: \"Roedd y cais wedi arwain at y gwall '{0}'. {1}\",\n urlGetChoicesError: \"Roedd y cais wedi arwain at ddata gwag neu mae priodwedd y ‘path’ yn anghywir \",\n exceedMaxSize: \"Ddylai’r ffeil ddim bod yn fwy na {0}.\",\n otherRequiredError: \"Rhowch y gwerth arall.\",\n uploadingFile: \"Mae eich ffeil wrthi’n llwytho i fyny. Arhoswch ychydig o eiliadau a rhoi cynnig arall arni.\",\n loadingFile: \"Wrthi’n llwytho...\",\n chooseFile: \"Dewiswch ffeil(iau)...\",\n noFileChosen: \"Heb ddewis ffeil \",\n confirmDelete: \"Ydych chi am ddileu’r cofnod?\",\n keyDuplicationError: \"Dylai’r gwerth hwn fod yn unigryw.\",\n addColumn: \"Ychwanegu colofn \",\n addRow: \"Ychwanegu rhes\",\n removeRow: \"Tynnu\",\n addPanel: \"Ychwanegu o’r newydd\",\n removePanel: \"Tynnu\",\n choices_Item: \"eitem\",\n matrix_column: \"Colofn\",\n matrix_row: \"Rhes\",\n savingData: \"Mae’r canlyniadau’n cael eu cadw ar y gweinydd...\",\n savingDataError: \"Roedd gwall a doedd dim modd cadw’r canlyniadau.\",\n savingDataSuccess: \"Wedi llwyddo i gadw’r canlyniadau!\",\n saveAgainButton: \"Rhowch gynnig arall arni\",\n timerMin: \"mun\",\n timerSec: \"eil\",\n timerSpentAll: \"Rydych chi wedi treulio {0} ar y dudalen hon a {1} gyda’i gilydd.\",\n timerSpentPage: \"Rydych chi wedi treulio {0} ar y dudalen hon.\",\n timerSpentSurvey: \"Rydych chi wedi treulio {0} gyda’i gilydd.\",\n timerLimitAll: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon a {2} o {3} gyda’i gilydd.\",\n timerLimitPage: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon.\",\n timerLimitSurvey: \"Rydych chi wedi treulio {0} o {1} gyda’i gilydd.\",\n cleanCaption: \"Glanhau\",\n clearCaption: \"Clirio\",\n chooseFileCaption: \"Dewiswch ffeil \",\n removeFileCaption: \"Tynnu’r ffeil hon \",\n booleanCheckedLabel: \"Iawn\",\n booleanUncheckedLabel: \"Na\",\n confirmRemoveFile: \"Ydych chi’n siŵr eich bod am dynnu’r ffeil hon: {0}?\",\n confirmRemoveAllFiles: \"Ydych chi’n siŵr eich bod am dynnu pob ffeil?\",\n questionTitlePatternText: \"Teitl y Cwestiwn \",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cy\"] = welshSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cy\"] = \"cymraeg\";\n\n\n/***/ }),\n\n/***/ \"./src/main.scss\":\n/*!***********************!*\\\n !*** ./src/main.scss ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n// extracted by mini-css-extract-plugin\n\n/***/ }),\n\n/***/ \"./src/martixBase.ts\":\n/*!***************************!*\\\n !*** ./src/martixBase.ts ***!\n \\***************************/\n/*! exports provided: QuestionMatrixBaseModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixBaseModel\", function() { return QuestionMatrixBaseModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a matrix base question.\n */\nvar QuestionMatrixBaseModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixBaseModel, _super);\n function QuestionMatrixBaseModel(name) {\n var _this = _super.call(this, name) || this;\n _this.generatedVisibleRows = null;\n _this.generatedTotalRow = null;\n _this.filteredRows = null;\n _this.filteredColumns = null;\n _this.columns = _this.createColumnValues();\n _this.rows = _this.createItemValues(\"rows\");\n return _this;\n }\n QuestionMatrixBaseModel.prototype.createColumnValues = function () {\n return this.createItemValues(\"columns\");\n };\n QuestionMatrixBaseModel.prototype.getType = function () {\n return \"matrixbase\";\n };\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"showHeader\", {\n /**\n * Set this property to false, to hide table header. The default value is true.\n */\n get: function () {\n return this.getPropertyValue(\"showHeader\");\n },\n set: function (val) {\n this.setPropertyValue(\"showHeader\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columns\", {\n /**\n * The list of columns. A column has a value and an optional text\n */\n get: function () {\n return this.getPropertyValue(\"columns\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"columns\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleColumns\", {\n get: function () {\n return !!this.filteredColumns ? this.filteredColumns : this.columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rows\", {\n /**\n * The list of rows. A row has a value and an optional text\n */\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n set: function (newValue) {\n var newRows = this.processRowsOnSet(newValue);\n this.setPropertyValue(\"rows\", newRows);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixBaseModel.prototype.processRowsOnSet = function (newRows) {\n return newRows;\n };\n QuestionMatrixBaseModel.prototype.getVisibleRows = function () {\n return [];\n };\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleRows\", {\n /**\n * Returns the list of visible rows as model objects.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getVisibleRows();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rowsVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each row item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"rowsVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"rowsVisibleIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columnsVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each column item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getPropertyValue(\"columnsVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnsVisibleIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixBaseModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runItemsCondition(values, properties);\n };\n QuestionMatrixBaseModel.prototype.filterItems = function () {\n if (this.areInvisibleElementsShowing) {\n this.onRowsChanged();\n return false;\n }\n if (this.isLoadingFromJson || !this.data)\n return false;\n return this.runItemsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n };\n QuestionMatrixBaseModel.prototype.onColumnsChanged = function () { };\n QuestionMatrixBaseModel.prototype.onRowsChanged = function () {\n this.fireCallback(this.visibleRowsChangedCallback);\n };\n QuestionMatrixBaseModel.prototype.shouldRunColumnExpression = function () {\n return !this.survey || !this.survey.areInvisibleElementsShowing;\n };\n QuestionMatrixBaseModel.prototype.hasRowsAsItems = function () {\n return true;\n };\n QuestionMatrixBaseModel.prototype.runItemsCondition = function (values, properties) {\n var oldVisibleRows = null;\n if (!!this.filteredRows && !_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isValueEmpty(this.defaultValue)) {\n oldVisibleRows = [];\n for (var i = 0; i < this.filteredRows.length; i++) {\n oldVisibleRows.push(this.filteredRows[i]);\n }\n }\n var hasChanges = this.hasRowsAsItems() && this.runConditionsForRows(values, properties);\n var hasColumnsChanged = this.runConditionsForColumns(values, properties);\n hasChanges = hasColumnsChanged || hasChanges;\n if (hasChanges) {\n if (!!this.survey &&\n this.survey.isClearValueOnHidden &&\n (!!this.filteredColumns || !!this.filteredRows)) {\n this.clearIncorrectValues();\n }\n if (!!oldVisibleRows) {\n this.restoreNewVisibleRowsValues(oldVisibleRows);\n }\n this.clearGeneratedRows();\n if (hasColumnsChanged) {\n this.onColumnsChanged();\n }\n this.onRowsChanged();\n }\n return hasChanges;\n };\n QuestionMatrixBaseModel.prototype.clearGeneratedRows = function () {\n this.generatedVisibleRows = null;\n };\n QuestionMatrixBaseModel.prototype.runConditionsForRows = function (values, properties) {\n var showInvisibile = !!this.survey && this.survey.areInvisibleElementsShowing;\n var runner = !showInvisibile && !!this.rowsVisibleIf\n ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.rowsVisibleIf)\n : null;\n this.filteredRows = [];\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].runConditionsForItems(this.rows, this.filteredRows, runner, values, properties, !showInvisibile);\n if (this.filteredRows.length === this.rows.length) {\n this.filteredRows = null;\n }\n return hasChanged;\n };\n QuestionMatrixBaseModel.prototype.runConditionsForColumns = function (values, properties) {\n var useColumnsExpression = !!this.survey && !this.survey.areInvisibleElementsShowing;\n var runner = useColumnsExpression && !!this.columnsVisibleIf\n ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.columnsVisibleIf)\n : null;\n this.filteredColumns = [];\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].runConditionsForItems(this.columns, this.filteredColumns, runner, values, properties, this.shouldRunColumnExpression());\n if (this.filteredColumns.length === this.columns.length) {\n this.filteredColumns = null;\n }\n return hasChanged;\n };\n QuestionMatrixBaseModel.prototype.clearIncorrectValues = function () {\n var val = this.value;\n if (!val)\n return;\n var newVal = null;\n var isChanged = false;\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n var columns = !!this.filteredColumns ? this.filteredColumns : this.columns;\n for (var key in val) {\n if (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(columns, val[key])) {\n if (newVal == null)\n newVal = {};\n newVal[key] = val[key];\n }\n else {\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newVal;\n }\n _super.prototype.clearIncorrectValues.call(this);\n };\n QuestionMatrixBaseModel.prototype.clearInvisibleValuesInRows = function () {\n if (this.isEmpty())\n return;\n var newData = this.getUnbindValue(this.value);\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n var key = rows[i].value;\n if (!!newData[key] && !rows[i].isVisible) {\n delete newData[key];\n }\n }\n if (_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isTwoValueEquals(newData, this.value))\n return;\n this.value = newData;\n };\n QuestionMatrixBaseModel.prototype.restoreNewVisibleRowsValues = function (oldVisibleRows) {\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n var val = this.defaultValue;\n var newValue = this.getUnbindValue(this.value);\n var isChanged = false;\n for (var key in val) {\n if (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n !_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(oldVisibleRows, key)) {\n if (newValue == null)\n newValue = {};\n newValue[key] = val[key];\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newValue;\n }\n };\n return QuestionMatrixBaseModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"matrixbase\", [\n \"columnsVisibleIf:condition\",\n \"rowsVisibleIf:condition\",\n { name: \"showHeader:boolean\", default: true },\n], undefined, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/page.ts\":\n/*!*********************!*\\\n !*** ./src/page.ts ***!\n \\*********************/\n/*! exports provided: PageModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return PageModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./panel */ \"./src/panel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * The page object. It has elements collection, that contains questions and panels.\n */\nvar PageModel = /** @class */ (function (_super) {\n __extends(PageModel, _super);\n function PageModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.hasShownValue = false;\n _this.isRandomizing = false;\n /**\n * Time in seconds end-user spent on this page\n */\n _this.timeSpent = 0;\n var self = _this;\n _this.locTitle.onGetTextCallback = function (text) {\n if (self.num > 0)\n return self.num + \". \" + text;\n return text;\n };\n _this.createLocalizableString(\"navigationTitle\", _this, true);\n _this.createLocalizableString(\"navigationDescription\", _this, true);\n return _this;\n }\n PageModel.prototype.getType = function () {\n return \"page\";\n };\n PageModel.prototype.toString = function () {\n return this.name;\n };\n Object.defineProperty(PageModel.prototype, \"isPage\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationTitle\", {\n /**\n * Use this property to show title in navigation buttons. If the value is empty then page name is used.\n * @see survey.progressBarType\n */\n get: function () {\n return this.getLocalizableStringText(\"navigationTitle\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"navigationTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"locNavigationTitle\", {\n get: function () {\n return this.getLocalizableString(\"navigationTitle\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationDescription\", {\n get: function () {\n return this.getLocalizableStringText(\"navigationDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"navigationDescription\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"locNavigationDescription\", {\n get: function () {\n return this.getLocalizableString(\"navigationDescription\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"passed\", {\n get: function () {\n return this.getPropertyValue(\"passed\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"passed\", val);\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.delete = function () {\n if (!!this.survey) {\n this.removeSelfFromList(this.survey.pages);\n }\n };\n PageModel.prototype.onFirstRendering = function () {\n if (this.wasShown)\n return;\n _super.prototype.onFirstRendering.call(this);\n };\n Object.defineProperty(PageModel.prototype, \"visibleIndex\", {\n /**\n * The visible index of the page. It has values from 0 to visible page count - 1.\n * @see SurveyModel.visiblePages\n * @see SurveyModel.pages\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIndex\", val);\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.canRenderFirstRows = function () {\n return !this.isDesignMode || this.visibleIndex == 0;\n };\n Object.defineProperty(PageModel.prototype, \"isStarted\", {\n /**\n * Returns true, if the page is started page in the survey. It can be shown on the start only and the end-user could not comeback to it after it passed it.\n */\n get: function () {\n return this.survey && this.survey.isPageStarted(this);\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.calcCssClasses = function () {\n var css = this.css;\n var classes = { page: {}, pageTitle: \"\", pageDescription: \"\", row: \"\" };\n this.copyCssClasses(classes.page, css.page);\n if (!!css.pageTitle) {\n classes.pageTitle = css.pageTitle;\n }\n if (!!css.pageDescription) {\n classes.pageDescription = css.pageDescription;\n }\n if (!!css.row) {\n classes.row = css.row;\n }\n if (this.survey) {\n this.survey.updatePageCssClasses(this, classes);\n }\n return classes;\n };\n PageModel.prototype.getIsPageVisible = function (exceptionQuestion) {\n if (this.isStarted)\n return false;\n return _super.prototype.getIsPageVisible.call(this, exceptionQuestion);\n };\n Object.defineProperty(PageModel.prototype, \"num\", {\n get: function () {\n return this.getPropertyValue(\"num\", -1);\n },\n set: function (val) {\n if (this.num == val)\n return;\n this.setPropertyValue(\"num\", val);\n this.onNumChanged(val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationButtonsVisibility\", {\n /**\n * Set this property to \"hide\" to make \"Prev\", \"Next\" and \"Complete\" buttons are invisible for this page. Set this property to \"show\" to make these buttons visible, even if survey showNavigationButtons property is false.\n * @see SurveyMode.showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"navigationButtonsVisibility\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigationButtonsVisibility\", val.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"wasShown\", {\n /**\n * The property returns true, if the page has been shown to the end-user.\n */\n get: function () {\n return this.hasShownValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"hasShown\", {\n get: function () {\n return this.wasShown;\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.setWasShown = function (val) {\n if (val == this.hasShownValue)\n return;\n this.hasShownValue = val;\n if (this.isDesignMode)\n return;\n if (val == true && this.areQuestionsRandomized) {\n this.randomizeElements();\n }\n };\n PageModel.prototype.randomizeElements = function () {\n if (this.isRandomizing)\n return;\n this.isRandomizing = true;\n var oldElements = [];\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n oldElements.push(elements[i]);\n }\n var newElements = _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].randomizeArray(oldElements);\n this.elements.splice(0, this.elements.length);\n for (var i = 0; i < newElements.length; i++) {\n this.elements.push(newElements[i]);\n }\n this.isRandomizing = false;\n };\n Object.defineProperty(PageModel.prototype, \"areQuestionsRandomized\", {\n /**\n * The property returns true, if the elements are randomized on the page\n * @see hasShown\n * @see questionsOrder\n * @see SurveyModel.questionsOrder\n */\n get: function () {\n var order = this.questionsOrder == \"default\" && this.survey\n ? this.survey.questionsOrder\n : this.questionsOrder;\n return order == \"random\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"questionsOrder\", {\n /**\n * Use this property to randomize questions. Set it to 'random' to randomize questions, 'initial' to keep them in the same order or 'default' to use the Survey questionsOrder property\n * @see SurveyModel.questionsOrder\n * @see areQuestionsRandomized\n */\n get: function () {\n return this.getPropertyValue(\"questionsOrder\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOrder\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Call it to scroll to the page top.\n */\n PageModel.prototype.scrollToTop = function () {\n if (!!this.survey) {\n this.survey.scrollElementToTop(this, null, this, this.id);\n }\n };\n // public get timeSpent(): number {\n // return this.getPropertyValue(\"timeSpent\", 0);\n // }\n // public set timeSpent(val: number) {\n // this.setPropertyValue(\"timeSpent\", val);\n // }\n /**\n * Returns the list of all panels in the page\n */\n PageModel.prototype.getPanels = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n this.addPanelsIntoList(result, visibleOnly, includingDesignTime);\n return result;\n };\n Object.defineProperty(PageModel.prototype, \"maxTimeToFinish\", {\n /**\n * The maximum time in seconds that end-user has to complete the page. If the value is 0 or less, the end-user has unlimited number of time to finish the page.\n * @see startTimer\n * @see SurveyModel.maxTimeToFinishPage\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinish\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinish\", val);\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.onNumChanged = function (value) { };\n PageModel.prototype.onVisibleChanged = function () {\n if (this.isRandomizing)\n return;\n _super.prototype.onVisibleChanged.call(this);\n if (this.survey != null) {\n this.survey.pageVisibilityChanged(this, this.isVisible);\n }\n };\n PageModel.prototype.dragDropStart = function (src, target, nestedPanelDepth) {\n if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n this.dragDropInfo = new _panel__WEBPACK_IMPORTED_MODULE_2__[\"DragDropInfo\"](src, target, nestedPanelDepth);\n };\n PageModel.prototype.dragDropMoveTo = function (destination, isBottom, isEdge) {\n if (isBottom === void 0) { isBottom = false; }\n if (isEdge === void 0) { isEdge = false; }\n if (!this.dragDropInfo)\n return false;\n this.dragDropInfo.destination = destination;\n this.dragDropInfo.isBottom = isBottom;\n this.dragDropInfo.isEdge = isEdge;\n this.correctDragDropInfo(this.dragDropInfo);\n if (!this.dragDropCanDropTagert())\n return false;\n if (!this.dragDropCanDropSource() || !this.dragDropAllowFromSurvey()) {\n if (!!this.dragDropInfo.source) {\n var row = this.dragDropFindRow(this.dragDropInfo.target);\n this.updateRowsRemoveElementFromRow(this.dragDropInfo.target, row);\n }\n return false;\n }\n this.dragDropAddTarget(this.dragDropInfo);\n return true;\n };\n PageModel.prototype.correctDragDropInfo = function (dragDropInfo) {\n if (!dragDropInfo.destination)\n return;\n var panel = dragDropInfo.destination.isPanel\n ? dragDropInfo.destination\n : null;\n if (!panel)\n return;\n if (!dragDropInfo.target.isLayoutTypeSupported(panel.getChildrenLayoutType())) {\n dragDropInfo.isEdge = true;\n }\n };\n PageModel.prototype.dragDropAllowFromSurvey = function () {\n var dest = this.dragDropInfo.destination;\n if (!dest || !this.survey)\n return true;\n var insertBefore = null;\n var insertAfter = null;\n var parent = dest.isPage || (!this.dragDropInfo.isEdge && dest.isPanel)\n ? dest\n : dest.parent;\n if (!dest.isPage) {\n var container = dest.parent;\n if (!!container) {\n var elements = container.elements;\n var index = elements.indexOf(dest);\n if (index > -1) {\n insertBefore = dest;\n insertAfter = dest;\n if (this.dragDropInfo.isBottom) {\n insertBefore =\n index < elements.length - 1 ? elements[index + 1] : null;\n }\n else {\n insertAfter = index > 0 ? elements[index - 1] : null;\n }\n }\n }\n }\n var options = {\n target: this.dragDropInfo.target,\n source: this.dragDropInfo.source,\n parent: parent,\n insertAfter: insertAfter,\n insertBefore: insertBefore,\n };\n return this.survey.dragAndDropAllow(options);\n };\n PageModel.prototype.dragDropFinish = function (isCancel) {\n if (isCancel === void 0) { isCancel = false; }\n if (!this.dragDropInfo)\n return;\n var target = this.dragDropInfo.target;\n var row = this.dragDropFindRow(target);\n var targetIndex = this.dragDropGetElementIndex(target, row);\n this.updateRowsRemoveElementFromRow(target, row);\n if (!isCancel && !!row) {\n var src = this.dragDropInfo.source;\n var isSamePanel = false;\n if (!!src && !!src.parent) {\n isSamePanel = row.panel == src.parent;\n if (isSamePanel) {\n row.panel.dragDropMoveElement(src, target, targetIndex);\n targetIndex = -1;\n }\n else {\n src.parent.removeElement(src);\n }\n }\n if (targetIndex > -1) {\n row.panel.addElement(target, targetIndex);\n }\n }\n this.dragDropInfo = null;\n return !isCancel ? target : null;\n };\n PageModel.prototype.dragDropGetElementIndex = function (target, row) {\n if (!row)\n return -1;\n var index = row.elements.indexOf(target);\n if (row.index == 0)\n return index;\n var prevRow = row.panel.rows[row.index - 1];\n var prevElement = prevRow.elements[prevRow.elements.length - 1];\n return index + row.panel.elements.indexOf(prevElement) + 1;\n };\n PageModel.prototype.dragDropCanDropTagert = function () {\n var destination = this.dragDropInfo.destination;\n if (!destination || destination.isPage)\n return true;\n return this.dragDropCanDropCore(this.dragDropInfo.target, destination);\n };\n PageModel.prototype.dragDropCanDropSource = function () {\n var source = this.dragDropInfo.source;\n if (!source)\n return true;\n var destination = this.dragDropInfo.destination;\n if (!this.dragDropCanDropCore(source, destination))\n return false;\n return this.dragDropCanDropNotNext(source, destination, this.dragDropInfo.isEdge, this.dragDropInfo.isBottom);\n };\n PageModel.prototype.dragDropCanDropCore = function (target, destination) {\n if (!destination)\n return true;\n if (this.dragDropIsSameElement(destination, target))\n return false;\n if (target.isPanel) {\n var pnl = target;\n if (pnl.containsElement(destination) ||\n !!pnl.getElementByName(destination.name))\n return false;\n }\n return true;\n };\n PageModel.prototype.dragDropCanDropNotNext = function (source, destination, isEdge, isBottom) {\n if (!destination || (destination.isPanel && !isEdge))\n return true;\n if (typeof source.parent === \"undefined\" || source.parent !== destination.parent)\n return true;\n var pnl = source.parent;\n var srcIndex = pnl.elements.indexOf(source);\n var destIndex = pnl.elements.indexOf(destination);\n if (destIndex < srcIndex && !isBottom)\n destIndex--;\n if (isBottom)\n destIndex++;\n return srcIndex < destIndex\n ? destIndex - srcIndex > 1\n : srcIndex - destIndex > 0;\n };\n PageModel.prototype.dragDropIsSameElement = function (el1, el2) {\n return el1 == el2 || el1.name == el2.name;\n };\n PageModel.prototype.ensureRowsVisibility = function () {\n _super.prototype.ensureRowsVisibility.call(this);\n this.getPanels().forEach(function (panel) { return panel.ensureRowsVisibility(); });\n };\n return PageModel;\n}(_panel__WEBPACK_IMPORTED_MODULE_2__[\"PanelModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"page\", [\n {\n name: \"navigationButtonsVisibility\",\n default: \"inherit\",\n choices: [\"inherit\", \"show\", \"hide\"],\n },\n {\n name: \"questionsOrder\",\n default: \"default\",\n choices: [\"default\", \"initial\", \"random\"],\n },\n { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 },\n {\n name: \"navigationTitle\",\n visibleIf: function (obj) {\n return !!obj.survey && obj.survey.progressBarType === \"buttons\";\n },\n serializationProperty: \"locNavigationTitle\",\n },\n {\n name: \"navigationDescription\",\n visibleIf: function (obj) {\n return !!obj.survey && obj.survey.progressBarType === \"buttons\";\n },\n serializationProperty: \"locNavigationDescription\",\n },\n { name: \"title:text\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\n], function () {\n return new PageModel();\n}, \"panelbase\");\n\n\n/***/ }),\n\n/***/ \"./src/panel.ts\":\n/*!**********************!*\\\n !*** ./src/panel.ts ***!\n \\**********************/\n/*! exports provided: DragDropInfo, QuestionRowModel, PanelModelBase, PanelModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropInfo\", function() { return DragDropInfo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return QuestionRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return PanelModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return PanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\nvar DragDropInfo = /** @class */ (function () {\n function DragDropInfo(source, target, nestedPanelDepth) {\n if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n this.source = source;\n this.target = target;\n this.nestedPanelDepth = nestedPanelDepth;\n }\n return DragDropInfo;\n}());\n\nvar QuestionRowModel = /** @class */ (function (_super) {\n __extends(QuestionRowModel, _super);\n function QuestionRowModel(panel) {\n var _this = _super.call(this) || this;\n _this.panel = panel;\n _this._scrollableParent = undefined;\n _this._updateVisibility = undefined;\n _this.idValue = QuestionRowModel.getRowId();\n _this.visible = panel.areInvisibleElementsShowing;\n _this.createNewArray(\"elements\");\n _this.createNewArray(\"visibleElements\");\n return _this;\n }\n QuestionRowModel.getRowId = function () {\n return \"pr_\" + QuestionRowModel.rowCounter++;\n };\n QuestionRowModel.prototype.startLazyRendering = function (rowContainerDiv, findScrollableContainer) {\n var _this = this;\n if (findScrollableContainer === void 0) { findScrollableContainer = _utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"findScrollableParent\"]; }\n this._scrollableParent = findScrollableContainer(rowContainerDiv);\n this.isNeedRender = !(this._scrollableParent.scrollHeight > this._scrollableParent.clientHeight);\n // if this._scrollableParent is html the scroll event isn't fired, so we should use window\n if (this._scrollableParent === document.documentElement) {\n this._scrollableParent = window;\n }\n if (!this.isNeedRender) {\n this._updateVisibility = function () {\n var isRowContainerDivVisible = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"isElementVisible\"])(rowContainerDiv, 50);\n if (!_this.isNeedRender && isRowContainerDivVisible) {\n _this.isNeedRender = true;\n _this.stopLazyRendering();\n }\n };\n setTimeout(function () {\n if (!!_this._scrollableParent &&\n !!_this._scrollableParent.addEventListener) {\n _this._scrollableParent.addEventListener(\"scroll\", _this._updateVisibility);\n }\n _this.ensureVisibility();\n }, 10);\n }\n };\n QuestionRowModel.prototype.ensureVisibility = function () {\n if (!!this._updateVisibility) {\n this._updateVisibility();\n }\n };\n QuestionRowModel.prototype.stopLazyRendering = function () {\n if (!!this._scrollableParent &&\n !!this._updateVisibility &&\n !!this._scrollableParent.removeEventListener) {\n this._scrollableParent.removeEventListener(\"scroll\", this._updateVisibility);\n }\n this._scrollableParent = undefined;\n this._updateVisibility = undefined;\n };\n QuestionRowModel.prototype.setIsLazyRendering = function (val) {\n this.isLazyRenderingValue = val;\n this.isNeedRender = !val;\n };\n QuestionRowModel.prototype.isLazyRendering = function () {\n return this.isLazyRenderingValue === true;\n };\n Object.defineProperty(QuestionRowModel.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"elements\", {\n get: function () {\n return this.getPropertyValue(\"elements\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"visibleElements\", {\n get: function () {\n return this.getPropertyValue(\"visibleElements\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"visible\", {\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"visible\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"isNeedRender\", {\n get: function () {\n return this.getPropertyValue(\"isneedrender\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"isneedrender\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionRowModel.prototype.updateVisible = function () {\n this.visible = this.calcVisible();\n this.setWidth();\n };\n QuestionRowModel.prototype.addElement = function (q) {\n this.elements.push(q);\n this.updateVisible();\n };\n Object.defineProperty(QuestionRowModel.prototype, \"index\", {\n get: function () {\n return this.panel.rows.indexOf(this);\n },\n enumerable: false,\n configurable: true\n });\n QuestionRowModel.prototype.setWidth = function () {\n var visCount = this.visibleElements.length;\n if (visCount == 0)\n return;\n var counter = 0;\n var preSetWidthElements = [];\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n this.setElementMaxMinWidth(el);\n if (el.isVisible) {\n var width = this.getElementWidth(el);\n if (!!width) {\n el.renderWidth = this.getRenderedWidthFromWidth(width);\n preSetWidthElements.push(el);\n }\n el.rightIndent = counter < visCount - 1 ? 1 : 0;\n counter++;\n }\n else {\n el.renderWidth = \"\";\n }\n }\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (!el.isVisible || preSetWidthElements.indexOf(el) > -1)\n continue;\n if (preSetWidthElements.length == 0) {\n el.renderWidth = (100 / visCount).toFixed(6) + \"%\";\n }\n else {\n el.renderWidth = this.getRenderedCalcWidth(el, preSetWidthElements, visCount);\n }\n }\n };\n QuestionRowModel.prototype.setElementMaxMinWidth = function (el) {\n if (el.width &&\n typeof el.width === \"string\" &&\n el.width.indexOf(\"%\") === -1) {\n el.minWidth = el.width;\n el.maxWidth = el.width;\n }\n };\n QuestionRowModel.prototype.getRenderedCalcWidth = function (el, preSetWidthElements, visCount) {\n var expression = \"100%\";\n for (var i = 0; i < preSetWidthElements.length; i++) {\n expression += \" - \" + preSetWidthElements[i].renderWidth;\n }\n var calcWidthEl = visCount - preSetWidthElements.length;\n if (calcWidthEl > 1) {\n expression = \"(\" + expression + \")/\" + calcWidthEl.toString();\n }\n return \"calc(\" + expression + \")\";\n };\n QuestionRowModel.prototype.getElementWidth = function (el) {\n var width = el.width;\n if (!width || typeof width !== \"string\")\n return \"\";\n return width.trim();\n };\n QuestionRowModel.prototype.getRenderedWidthFromWidth = function (width) {\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isNumber(width) ? width + \"px\" : width;\n };\n QuestionRowModel.prototype.calcVisible = function () {\n var visElements = [];\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i].isVisible) {\n visElements.push(this.elements[i]);\n }\n }\n if (this.needToUpdateVisibleElements(visElements)) {\n this.setPropertyValue(\"visibleElements\", visElements);\n }\n return visElements.length > 0;\n };\n QuestionRowModel.prototype.needToUpdateVisibleElements = function (visElements) {\n if (visElements.length !== this.visibleElements.length)\n return true;\n for (var i = 0; i < visElements.length; i++) {\n if (visElements[i] !== this.visibleElements[i])\n return true;\n }\n return false;\n };\n QuestionRowModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.stopLazyRendering();\n };\n QuestionRowModel.rowCounter = 100;\n return QuestionRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\n/**\n * A base class for a Panel and Page objects.\n */\nvar PanelModelBase = /** @class */ (function (_super) {\n __extends(PanelModelBase, _super);\n function PanelModelBase(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.isQuestionsReady = false;\n _this.questionsValue = new Array();\n _this.createNewArray(\"rows\");\n _this.elementsValue = _this.createNewArray(\"elements\", _this.onAddElement.bind(_this), _this.onRemoveElement.bind(_this));\n _this.id = PanelModelBase.getPanelId();\n _this.createLocalizableString(\"title\", _this, true);\n _this.createLocalizableString(\"description\", _this, true);\n _this.createLocalizableString(\"requiredErrorText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"questionTitleLocation\", function () {\n _this.onVisibleChanged.bind(_this);\n _this.updateElementCss(true);\n });\n _this.registerFunctionOnPropertiesValueChanged([\"questionStartIndex\", \"showQuestionNumbers\"], function () {\n _this.updateVisibleIndexes();\n });\n return _this;\n }\n PanelModelBase.getPanelId = function () {\n return \"sp_\" + PanelModelBase.panelCounter++;\n };\n PanelModelBase.prototype.getType = function () {\n return \"panelbase\";\n };\n PanelModelBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n if (this.isDesignMode)\n this.onVisibleChanged();\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setSurveyImpl(value);\n }\n };\n PanelModelBase.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.markQuestionListDirty();\n this.onRowsChanged();\n };\n Object.defineProperty(PanelModelBase.prototype, \"title\", {\n /**\n * PanelModel or PageModel title property.\n * @description\n */\n get: function () {\n return this.getLocalizableStringText(\"title\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"title\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"_showTitle\", {\n get: function () {\n return ((this.survey.showPageTitles && this.title.length > 0) ||\n (this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyTitleInDesignMode));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"_showDescription\", {\n get: function () {\n return ((this.survey.showPageTitles && this.description.length > 0) ||\n (this.isDesignMode &&\n _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyTitleInDesignMode &&\n _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyDescriptionInDesignMode));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"description\", {\n /**\n * PanelModel or PageModel description property. It renders under title by using smaller font. Unlike the title, description can be empty.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"description\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"description\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.localeChanged = function () {\n _super.prototype.localeChanged.call(this);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].localeChanged();\n }\n };\n PanelModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].locStrsChanged();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"requiredText\", {\n /**\n * Returns the char/string for a required panel.\n * @see SurveyModel.requiredText\n */\n get: function () {\n return this.survey != null && this.isRequired\n ? this.survey.requiredText\n : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"titlePattern\", {\n get: function () {\n return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextOnStart\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"requireNumTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextBeforeTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numRequireTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextAfterTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n */\n get: function () {\n return this.getLocalizableStringText(\"requiredErrorText\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"requiredErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getLocale = function () {\n return this.survey\n ? this.survey.getLocale()\n : \"\";\n };\n PanelModelBase.prototype.getMarkdownHtml = function (text, name) {\n return this.survey\n ? this.survey.getSurveyMarkdownHtml(this, text, name)\n : null;\n };\n PanelModelBase.prototype.getRenderer = function (name) {\n return this.survey ? this.survey.getRendererForString(this, name) : null;\n };\n PanelModelBase.prototype.getProcessedText = function (text) {\n return this.textProcessor\n ? this.textProcessor.processText(text, true)\n : text;\n };\n Object.defineProperty(PanelModelBase.prototype, \"parent\", {\n /**\n * A parent element. It is always null for the Page object and always not null for the Panel object. Panel object may contain Questions and other Panels.\n */\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"parent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"depth\", {\n get: function () {\n if (this.parent == null)\n return 0;\n return this.parent.depth + 1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"visibleIf\", {\n /**\n * An expression that returns true or false. If it returns true the Panel becomes visible and if it returns false the Panel becomes invisible. The library runs the expression on survey start and on changing a question value. If the property is empty then visible property is used.\n * @see visible\n */\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"cssClasses\", {\n get: function () {\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n }\n return this.cssClassesValue;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.calcCssClasses = function () {\n var classes = { panel: {}, error: {}, row: \"\" };\n this.copyCssClasses(classes.panel, this.css.panel);\n this.copyCssClasses(classes.error, this.css.error);\n if (!!this.css.row) {\n classes.row = this.css.row;\n }\n if (this.survey) {\n this.survey.updatePanelCssClasses(this, classes);\n }\n return classes;\n };\n Object.defineProperty(PanelModelBase.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"id\", {\n /**\n * A unique element identificator. It is generated automatically.\n */\n get: function () {\n return this.getPropertyValue(\"id\");\n },\n set: function (val) {\n this.setPropertyValue(\"id\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isPanel\", {\n /**\n * Returns true if the current object is Panel. Returns false if the current object is Page (a root Panel).\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getPanel = function () {\n return this;\n };\n PanelModelBase.prototype.getLayoutType = function () {\n return \"row\";\n };\n PanelModelBase.prototype.isLayoutTypeSupported = function (layoutType) {\n return layoutType !== \"flow\";\n };\n Object.defineProperty(PanelModelBase.prototype, \"questions\", {\n /**\n * Returns the list of all questions located in the Panel/Page, including in the nested Panels.\n * @see Question\n * @see elements\n */\n get: function () {\n if (!this.isQuestionsReady) {\n this.questionsValue = [];\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (el.isPanel) {\n var qs = el.questions;\n for (var j = 0; j < qs.length; j++) {\n this.questionsValue.push(qs[j]);\n }\n }\n else {\n this.questionsValue.push(el);\n }\n }\n this.isQuestionsReady = true;\n }\n return this.questionsValue;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getValidName = function (name) {\n if (!!name)\n return name.trim();\n return name;\n };\n /**\n * Returns the question by its name\n * @param name the question name\n */\n PanelModelBase.prototype.getQuestionByName = function (name) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].name == name)\n return questions[i];\n }\n return null;\n };\n /**\n * Returns the element by its name. It works recursively.\n * @param name the element name\n */\n PanelModelBase.prototype.getElementByName = function (name) {\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (el.name == name)\n return el;\n var pnl = el.getPanel();\n if (!!pnl) {\n var res = pnl.getElementByName(name);\n if (!!res)\n return res;\n }\n }\n return null;\n };\n PanelModelBase.prototype.getQuestionByValueName = function (valueName) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].getValueName() == valueName)\n return questions[i];\n }\n return null;\n };\n /**\n * Returns question values on the current page\n */\n PanelModelBase.prototype.getValue = function () {\n var data = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (q.isEmpty())\n continue;\n var valueName = q.getValueName();\n data[valueName] = q.value;\n if (!!this.data) {\n var comment = this.data.getComment(valueName);\n if (!!comment) {\n data[valueName + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix] = comment;\n }\n }\n }\n return data;\n };\n /**\n * Return questions values as a JSON object with display text. For example, for dropdown, it would return the item text instead of item value.\n * @param keysAsText Set this value to true, to return key (in matrices questions) as display text as well.\n */\n PanelModelBase.prototype.getDisplayValue = function (keysAsText) {\n var data = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (q.isEmpty())\n continue;\n var valueName = keysAsText ? q.title : q.getValueName();\n data[valueName] = q.getDisplayValue(keysAsText);\n }\n return data;\n };\n /**\n * Returns question comments on the current page\n */\n PanelModelBase.prototype.getComments = function () {\n var comments = {};\n if (!this.data)\n return comments;\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var comment = this.data.getComment(q.getValueName());\n if (!!comment) {\n comments[q.getValueName()] = comment;\n }\n }\n return comments;\n };\n /**\n * Call this function to remove all question values from the current page/panel, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radigroup/dropdown/checkbox choices or matrix rows/columns.\n * Please note, this function doesn't clear values for invisible questions or values that doesn't associated with questions.\n * @see Question.clearIncorrectValues\n */\n PanelModelBase.prototype.clearIncorrectValues = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].clearIncorrectValues();\n }\n };\n /**\n * Call this function to clear all errors in the panel / page and all its child elements (panels and questions)\n */\n PanelModelBase.prototype.clearErrors = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].clearErrors();\n }\n this.errors = [];\n };\n PanelModelBase.prototype.markQuestionListDirty = function () {\n this.isQuestionsReady = false;\n if (this.parent)\n this.parent.markQuestionListDirty();\n };\n Object.defineProperty(PanelModelBase.prototype, \"elements\", {\n /**\n * Returns the list of the elements in the object, Panel/Page. Elements can be questions or panels. The function doesn't return elements in the nested Panels.\n */\n get: function () {\n return this.elementsValue;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return this.elements;\n };\n /**\n * Returns true if the current element belongs to the Panel/Page. It looks in nested Panels as well.\n * @param element\n * @see PanelModel\n */\n PanelModelBase.prototype.containsElement = function (element) {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (el == element)\n return true;\n var pnl = el.getPanel();\n if (!!pnl) {\n if (pnl.containsElement(element))\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(PanelModelBase.prototype, \"isRequired\", {\n /**\n * Set this property to true, to require the answer at least in one question in the panel.\n */\n get: function () {\n return this.getPropertyValue(\"isRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isRequired\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"requiredIf\", {\n /**\n * An expression that returns true or false. If it returns true the Panel/Page becomes required.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then isRequired property is used.\n * @see isRequired\n */\n get: function () {\n return this.getPropertyValue(\"requiredIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.searchText = function (text, founded) {\n _super.prototype.searchText.call(this, text, founded);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].searchText(text, founded);\n }\n };\n /**\n * Returns true, if there is an error on this Page or inside the current Panel\n * @param fireCallback set it to true, to show errors in UI\n * @param focusOnFirstError set it to true to focus on the first question that doesn't pass the validation\n */\n PanelModelBase.prototype.hasErrors = function (fireCallback, focusOnFirstError, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n if (rec === void 0) { rec = null; }\n rec = !!rec\n ? rec\n : {\n fireCallback: fireCallback,\n focuseOnFirstError: focusOnFirstError,\n firstErrorQuestion: null,\n result: false,\n };\n this.hasErrorsCore(rec);\n if (rec.firstErrorQuestion) {\n rec.firstErrorQuestion.focus(true);\n }\n return rec.result;\n };\n PanelModelBase.prototype.hasErrorsInPanels = function (rec) {\n var errors = [];\n this.hasRequiredError(rec, errors);\n if (this.survey) {\n var customError = this.survey.validatePanel(this);\n if (customError) {\n errors.push(customError);\n rec.result = true;\n }\n }\n if (!!rec.fireCallback) {\n if (!!this.survey) {\n this.survey.beforeSettingPanelErrors(this, errors);\n }\n this.errors = errors;\n }\n };\n //ISurveyErrorOwner\n PanelModelBase.prototype.getErrorCustomText = function (text, error) {\n if (!!this.survey)\n return this.survey.getErrorCustomText(text, error);\n return text;\n };\n PanelModelBase.prototype.hasRequiredError = function (rec, errors) {\n if (!this.isRequired)\n return;\n var visQuestions = [];\n this.addQuestionsToList(visQuestions, true);\n if (visQuestions.length == 0)\n return;\n for (var i = 0; i < visQuestions.length; i++) {\n if (!visQuestions[i].isEmpty())\n return;\n }\n rec.result = true;\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_7__[\"OneAnswerRequiredError\"](this.requiredErrorText, this));\n if (rec.focuseOnFirstError && !rec.firstErrorQuestion) {\n rec.firstErrorQuestion = visQuestions[0];\n }\n };\n PanelModelBase.prototype.hasErrorsCore = function (rec) {\n var elements = this.elements;\n var element = null;\n for (var i = 0; i < elements.length; i++) {\n element = elements[i];\n if (!element.isVisible)\n continue;\n if (element.isPanel) {\n element.hasErrorsCore(rec);\n }\n else {\n var question = element;\n if (question.isReadOnly)\n continue;\n if (question.hasErrors(rec.fireCallback, rec)) {\n if (rec.focuseOnFirstError && rec.firstErrorQuestion == null) {\n rec.firstErrorQuestion = question;\n }\n rec.result = true;\n }\n }\n }\n this.hasErrorsInPanels(rec);\n this.updateContainsErrors();\n };\n PanelModelBase.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].containsErrors)\n return true;\n }\n return false;\n };\n PanelModelBase.prototype.updateElementVisibility = function () {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.setPropertyValue(\"isVisible\", el.isVisible);\n if (el.isPanel) {\n el.updateElementVisibility();\n }\n }\n };\n PanelModelBase.prototype.getFirstQuestionToFocus = function (withError) {\n if (withError === void 0) { withError = false; }\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (!el.isVisible)\n continue;\n if (el.isPanel) {\n var res = el.getFirstQuestionToFocus(withError);\n if (!!res)\n return res;\n }\n else {\n var q = el;\n if (q.hasInput && (!withError || q.currentErrorCount > 0))\n return q;\n }\n }\n return null;\n };\n /**\n * Call it to focus the input on the first question\n */\n PanelModelBase.prototype.focusFirstQuestion = function () {\n var q = this.getFirstQuestionToFocus();\n if (!!q) {\n q.focus();\n }\n };\n /**\n * Call it to focus the input of the first question that has an error.\n */\n PanelModelBase.prototype.focusFirstErrorQuestion = function () {\n var q = this.getFirstQuestionToFocus(true);\n if (!!q) {\n q.focus();\n }\n };\n /**\n * Fill list array with the questions.\n * @param list\n * @param visibleOnly set it to true to get visible questions only\n */\n PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n this.addElementsToList(list, visibleOnly, includingDesignTime, false);\n };\n /**\n * Fill list array with the panels.\n * @param list\n */\n PanelModelBase.prototype.addPanelsIntoList = function (list, visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n this.addElementsToList(list, visibleOnly, includingDesignTime, true);\n };\n PanelModelBase.prototype.addElementsToList = function (list, visibleOnly, includingDesignTime, isPanel) {\n if (visibleOnly && !this.visible)\n return;\n this.addElementsToListCore(list, this.elements, visibleOnly, includingDesignTime, isPanel);\n };\n PanelModelBase.prototype.addElementsToListCore = function (list, elements, visibleOnly, includingDesignTime, isPanel) {\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (visibleOnly && !el.visible)\n continue;\n if ((isPanel && el.isPanel) || (!isPanel && !el.isPanel)) {\n list.push(el);\n }\n if (el.isPanel) {\n el.addElementsToListCore(list, el.elements, visibleOnly, includingDesignTime, isPanel);\n }\n else {\n if (includingDesignTime) {\n this.addElementsToListCore(list, el.getElementsInDesign(false), visibleOnly, includingDesignTime, isPanel);\n }\n }\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"isActive\", {\n /**\n * Returns true if the current object is Page and it is the current page.\n */\n get: function () {\n return !this.survey || this.survey.currentPage == this.root;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.updateCustomWidgets = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].updateCustomWidgets();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"questionTitleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for this panel/page.\n * @see SurveyModel.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"questionTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getQuestionTitleLocation = function () {\n if (this.onGetQuestionTitleLocation)\n return this.onGetQuestionTitleLocation();\n if (this.questionTitleLocation != \"default\")\n return this.questionTitleLocation;\n if (this.parent)\n return this.parent.getQuestionTitleLocation();\n return this.survey ? this.survey.questionTitleLocation : \"top\";\n };\n PanelModelBase.prototype.getStartIndex = function () {\n if (!!this.parent)\n return this.parent.getQuestionStartIndex();\n if (!!this.survey)\n return this.survey.questionStartIndex;\n return \"\";\n };\n PanelModelBase.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n PanelModelBase.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n PanelModelBase.prototype.getProgressInfo = function () {\n return _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].getProgressInfoByElements(this.elements, this.isRequired);\n };\n Object.defineProperty(PanelModelBase.prototype, \"root\", {\n get: function () {\n var res = this;\n while (res.parent)\n res = res.parent;\n return res;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.childVisibilityChanged = function () {\n var newIsVisibleValue = this.getIsPageVisible(null);\n var oldIsVisibleValue = this.getPropertyValue(\"isVisible\", true);\n if (newIsVisibleValue !== oldIsVisibleValue) {\n this.onVisibleChanged();\n }\n };\n PanelModelBase.prototype.createRowAndSetLazy = function (index) {\n var row = this.createRow();\n row.setIsLazyRendering(this.isLazyRenderInRow(index));\n return row;\n };\n PanelModelBase.prototype.createRow = function () {\n return new QuestionRowModel(this);\n };\n PanelModelBase.prototype.onSurveyLoad = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].onSurveyLoad();\n }\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onFirstRendering = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].onFirstRendering();\n }\n this.onRowsChanged();\n };\n Object.defineProperty(PanelModelBase.prototype, \"rows\", {\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.ensureRowsVisibility = function () {\n this.rows.forEach(function (row) {\n row.ensureVisibility();\n });\n };\n PanelModelBase.prototype.onRowsChanged = function () {\n if (this.isLoadingFromJson)\n return;\n this.setPropertyValue(\"rows\", this.buildRows());\n };\n PanelModelBase.prototype.onAddElement = function (element, index) {\n element.setSurveyImpl(this.surveyImpl);\n element.parent = this;\n this.markQuestionListDirty();\n this.updateRowsOnElementAdded(element, index);\n if (element.isPanel) {\n var p = element;\n if (this.survey) {\n this.survey.panelAdded(p, index, this, this.root);\n }\n }\n else {\n if (this.survey) {\n var q = element;\n this.survey.questionAdded(q, index, this, this.root);\n }\n }\n if (!!this.addElementCallback)\n this.addElementCallback(element);\n var self = this;\n element.registerFunctionOnPropertiesValueChanged([\"visible\", \"isVisible\"], function () {\n self.onElementVisibilityChanged(element);\n }, this.id);\n element.registerFunctionOnPropertyValueChanged(\"startWithNewLine\", function () {\n self.onElementStartWithNewLineChanged(element);\n }, this.id);\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onRemoveElement = function (element) {\n element.parent = null;\n this.markQuestionListDirty();\n element.unRegisterFunctionOnPropertiesValueChanged([\"visible\", \"isVisible\", \"startWithNewLine\"], this.id);\n this.updateRowsOnElementRemoved(element);\n if (!element.isPanel) {\n if (this.survey)\n this.survey.questionRemoved(element);\n }\n else {\n if (this.survey)\n this.survey.panelRemoved(element);\n }\n if (!!this.removeElementCallback)\n this.removeElementCallback(element);\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onElementVisibilityChanged = function (element) {\n if (this.isLoadingFromJson)\n return;\n this.updateRowsVisibility(element);\n this.childVisibilityChanged();\n if (!!this.parent) {\n this.parent.onElementVisibilityChanged(this);\n }\n };\n PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) {\n this.onRowsChanged();\n };\n PanelModelBase.prototype.updateRowsVisibility = function (element) {\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.elements.indexOf(element) > -1) {\n row.updateVisible();\n break;\n }\n }\n };\n PanelModelBase.prototype.canBuildRows = function () {\n return !this.isLoadingFromJson && this.getChildrenLayoutType() == \"row\";\n };\n PanelModelBase.prototype.buildRows = function () {\n if (!this.canBuildRows())\n return [];\n var result = new Array();\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n var isNewRow = i == 0 || el.startWithNewLine;\n var row = isNewRow ? this.createRowAndSetLazy(result.length) : result[result.length - 1];\n if (isNewRow)\n result.push(row);\n row.addElement(el);\n }\n for (var i = 0; i < result.length; i++) {\n result[i].updateVisible();\n }\n return result;\n };\n PanelModelBase.prototype.isLazyRenderInRow = function (rowIndex) {\n if (!this.survey || !this.survey.isLazyRendering)\n return false;\n return (rowIndex >= _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].lazyRowsRenderingStartRow ||\n !this.canRenderFirstRows());\n };\n PanelModelBase.prototype.canRenderFirstRows = function () {\n return this.isPage;\n };\n PanelModelBase.prototype.updateRowsOnElementAdded = function (element, index) {\n if (!this.canBuildRows())\n return;\n var dragDropInfo = new DragDropInfo(null, element);\n dragDropInfo.target = element;\n dragDropInfo.isEdge = this.elements.length > 1;\n if (this.elements.length < 2) {\n dragDropInfo.destination = this;\n }\n else {\n dragDropInfo.isBottom = index > 0;\n if (index == 0) {\n dragDropInfo.destination = this.elements[1];\n }\n else {\n dragDropInfo.destination = this.elements[index - 1];\n }\n }\n this.dragDropAddTargetToRow(dragDropInfo, null);\n };\n PanelModelBase.prototype.updateRowsOnElementRemoved = function (element) {\n if (!this.canBuildRows())\n return;\n this.updateRowsRemoveElementFromRow(element, this.findRowByElement(element));\n };\n PanelModelBase.prototype.updateRowsRemoveElementFromRow = function (element, row) {\n if (!row || !row.panel)\n return;\n var elIndex = row.elements.indexOf(element);\n if (elIndex < 0)\n return;\n row.elements.splice(elIndex, 1);\n if (row.elements.length > 0) {\n row.updateVisible();\n }\n else {\n if (row.index >= 0) {\n row.panel.rows.splice(row.index, 1);\n }\n }\n };\n PanelModelBase.prototype.findRowByElement = function (el) {\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].elements.indexOf(el) > -1)\n return rows[i];\n }\n return null;\n };\n PanelModelBase.prototype.elementWidthChanged = function (el) {\n if (this.isLoadingFromJson)\n return;\n var row = this.findRowByElement(el);\n if (!!row) {\n row.updateVisible();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"processedTitle\", {\n /**\n * Returns rendered title text or html.\n */\n get: function () {\n return this.getRenderedTitle(this.locTitle.textOrHtml);\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getRenderedTitle = function (str) {\n return this.textProcessor != null\n ? this.textProcessor.processText(str, true)\n : str;\n };\n Object.defineProperty(PanelModelBase.prototype, \"visible\", {\n /**\n * Use it to get/set the object visibility.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (value) {\n if (value === this.visible)\n return;\n this.setPropertyValue(\"visible\", value);\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (!this.isLoadingFromJson)\n this.onVisibleChanged();\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (!!this.survey &&\n this.survey.isClearValueOnHiddenContainer &&\n !this.isLoadingFromJson) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (!this.isVisible) {\n questions[i].clearValue();\n }\n else {\n questions[i].updateValueWithDefaults();\n }\n }\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"isVisible\", {\n /**\n * Returns true if object is visible or survey is in design mode right now.\n */\n get: function () {\n return this.areInvisibleElementsShowing || this.getIsPageVisible(null);\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) {\n if (!this.visible)\n return false;\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i] == exceptionQuestion)\n continue;\n if (this.elements[i].isVisible)\n return true;\n }\n return false;\n };\n PanelModelBase.prototype.setVisibleIndex = function (index) {\n if (!this.isVisible || index < 0) {\n this.resetVisibleIndexes();\n return 0;\n }\n this.lastVisibleIndex = index;\n var startIndex = index;\n index += this.beforeSetVisibleIndex(index);\n var panelStartIndex = this.getPanelStartIndex(index);\n var panelIndex = panelStartIndex;\n for (var i = 0; i < this.elements.length; i++) {\n panelIndex += this.elements[i].setVisibleIndex(panelIndex);\n }\n if (this.isContinueNumbering()) {\n index += panelIndex - panelStartIndex;\n }\n return index - startIndex;\n };\n PanelModelBase.prototype.updateVisibleIndexes = function () {\n if (this.lastVisibleIndex === undefined)\n return;\n this.resetVisibleIndexes();\n this.setVisibleIndex(this.lastVisibleIndex);\n };\n PanelModelBase.prototype.resetVisibleIndexes = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setVisibleIndex(-1);\n }\n };\n PanelModelBase.prototype.beforeSetVisibleIndex = function (index) {\n return 0;\n };\n PanelModelBase.prototype.getPanelStartIndex = function (index) {\n return index;\n };\n PanelModelBase.prototype.isContinueNumbering = function () {\n return true;\n };\n Object.defineProperty(PanelModelBase.prototype, \"isReadOnly\", {\n /**\n * Returns true if readOnly property is true or survey is in display mode or parent panel/page is readOnly.\n * @see SurveyModel.model\n * @see readOnly\n */\n get: function () {\n var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n return this.readOnly || isParentReadOnly || isSurveyReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.onReadOnlyChanged = function () {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.setPropertyValue(\"isReadOnly\", el.isReadOnly);\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n PanelModelBase.prototype.updateElementCss = function (reNew) {\n this.cssClassesValue = undefined;\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.updateElementCss(reNew);\n }\n _super.prototype.updateElementCss.call(this, reNew);\n };\n Object.defineProperty(PanelModelBase.prototype, \"enableIf\", {\n /**\n * An expression that returns true or false. If it returns false the Panel/Page becomes read only and an end-user will not able to answer on qustions inside it.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then readOnly property is used.\n * @see readOnly\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add an element into Panel or Page. Returns true if the element added successfully. Otherwise returns false.\n * @param element\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addElement = function (element, index) {\n if (index === void 0) { index = -1; }\n if (!this.canAddElement(element))\n return false;\n if (index < 0 || index >= this.elements.length) {\n this.elements.push(element);\n }\n else {\n this.elements.splice(index, 0, element);\n }\n return true;\n };\n PanelModelBase.prototype.insertElementAfter = function (element, after) {\n var index = this.elements.indexOf(after);\n if (index >= 0)\n this.addElement(element, index + 1);\n };\n PanelModelBase.prototype.insertElementBefore = function (element, before) {\n var index = this.elements.indexOf(before);\n if (index >= 0)\n this.addElement(element, index);\n };\n PanelModelBase.prototype.canAddElement = function (element) {\n return (!!element && element.isLayoutTypeSupported(this.getChildrenLayoutType()));\n };\n /**\n * Add a question into Panel or Page. Returns true if the question added successfully. Otherwise returns false.\n * @param question\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addQuestion = function (question, index) {\n if (index === void 0) { index = -1; }\n return this.addElement(question, index);\n };\n /**\n * Add a panel into Panel or Page. Returns true if the panel added successfully. Otherwise returns false.\n * @param panel\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addPanel = function (panel, index) {\n if (index === void 0) { index = -1; }\n return this.addElement(panel, index);\n };\n /**\n * Creates a new question and adds it at location of index, by default the end of the elements list. Returns null, if the question could not be created or could not be added into page or panel.\n * @param questionType the possible values are: \"text\", \"checkbox\", \"dropdown\", \"matrix\", \"html\", \"matrixdynamic\", \"matrixdropdown\" and so on.\n * @param name a question name\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addNewQuestion = function (questionType, name, index) {\n if (name === void 0) { name = null; }\n if (index === void 0) { index = -1; }\n var question = _questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"QuestionFactory\"].Instance.createQuestion(questionType, name);\n if (!this.addQuestion(question, index))\n return null;\n return question;\n };\n /**\n * Creates a new panel and adds it into the end of the elements list. Returns null, if the panel could not be created or could not be added into page or panel.\n * @param name a panel name\n */\n PanelModelBase.prototype.addNewPanel = function (name) {\n if (name === void 0) { name = null; }\n var panel = this.createNewPanel(name);\n if (!this.addPanel(panel))\n return null;\n return panel;\n };\n /**\n * Returns the index of element parameter in the elements list.\n * @param element question or panel\n */\n PanelModelBase.prototype.indexOf = function (element) {\n return this.elements.indexOf(element);\n };\n PanelModelBase.prototype.createNewPanel = function (name) {\n var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n res.name = name;\n return res;\n };\n /**\n * Remove an element (Panel or Question) from the elements list.\n * @param element\n * @see elements\n */\n PanelModelBase.prototype.removeElement = function (element) {\n var index = this.elements.indexOf(element);\n if (index < 0) {\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i].removeElement(element))\n return true;\n }\n return false;\n }\n this.elements.splice(index, 1);\n return true;\n };\n /**\n * Remove question from the elements list.\n * @param question\n * @see elements\n * @see removeElement\n */\n PanelModelBase.prototype.removeQuestion = function (question) {\n this.removeElement(question);\n };\n PanelModelBase.prototype.runCondition = function (values, properties) {\n if (this.isDesignMode || this.isLoadingFromJson)\n return;\n var elements = this.elements.slice();\n for (var i = 0; i < elements.length; i++) {\n elements[i].runCondition(values, properties);\n }\n if (!this.areInvisibleElementsShowing) {\n this.runVisibleCondition(values, properties);\n }\n this.runEnableCondition(values, properties);\n this.runRequiredCondition(values, properties);\n };\n PanelModelBase.prototype.runVisibleCondition = function (values, properties) {\n var _this = this;\n if (!this.visibleIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_5__[\"ConditionRunner\"](this.visibleIf);\n conditionRunner.onRunComplete = function (res) {\n _this.visible = res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.runEnableCondition = function (values, properties) {\n var _this = this;\n if (!this.enableIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_5__[\"ConditionRunner\"](this.enableIf);\n conditionRunner.onRunComplete = function (res) {\n _this.readOnly = !res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.runRequiredCondition = function (values, properties) {\n var _this = this;\n if (!this.requiredIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_5__[\"ConditionRunner\"](this.requiredIf);\n conditionRunner.onRunComplete = function (res) {\n _this.isRequired = res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.onAnyValueChanged = function (name) {\n var els = this.elements;\n for (var i = 0; i < els.length; i++) {\n els[i].onAnyValueChanged(name);\n }\n };\n PanelModelBase.prototype.checkBindings = function (valueName, value) {\n var els = this.elements;\n for (var i = 0; i < els.length; i++) {\n els[i].checkBindings(valueName, value);\n }\n };\n PanelModelBase.prototype.dragDropAddTarget = function (dragDropInfo) {\n var prevRow = this.dragDropFindRow(dragDropInfo.target);\n if (this.dragDropAddTargetToRow(dragDropInfo, prevRow)) {\n this.updateRowsRemoveElementFromRow(dragDropInfo.target, prevRow);\n }\n };\n PanelModelBase.prototype.dragDropFindRow = function (findElement) {\n if (!findElement || findElement.isPage)\n return null;\n var element = findElement;\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].elements.indexOf(element) > -1)\n return rows[i];\n }\n for (var i = 0; i < this.elements.length; i++) {\n var pnl = this.elements[i].getPanel();\n if (!pnl)\n continue;\n var row = pnl.dragDropFindRow(element);\n if (!!row)\n return row;\n }\n return null;\n };\n PanelModelBase.prototype.dragDropAddTargetToRow = function (dragDropInfo, prevRow) {\n if (!dragDropInfo.destination)\n return true;\n if (this.dragDropAddTargetToEmptyPanel(dragDropInfo))\n return true;\n var dest = dragDropInfo.destination;\n var destRow = this.dragDropFindRow(dest);\n if (!destRow)\n return true;\n if (!dragDropInfo.target.startWithNewLine)\n return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n };\n PanelModelBase.prototype.dragDropAddTargetToEmptyPanel = function (dragDropInfo) {\n if (dragDropInfo.destination.isPage) {\n this.dragDropAddTargetToEmptyPanelCore(this.root, dragDropInfo.target, dragDropInfo.isBottom);\n return true;\n }\n var dest = dragDropInfo.destination;\n if (dest.isPanel && !dragDropInfo.isEdge) {\n var panel = dest;\n if (dragDropInfo.target[\"template\"] === dest) {\n return false;\n }\n if (dragDropInfo.nestedPanelDepth < 0 ||\n dragDropInfo.nestedPanelDepth >= panel.depth) {\n this.dragDropAddTargetToEmptyPanelCore(dest, dragDropInfo.target, dragDropInfo.isBottom);\n return true;\n }\n }\n return false;\n };\n PanelModelBase.prototype.dragDropAddTargetToExistingRow = function (dragDropInfo, destRow, prevRow) {\n var index = destRow.elements.indexOf(dragDropInfo.destination);\n if (index == 0 &&\n !dragDropInfo.isBottom &&\n destRow.elements[0].startWithNewLine) {\n if (destRow.index > 0) {\n dragDropInfo.isBottom = true;\n destRow = destRow.panel.rows[destRow.index - 1];\n dragDropInfo.destination =\n destRow.elements[destRow.elements.length - 1];\n return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n }\n else {\n return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n }\n }\n var prevRowIndex = -1;\n if (prevRow == destRow) {\n prevRowIndex = destRow.elements.indexOf(dragDropInfo.target);\n }\n if (dragDropInfo.isBottom)\n index++;\n var srcRow = this.findRowByElement(dragDropInfo.source);\n if (srcRow == destRow &&\n srcRow.elements.indexOf(dragDropInfo.source) == index)\n return false;\n if (index == prevRowIndex)\n return false;\n if (prevRowIndex > -1) {\n destRow.elements.splice(prevRowIndex, 1);\n if (prevRowIndex < index)\n index--;\n }\n destRow.elements.splice(index, 0, dragDropInfo.target);\n destRow.updateVisible();\n return prevRowIndex < 0;\n };\n PanelModelBase.prototype.dragDropAddTargetToNewRow = function (dragDropInfo, destRow, prevRow) {\n var targetRow = destRow.panel.createRowAndSetLazy(destRow.panel.rows.length);\n targetRow.addElement(dragDropInfo.target);\n var index = destRow.index;\n if (dragDropInfo.isBottom) {\n index++;\n }\n //same row\n if (!!prevRow && prevRow.panel == targetRow.panel && prevRow.index == index)\n return false;\n var srcRow = this.findRowByElement(dragDropInfo.source);\n if (!!srcRow &&\n srcRow.panel == targetRow.panel &&\n srcRow.elements.length == 1 &&\n srcRow.index == index)\n return false;\n destRow.panel.rows.splice(index, 0, targetRow);\n return true;\n };\n PanelModelBase.prototype.dragDropAddTargetToEmptyPanelCore = function (panel, target, isBottom) {\n var targetRow = panel.createRow();\n targetRow.addElement(target);\n if (panel.elements.length == 0 || isBottom) {\n panel.rows.push(targetRow);\n }\n else {\n panel.rows.splice(0, 0, targetRow);\n }\n };\n PanelModelBase.prototype.dragDropMoveElement = function (src, target, targetIndex) {\n var srcIndex = src.parent.elements.indexOf(src);\n if (targetIndex > srcIndex) {\n targetIndex--;\n }\n this.removeElement(src);\n this.addElement(target, targetIndex);\n };\n PanelModelBase.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n if (this.rows) {\n for (var i = 0; i < this.rows.length; i++) {\n this.rows[i].dispose();\n }\n this.rows.splice(0, this.rows.length);\n }\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].dispose();\n }\n this.elements.splice(0, this.elements.length);\n };\n PanelModelBase.panelCounter = 100;\n return PanelModelBase;\n}(_survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"]));\n\n/**\n * A container element, similar to the Page objects. However, unlike the Page, Panel can't be a root.\n * It may contain questions and other panels.\n */\nvar PanelModel = /** @class */ (function (_super) {\n __extends(PanelModel, _super);\n function PanelModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"width\", function () {\n if (!!self.parent) {\n self.parent.elementWidthChanged(self);\n }\n });\n _this.registerFunctionOnPropertiesValueChanged([\"indent\", \"innerIndent\", \"rightIndent\"], function () {\n self.onIndentChanged();\n });\n return _this;\n }\n PanelModel.prototype.getType = function () {\n return \"panel\";\n };\n Object.defineProperty(PanelModel.prototype, \"contentId\", {\n get: function () {\n return this.id + \"_content\";\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (live) {\n return !!this.parent ? this.parent.getSurvey(live) : null;\n }\n return _super.prototype.getSurvey.call(this, live);\n };\n PanelModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.onIndentChanged();\n };\n PanelModel.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n this.onIndentChanged();\n };\n Object.defineProperty(PanelModel.prototype, \"isPanel\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"page\", {\n /**\n * Get/set the page where the panel is located.\n */\n get: function () {\n return this.getPage(this.parent);\n },\n set: function (val) {\n this.setPage(this.parent, val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.delete = function () {\n if (!!this.parent) {\n this.removeSelfFromList(this.parent.elements);\n }\n };\n /**\n * Move panel to a new container Page/Panel. Add as a last element if insertBefore parameter is not used or inserted into the given index,\n * if insert parameter is number, or before the given element, if the insertBefore parameter is a question or panel\n * @param container Page or Panel to where a question is relocated.\n * @param insertBefore Use it if you want to set the panel to a specific position. You may use a number (use 0 to insert int the beginning) or element, if you want to insert before this element.\n */\n PanelModel.prototype.moveTo = function (container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n return this.moveToBase(this.parent, container, insertBefore);\n };\n Object.defineProperty(PanelModel.prototype, \"visibleIndex\", {\n /**\n * Returns the visible index of the panel in the survey. Commonly it is -1 and it doesn't show.\n * You have to set showNumber to true to show index/numbering for the Panel\n * @see showNumber\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"showNumber\", {\n /**\n * Set showNumber to true to start showing the number for this panel.\n * @see visibleIndex\n */\n get: function () {\n return this.getPropertyValue(\"showNumber\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showNumber\", val);\n this.notifySurveyOnVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"showQuestionNumbers\", {\n /**\n * Gets or sets a value that specifies how the elements numbers inside panel are displayed.\n *\n * The following options are available:\n *\n * - `default` - display questions numbers as defined in parent panel or survey\n * - `onpanel` - display questions numbers, start numbering from beginning of this page\n * - `off` - turn off the numbering for questions titles\n * @see showNumber\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\", \"default\");\n },\n set: function (value) {\n this.setPropertyValue(\"showQuestionNumbers\", value);\n this.notifySurveyOnVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"questionStartIndex\", {\n /**\n * Gets or sets the first question index for elements inside the panel. The first question index is '1.' by default and it is taken from survey.questionStartIndex property.\n * You may start it from '100' or from 'A', by setting '100' or 'A' to this property.\n * You can set the start index to \"(1)\" or \"# A)\" or \"a)\" to render question number as (1), # A) and a) accordingly.\n * @see survey.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"questionStartIndex\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionStartIndex\", val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.getQuestionStartIndex = function () {\n if (!!this.questionStartIndex)\n return this.questionStartIndex;\n return _super.prototype.getQuestionStartIndex.call(this);\n };\n Object.defineProperty(PanelModel.prototype, \"no\", {\n /**\n * The property returns the question number. If question is invisible then it returns empty string.\n * If visibleIndex is 1, then no is 2, or 'B' if survey.questionStartIndex is 'A'.\n * @see SurveyModel.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"no\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.setNo = function (visibleIndex) {\n this.setPropertyValue(\"no\", _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].getNumberByIndex(this.visibleIndex, this.getStartIndex()));\n };\n PanelModel.prototype.beforeSetVisibleIndex = function (index) {\n var visibleIndex = -1;\n if (this.showNumber && (this.isDesignMode || !this.locTitle.isEmpty)) {\n visibleIndex = index;\n }\n this.setPropertyValue(\"visibleIndex\", visibleIndex);\n this.setNo(visibleIndex);\n return visibleIndex < 0 ? 0 : 1;\n };\n PanelModel.prototype.getPanelStartIndex = function (index) {\n if (this.showQuestionNumbers == \"off\")\n return -1;\n if (this.showQuestionNumbers == \"onpanel\")\n return 0;\n return index;\n };\n PanelModel.prototype.isContinueNumbering = function () {\n return (this.showQuestionNumbers != \"off\" && this.showQuestionNumbers != \"onpanel\");\n };\n PanelModel.prototype.notifySurveyOnVisibilityChanged = function () {\n if (this.survey != null && !this.isLoadingFromJson) {\n this.survey.panelVisibilityChanged(this, this.isVisible);\n }\n };\n PanelModel.prototype.hasErrorsCore = function (rec) {\n _super.prototype.hasErrorsCore.call(this, rec);\n if (this.isCollapsed && rec.result && rec.fireCallback) {\n this.expand();\n }\n };\n PanelModel.prototype.getRenderedTitle = function (str) {\n if (!str) {\n if (this.isCollapsed || this.isExpanded)\n return this.name;\n if (this.isDesignMode)\n return \"[\" + this.name + \"]\";\n }\n return _super.prototype.getRenderedTitle.call(this, str);\n };\n Object.defineProperty(PanelModel.prototype, \"width\", {\n /**\n * The Panel width.\n */\n get: function () {\n return this.getPropertyValue(\"width\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"indent\", {\n /**\n * The left indent. Set this property to increase the panel left indent.\n */\n get: function () {\n return this.getPropertyValue(\"indent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"indent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"innerIndent\", {\n /**\n * The inner indent. Set this property to increase the panel content margin.\n */\n get: function () {\n return this.getPropertyValue(\"innerIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"innerIndent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"renderWidth\", {\n get: function () {\n return this.getPropertyValue(\"renderWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"startWithNewLine\", {\n /**\n * The Panel renders on the new line if the property is true. If the property is false, the panel tries to render on the same line/row with a previous question/panel.\n */\n get: function () {\n return this.getPropertyValue(\"startWithNewLine\", true);\n },\n set: function (value) {\n this.setPropertyValue(\"startWithNewLine\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"rightIndent\", {\n /**\n * The right indent of the Panel.\n */\n get: function () {\n return this.getPropertyValue(\"rightIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"rightIndent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"paddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"paddingLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingLeft\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"innerPaddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"innerPaddingLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"innerPaddingLeft\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"paddingRight\", {\n get: function () {\n return this.getPropertyValue(\"paddingRight\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingRight\", val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.onIndentChanged = function () {\n if (!this.getSurvey())\n return;\n this.innerPaddingLeft = this.getIndentSize(this.innerIndent);\n this.paddingLeft = this.getIndentSize(this.indent);\n this.paddingRight = this.getIndentSize(this.rightIndent);\n };\n PanelModel.prototype.getIndentSize = function (indent) {\n if (indent < 1)\n return \"\";\n var css = this.survey[\"css\"];\n if (!css)\n return \"\";\n return indent * css.question.indent + \"px\";\n };\n PanelModel.prototype.clearOnDeletingContainer = function () {\n this.elements.forEach(function (element) {\n if (element instanceof _question__WEBPACK_IMPORTED_MODULE_4__[\"Question\"] || element instanceof PanelModel) {\n element.clearOnDeletingContainer();\n }\n });\n };\n Object.defineProperty(PanelModel.prototype, \"hasEditButton\", {\n get: function () {\n if (this.survey && this.survey.state == \"preview\")\n return this.depth == 1;\n return false;\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.cancelPreview = function () {\n if (!this.hasEditButton)\n return;\n this.survey.cancelPreviewByPage(this);\n };\n Object.defineProperty(PanelModel.prototype, \"cssTitle\", {\n get: function () {\n var result = this.cssClasses.panel.title;\n if (this.state !== \"default\") {\n result += \" \" + this.cssClasses.panel.titleExpandable;\n }\n if (this.containsErrors) {\n result += \" \" + this.cssClasses.panel.titleOnError;\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"cssError\", {\n get: function () {\n var rootClass = this.cssClasses.error.root;\n return rootClass ? rootClass : \"panel-error-root\";\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.onVisibleChanged = function () {\n _super.prototype.onVisibleChanged.call(this);\n this.notifySurveyOnVisibilityChanged();\n };\n return PanelModel;\n}(PanelModelBase));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"panelbase\", [\n \"name\",\n {\n name: \"elements\",\n alternativeName: \"questions\",\n baseClassName: \"question\",\n visible: false,\n isLightSerializable: false,\n },\n { name: \"visible:boolean\", default: true },\n \"visibleIf:condition\",\n \"enableIf:condition\",\n \"requiredIf:condition\",\n \"readOnly:boolean\",\n {\n name: \"questionTitleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n },\n { name: \"title:text\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\n], function () {\n return new PanelModelBase();\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"panel\", [\n {\n name: \"state\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\"],\n },\n \"isRequired:boolean\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n { name: \"startWithNewLine:boolean\", default: true },\n \"width\",\n { name: \"innerIndent:number\", default: 0, choices: [0, 1, 2, 3] },\n { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3] },\n {\n name: \"page\",\n isSerializable: false,\n visibleIf: function (obj) {\n var survey = obj ? obj.survey : null;\n return !survey || survey.pages.length > 1;\n },\n choices: function (obj) {\n var survey = obj ? obj.survey : null;\n return survey\n ? survey.pages.map(function (p) {\n return { value: p.name, text: p.title };\n })\n : [];\n },\n },\n \"showNumber:boolean\",\n {\n name: \"showQuestionNumbers\",\n default: \"default\",\n choices: [\"default\", \"onpanel\", \"off\"],\n },\n \"questionStartIndex\",\n], function () {\n return new PanelModel();\n}, \"panelbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"ElementFactory\"].Instance.registerElement(\"panel\", function (name) {\n return new PanelModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/popup.ts\":\n/*!**********************!*\\\n !*** ./src/popup.ts ***!\n \\**********************/\n/*! exports provided: PopupModel, PopupBaseViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return PopupModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return PopupBaseViewModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _utils_popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/popup */ \"./src/utils/popup.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar PopupModel = /** @class */ (function (_super) {\n __extends(PopupModel, _super);\n function PopupModel(contentComponentName, contentComponentData, verticalPosition, horizontalPosition, showPointer, isModal, onCancel, onApply, onHide, onShow, cssClass) {\n if (verticalPosition === void 0) { verticalPosition = \"bottom\"; }\n if (horizontalPosition === void 0) { horizontalPosition = \"left\"; }\n if (showPointer === void 0) { showPointer = true; }\n if (isModal === void 0) { isModal = false; }\n if (onCancel === void 0) { onCancel = function () { }; }\n if (onApply === void 0) { onApply = function () { return true; }; }\n if (onHide === void 0) { onHide = function () { }; }\n if (onShow === void 0) { onShow = function () { }; }\n if (cssClass === void 0) { cssClass = \"\"; }\n var _this = _super.call(this) || this;\n _this.contentComponentName = contentComponentName;\n _this.contentComponentData = contentComponentData;\n _this.verticalPosition = verticalPosition;\n _this.horizontalPosition = horizontalPosition;\n _this.showPointer = showPointer;\n _this.isModal = isModal;\n _this.onCancel = onCancel;\n _this.onApply = onApply;\n _this.onHide = onHide;\n _this.onShow = onShow;\n _this.cssClass = cssClass;\n return _this;\n }\n Object.defineProperty(PopupModel.prototype, \"isVisible\", {\n get: function () {\n return this.getPropertyValue(\"isVisible\", false);\n },\n set: function (value) {\n if (this.isVisible === value) {\n return;\n }\n this.setPropertyValue(\"isVisible\", value);\n this.onVisibilityChanged && this.onVisibilityChanged(value);\n if (this.isVisible) {\n this.onShow();\n }\n else {\n this.onHide();\n }\n },\n enumerable: false,\n configurable: true\n });\n PopupModel.prototype.toggleVisibility = function () {\n this.isVisible = !this.isVisible;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], PopupModel.prototype, \"contentComponentName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], PopupModel.prototype, \"contentComponentData\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"bottom\" })\n ], PopupModel.prototype, \"verticalPosition\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"left\" })\n ], PopupModel.prototype, \"horizontalPosition\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupModel.prototype, \"showPointer\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupModel.prototype, \"isModal\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onCancel\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { return true; } })\n ], PopupModel.prototype, \"onApply\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onHide\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onShow\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"\" })\n ], PopupModel.prototype, \"cssClass\", void 0);\n return PopupModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar FOCUS_INPUT_SELECTOR = \"input:not(:disabled):not([readonly]):not([type=hidden]),select:not(:disabled):not([readonly]),textarea:not(:disabled):not([readonly]), button:not(:disabled):not([readonly])\";\nvar PopupBaseViewModel = /** @class */ (function (_super) {\n __extends(PopupBaseViewModel, _super);\n function PopupBaseViewModel(model, targetElement) {\n var _this = _super.call(this) || this;\n _this.model = model;\n _this.targetElement = targetElement;\n _this.model.registerFunctionOnPropertyValueChanged(\"isVisible\", function () {\n _this.isVisible = _this.model.isVisible;\n });\n return _this;\n }\n Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentName\", {\n get: function () {\n return this.model.contentComponentName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentData\", {\n get: function () {\n return this.model.contentComponentData;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"showPointer\", {\n get: function () {\n return this.model.showPointer;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"isModal\", {\n get: function () {\n return this.model.isModal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"styleClass\", {\n get: function () {\n var css = this.model.cssClass;\n if (this.isModal) {\n css += \" sv-popup--modal\";\n }\n else if (this.showPointer) {\n css += \" sv-popup--show-pointer\";\n css += \" sv-popup--\" + this.popupDirection;\n }\n return css;\n },\n enumerable: false,\n configurable: true\n });\n PopupBaseViewModel.prototype.onKeyDown = function (event) {\n if (event.key === \"Tab\" || event.keyCode === 9) {\n this.trapFocus(event);\n }\n else if (event.key === \"Escape\" || event.keyCode === 27) {\n if (this.isModal) {\n this.model.onCancel();\n }\n this.model.isVisible = false;\n }\n };\n PopupBaseViewModel.prototype.trapFocus = function (event) {\n var focusableElements = this.container.querySelectorAll(FOCUS_INPUT_SELECTOR);\n var firstFocusableElement = focusableElements[0];\n var lastFocusableElement = focusableElements[focusableElements.length - 1];\n if (event.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n event.preventDefault();\n }\n }\n else {\n if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n event.preventDefault();\n }\n }\n };\n PopupBaseViewModel.prototype.updateOnShowing = function () {\n if (!this.isModal) {\n this.updatePosition();\n }\n this.focusFirstInput();\n };\n PopupBaseViewModel.prototype.updatePosition = function () {\n var rect = this.targetElement.getBoundingClientRect();\n var background = this.container.children[0];\n var popupContainer = background.children[0];\n var scrollContent = background.children[0].children[1];\n var height = popupContainer.offsetHeight -\n scrollContent.offsetHeight +\n scrollContent.scrollHeight;\n var width = popupContainer.offsetWidth;\n this.height = \"auto\";\n var verticalPosition = this.model.verticalPosition;\n if (!!window) {\n verticalPosition = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].updateVerticalPosition(rect, height, this.model.verticalPosition, this.model.showPointer, window.innerHeight);\n }\n this.popupDirection = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePopupDirection(verticalPosition, this.model.horizontalPosition);\n var pos = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePosition(rect, height, width, verticalPosition, this.model.horizontalPosition, this.showPointer);\n if (!!window) {\n var newVerticalDimensions = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].updateVerticalDimensions(pos.top, height, window.innerHeight);\n if (!!newVerticalDimensions) {\n this.height = newVerticalDimensions.height + \"px\";\n pos.top = newVerticalDimensions.top;\n }\n }\n this.left = pos.left + \"px\";\n this.top = pos.top + \"px\";\n if (this.showPointer) {\n this.pointerTarget = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePointerTarget(rect, pos.top, pos.left, verticalPosition, this.model.horizontalPosition);\n }\n this.pointerTarget.top += \"px\";\n this.pointerTarget.left += \"px\";\n };\n PopupBaseViewModel.prototype.focusFirstInput = function () {\n var _this = this;\n setTimeout(function () {\n var el = _this.container.querySelector(FOCUS_INPUT_SELECTOR);\n if (!!el)\n el.focus();\n else\n _this.container.children[0].focus();\n }, 100);\n };\n PopupBaseViewModel.prototype.clickOutside = function () {\n if (this.isModal) {\n return;\n }\n this.model.isVisible = false;\n };\n PopupBaseViewModel.prototype.cancel = function () {\n this.model.onCancel();\n this.model.isVisible = false;\n };\n PopupBaseViewModel.prototype.apply = function () {\n if (!!this.model.onApply && !this.model.onApply())\n return;\n this.model.isVisible = false;\n };\n Object.defineProperty(PopupBaseViewModel.prototype, \"cancelButtonText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"modalCancelButtonText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"applyButtonText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"modalApplyButtonText\");\n },\n enumerable: false,\n configurable: true\n });\n PopupBaseViewModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.model.onVisibilityChanged = undefined;\n };\n PopupBaseViewModel.prototype.createPopupContainer = function () {\n var container = document.createElement(\"div\");\n this.container = container;\n };\n PopupBaseViewModel.prototype.mountPopupContainer = function () {\n document.body.appendChild(this.container);\n };\n PopupBaseViewModel.prototype.initializePopupContainer = function () {\n this.createPopupContainer();\n this.mountPopupContainer();\n };\n PopupBaseViewModel.prototype.destroyPopupContainer = function () {\n this.container.remove();\n this.container = undefined;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n ], PopupBaseViewModel.prototype, \"top\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n ], PopupBaseViewModel.prototype, \"left\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"auto\" })\n ], PopupBaseViewModel.prototype, \"height\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupBaseViewModel.prototype, \"isVisible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"left\" })\n ], PopupBaseViewModel.prototype, \"popupDirection\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: { left: \"0px\", top: \"0px\" } })\n ], PopupBaseViewModel.prototype, \"pointerTarget\", void 0);\n return PopupBaseViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/question.ts\":\n/*!*************************!*\\\n !*** ./src/question.ts ***!\n \\*************************/\n/*! exports provided: Question */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return Question; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A base class for all questions.\n */\nvar Question = /** @class */ (function (_super) {\n __extends(Question, _super);\n function Question(name) {\n var _this = _super.call(this, name) || this;\n _this.conditionRunner = null;\n _this.customWidgetData = { isNeedRender: true };\n _this.isReadyValue = true;\n /**\n * The event is fired when isReady property of question is changed.\n *
options.question - the question\n *
options.isReady - current value of isReady\n *
options.oldIsReady - old value of isReady\n */\n _this.onReadyChanged = _this.addEvent();\n _this.parentQuestionValue = null;\n _this.isRunningValidatorsValue = false;\n _this.isValueChangedInSurvey = false;\n _this.allowNotifyValueChanged = true;\n //ILocalizableOwner\n _this.locOwner = null;\n _this.id = Question.getQuestionId();\n _this.onCreating();\n _this.createNewArray(\"validators\", function (validator) {\n validator.errorOwner = _this;\n });\n var locTitleValue = _this.createLocalizableString(\"title\", _this, true);\n locTitleValue.onGetTextCallback = function (text) {\n if (!text) {\n text = _this.name;\n }\n if (!_this.survey)\n return text;\n return _this.survey.getUpdatedQuestionTitle(_this, text);\n };\n _this.locProcessedTitle = new _localizablestring__WEBPACK_IMPORTED_MODULE_6__[\"LocalizableString\"](_this, true);\n _this.locProcessedTitle.sharedData = locTitleValue;\n var locCommentText = _this.createLocalizableString(\"commentText\", _this, true);\n locCommentText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"otherItemText\");\n };\n _this.createLocalizableString(\"requiredErrorText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"width\", function () {\n _this.updateQuestionCss();\n if (!!_this.parent) {\n _this.parent.elementWidthChanged(_this);\n }\n });\n _this.registerFunctionOnPropertyValueChanged(\"isRequired\", function () {\n _this.locTitle.onChanged();\n _this.cssClassesValue = undefined;\n });\n _this.registerFunctionOnPropertiesValueChanged([\"indent\", \"rightIndent\"], function () {\n _this.onIndentChanged();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"hasComment\", \"hasOther\"], function () {\n _this.initCommentFromSurvey();\n });\n return _this;\n }\n Question.getQuestionId = function () {\n return \"sq_\" + Question.questionCounter++;\n };\n Question.prototype.isReadOnlyRenderDiv = function () {\n return this.isReadOnly && _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].readOnlyCommentRenderMode === \"div\";\n };\n Question.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (live) {\n return !!this.parent ? this.parent.getSurvey(live) : null;\n }\n if (!!this.onGetSurvey)\n return this.onGetSurvey();\n return _super.prototype.getSurvey.call(this);\n };\n Question.prototype.getValueName = function () {\n if (!!this.valueName)\n return this.valueName.toString();\n return this.name;\n };\n Object.defineProperty(Question.prototype, \"valueName\", {\n /**\n * Use this property if you want to store the question result in the name different from the question name.\n * Question name should be unique in the survey and valueName could be not unique. It allows to share data between several questions with the same valueName.\n * The library set the value automatically if the question.name property is not valid. For example, if it contains the period '.' symbol.\n * In this case if you set the question.name property to 'x.y' then the valueName becomes 'x y'.\n * Please note, this property is hidden for questions without input, for example html question.\n * @see name\n */\n get: function () {\n return this.getPropertyValue(\"valueName\", \"\");\n },\n set: function (val) {\n var oldValueName = this.getValueName();\n this.setPropertyValue(\"valueName\", val);\n this.onValueNameChanged(oldValueName);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onValueNameChanged = function (oldValue) {\n if (!this.survey)\n return;\n this.survey.questionRenamed(this, this.name, !!oldValue ? oldValue : this.name);\n this.initDataFromSurvey();\n };\n Question.prototype.onNameChanged = function (oldValue) {\n this.locTitle.onChanged();\n if (!this.survey)\n return;\n this.survey.questionRenamed(this, oldValue, this.valueName ? this.valueName : oldValue);\n };\n Object.defineProperty(Question.prototype, \"isReady\", {\n get: function () {\n return this.isReadyValue;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Get is question ready to use\n */\n Question.prototype.choicesLoaded = function () { };\n Object.defineProperty(Question.prototype, \"page\", {\n /**\n * Get/set the page where the question is located.\n */\n get: function () {\n return this.getPage(this.parent);\n },\n set: function (val) {\n this.setPage(this.parent, val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getPanel = function () {\n return null;\n };\n Question.prototype.delete = function () {\n if (!!this.parent) {\n this.removeSelfFromList(this.parent.elements);\n }\n };\n Object.defineProperty(Question.prototype, \"isFlowLayout\", {\n get: function () {\n return this.getLayoutType() === \"flow\";\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getLayoutType = function () {\n if (!!this.parent)\n return this.parent.getChildrenLayoutType();\n return \"row\";\n };\n Question.prototype.isLayoutTypeSupported = function (layoutType) {\n return layoutType !== \"flow\";\n };\n Object.defineProperty(Question.prototype, \"visible\", {\n /**\n * Use it to get/set the question visibility.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (val) {\n if (val == this.visible)\n return;\n this.setPropertyValue(\"visible\", val);\n this.onVisibleChanged();\n this.notifySurveyVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (this.isVisible && this.survey && this.survey.isClearValueOnHidden) {\n this.updateValueWithDefaults();\n }\n if (!this.isVisible && this.errors && this.errors.length > 0) {\n this.errors = [];\n }\n };\n Object.defineProperty(Question.prototype, \"useDisplayValuesInTitle\", {\n /**\n * Use it to choose how other question values will be rendered in title if referenced in {}.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"useDisplayValuesInTitle\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"useDisplayValuesInTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"visibleIf\", {\n /**\n * An expression that returns true or false. If it returns true the Question becomes visible and if it returns false the Question becomes invisible. The library runs the expression on survey start and on changing a question value. If the property is empty then visible property is used.\n * @see visible\n */\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n this.runConditions();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isVisible\", {\n /**\n * Returns true if the question is visible or survey is in design mode right now.\n */\n get: function () {\n if (this.survey && this.survey.areEmptyElementsHidden && this.isEmpty())\n return false;\n return this.visible || this.areInvisibleElementsShowing;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"visibleIndex\", {\n /**\n * Returns the visible index of the question in the survey. It can be from 0 to all visible questions count - 1\n * The visibleIndex is -1 if the title is 'hidden' or hideNumber is true\n * @see titleLocation\n * @see hideNumber\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hideNumber\", {\n /**\n * Set hideNumber to true to stop showing the number for this question. The question will not be counter\n * @see visibleIndex\n * @see titleLocation\n */\n get: function () {\n return this.getPropertyValue(\"hideNumber\");\n },\n set: function (val) {\n this.setPropertyValue(\"hideNumber\", val);\n this.notifySurveyVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isAllowTitleLeft\", {\n /**\n * Returns true if the question may have a title located on the left\n */\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns the type of the object as a string as it represents in the json.\n */\n Question.prototype.getType = function () {\n return \"question\";\n };\n Object.defineProperty(Question.prototype, \"isQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Move question to a new container Page/Panel. Add as a last element if insertBefore parameter is not used or inserted into the given index,\n * if insert parameter is number, or before the given element, if the insertBefore parameter is a question or panel\n * @param container Page or Panel to where a question is relocated.\n * @param insertBefore Use it if you want to set the question to a specific position. You may use a number (use 0 to insert int the beginning) or element, if you want to insert before this element.\n */\n Question.prototype.moveTo = function (container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n return this.moveToBase(this.parent, container, insertBefore);\n };\n Question.prototype.getProgressInfo = function () {\n if (!this.hasInput)\n return _super.prototype.getProgressInfo.call(this);\n return {\n questionCount: 1,\n answeredQuestionCount: !this.isEmpty() ? 1 : 0,\n requiredQuestionCount: this.isRequired ? 1 : 0,\n requiredAnsweredQuestionCount: !this.isEmpty() && this.isRequired ? 1 : 0,\n };\n };\n Question.prototype.runConditions = function () {\n if (this.data && !this.isLoadingFromJson) {\n if (!this.isDesignMode) {\n this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n }\n this.locStrsChanged();\n }\n };\n Question.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n if (this.survey) {\n this.survey.questionCreated(this);\n }\n if (this.survey && this.survey.isDesignMode && !this.isDesignMode) {\n this.onVisibleChanged();\n }\n this.runConditions();\n };\n Question.prototype.getDataFilteredValues = function () {\n return !!this.data ? this.data.getFilteredValues() : null;\n };\n Question.prototype.getDataFilteredProperties = function () {\n var props = !!this.data ? this.data.getFilteredProperties() : {};\n props.question = this;\n return props;\n };\n Object.defineProperty(Question.prototype, \"parent\", {\n /**\n * A parent element. It can be panel or page.\n */\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n if (this.parent === val)\n return;\n this.delete();\n this.setPropertyValue(\"parent\", val);\n this.updateQuestionCss();\n this.onParentChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"parentQuestion\", {\n /**\n * A parent question. It can be a dynamic panel or dynamic/dropdown matrices. If the value is a matrix, it means that question is a cell question.\n * This property is null for a stand alone question.\n */\n get: function () {\n return this.parentQuestionValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setParentQuestion = function (val) {\n this.parentQuestionValue = val;\n this.onParentQuestionChanged();\n };\n Question.prototype.onParentQuestionChanged = function () { };\n Question.prototype.onParentChanged = function () { };\n Object.defineProperty(Question.prototype, \"hasTitle\", {\n /**\n * Returns false if the question doesn't have a title property, for example: QuestionHtmlModel, or titleLocation property equals to \"hidden\"\n * @see titleLocation\n */\n get: function () {\n return this.getTitleLocation() !== \"hidden\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"titleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for this panel/page.\n * Please note, this property is hidden for questions without input, for example html question.\n * @see SurveyModel.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"titleLocation\");\n },\n set: function (value) {\n var isVisibilityChanged = this.titleLocation == \"hidden\" || value == \"hidden\";\n this.setPropertyValue(\"titleLocation\", value.toLowerCase());\n this.updateQuestionCss();\n if (isVisibilityChanged) {\n this.notifySurveyVisibilityChanged();\n }\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.notifySurveyVisibilityChanged = function () {\n if (!this.survey || this.isLoadingFromJson)\n return;\n this.survey.questionVisibilityChanged(this, this.isVisible);\n if (this.survey.isClearValueOnHidden && !this.visible) {\n this.clearValue();\n }\n };\n /**\n * Return the title location based on question titleLocation property and QuestionTitleLocation of it's parents\n * @see titleLocation\n * @see PanelModelBase.QuestionTitleLocation\n * @see SurveyModel.QuestionTitleLocation\n */\n Question.prototype.getTitleLocation = function () {\n if (this.isFlowLayout)\n return \"hidden\";\n var location = this.getTitleLocationCore();\n if (location === \"left\" && !this.isAllowTitleLeft)\n location = \"top\";\n return location;\n };\n Question.prototype.getTitleLocationCore = function () {\n if (this.titleLocation !== \"default\")\n return this.titleLocation;\n if (!!this.parent)\n return this.parent.getQuestionTitleLocation();\n if (!!this.survey)\n return this.survey.questionTitleLocation;\n return \"top\";\n };\n Object.defineProperty(Question.prototype, \"hasTitleOnLeft\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"left\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnTop\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnBottom\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"bottom\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnLeftTop\", {\n get: function () {\n if (!this.hasTitle)\n return false;\n var location = this.getTitleLocation();\n return location === \"left\" || location === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"errorLocation\", {\n get: function () {\n return this.survey ? this.survey.questionErrorLocation : \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasInput\", {\n /**\n * Returns false if the question doesn't have an input element, for example: QuestionHtmlModel\n * @see hasSingleInput\n */\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasSingleInput\", {\n /**\n * Returns false if the question doesn't have an input element or have multiple inputs: matrices or panel dynamic\n * @see hasInput\n */\n get: function () {\n return this.hasInput;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"inputId\", {\n get: function () {\n return this.id + \"i\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"title\", {\n /**\n * Question title. Use survey questionTitleTemplate property to change the title question is rendered. If it is empty, then question name property is used.\n * @see SurveyModel.questionTitleTemplate\n */\n get: function () {\n return this.getLocalizableStringText(\"title\", this.name);\n },\n set: function (val) {\n this.setLocalizableStringText(\"title\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"descriptionLocation\", {\n /**\n * Question description location. By default, value is \"default\" and it depends on survey questionDescriptionLocation property\n * You may change it to \"underInput\" to render it under question input or \"underTitle\" to rendered it under title.\n * @see description\n * @see Survey.questionDescriptionLocation\n */\n get: function () {\n return this.getPropertyValue(\"descriptionLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"descriptionLocation\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderTitle\", {\n get: function () {\n return this.getDescriptionLocation() == \"underTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderInput\", {\n get: function () {\n return this.getDescriptionLocation() == \"underInput\";\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getDescriptionLocation = function () {\n if (this.descriptionLocation !== \"default\")\n return this.descriptionLocation;\n return !!this.survey\n ? this.survey.questionDescriptionLocation\n : \"underTitle\";\n };\n Object.defineProperty(Question.prototype, \"clickTitleFunction\", {\n get: function () {\n if (this.hasInput) {\n var self = this;\n return function () {\n if (self.isCollapsed)\n return;\n setTimeout(function () {\n self.focus();\n }, 1);\n return true;\n };\n }\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getLocalizableStringText(\"requiredErrorText\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"requiredErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"commentText\", {\n /**\n * Use it to get or set the comment value.\n */\n get: function () {\n return this.getLocalizableStringText(\"commentText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"commentText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locCommentText\", {\n get: function () {\n return this.getLocalizableString(\"commentText\");\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns a copy of question errors survey. For some questions like matrix and panel dynamic it includes the errors of nested questions.\n */\n Question.prototype.getAllErrors = function () {\n return this.errors.slice();\n };\n Question.prototype.getErrorByType = function (errorType) {\n for (var i = 0; i < this.errors.length; i++) {\n if (this.errors[i].getErrorType() === errorType)\n return this.errors[i];\n }\n return null;\n };\n Object.defineProperty(Question.prototype, \"customWidget\", {\n /**\n * The link to the custom widget.\n */\n get: function () {\n if (!this.isCustomWidgetRequested && !this.customWidgetValue) {\n this.isCustomWidgetRequested = true;\n this.updateCustomWidget();\n }\n return this.customWidgetValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.updateCustomWidget = function () {\n this.customWidgetValue = _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__[\"CustomWidgetCollection\"].Instance.getCustomWidget(this);\n };\n Object.defineProperty(Question.prototype, \"isCompositeQuestion\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.afterRenderQuestionElement = function (el) {\n if (!this.survey || !this.hasSingleInput)\n return;\n this.survey.afterRenderQuestionInput(this, el);\n };\n Question.prototype.afterRender = function (el) {\n if (!this.survey)\n return;\n this.survey.afterRenderQuestion(this, el);\n if (!!this.afterRenderQuestionCallback) {\n this.afterRenderQuestionCallback(this, el);\n }\n };\n Question.prototype.beforeDestroyQuestionElement = function (el) { };\n Object.defineProperty(Question.prototype, \"processedTitle\", {\n /**\n * Returns the rendred question title.\n */\n get: function () {\n var res = this.locProcessedTitle.textOrHtml;\n return res ? res : this.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"fullTitle\", {\n /**\n * Returns the title after processing the question template.\n * @see SurveyModel.questionTitleTemplate\n */\n get: function () {\n return this.locTitle.renderedHtml;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"titlePattern\", {\n get: function () {\n return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextOnStart\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"requireNumTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextBeforeTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numRequireTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextAfterTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"startWithNewLine\", {\n /**\n * The Question renders on the new line if the property is true. If the property is false, the question tries to render on the same line/row with a previous question/panel.\n */\n get: function () {\n return this.getPropertyValue(\"startWithNewLine\", true);\n },\n set: function (val) {\n if (this.startWithNewLine == val)\n return;\n this.setPropertyValue(\"startWithNewLine\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"cssClasses\", {\n /**\n * Returns all css classes that used for rendering the question. You may use survey.updateQuestionCssClasses event to override css classes for a question.\n * @see SurveyModel.updateQuestionCssClasses\n */\n get: function () {\n if (!this.survey)\n return this.calcCssClasses();\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n this.updateElementCssCore(this.cssClassesValue);\n }\n return this.cssClassesValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.calcCssClasses = function () {\n var css = this.css;\n var classes = { error: {} };\n this.copyCssClasses(classes, css.question);\n this.copyCssClasses(classes.error, css.error);\n this.updateCssClasses(classes, css);\n if (this.survey) {\n this.survey.updateQuestionCssClasses(this, classes);\n }\n return classes;\n };\n Object.defineProperty(Question.prototype, \"cssRoot\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssRoot\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssRoot = function (val) {\n this.setPropertyValue(\"cssRoot\", val);\n };\n Question.prototype.getCssRoot = function (cssClasses) {\n var res = this.isFlowLayout && !this.isDesignMode\n ? cssClasses.flowRoot\n : cssClasses.mainRoot;\n if (!res)\n res = \"\";\n if (!this.isFlowLayout &&\n this.hasTitleOnLeft &&\n !!cssClasses.titleLeftRoot) {\n res += \" \" + cssClasses.titleLeftRoot;\n }\n if (this.errors.length > 0 && !!cssClasses.hasError) {\n res += \" \" + cssClasses.hasError;\n }\n if (cssClasses.small && !this.width) {\n res += \" \" + cssClasses.small;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssHeader\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssHeader\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssHeader = function (val) {\n this.setPropertyValue(\"cssHeader\", val);\n };\n Question.prototype.getCssHeader = function (cssClasses) {\n var res = cssClasses.header || \"\";\n if (this.hasTitleOnTop && !!cssClasses.headerTop) {\n res += \" \" + cssClasses.headerTop;\n }\n if (this.hasTitleOnLeft && !!cssClasses.headerLeft) {\n res += \" \" + cssClasses.headerLeft;\n }\n if (this.hasTitleOnBottom && !!cssClasses.headerBottom) {\n res += \" \" + cssClasses.headerBottom;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssContent\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssContent\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssContent = function (val) {\n this.setPropertyValue(\"cssContent\", val);\n };\n Question.prototype.getCssContent = function (cssClasses) {\n var res = cssClasses.content || \"\";\n if (this.hasTitleOnLeft && !!cssClasses.contentLeft) {\n res += \" \" + cssClasses.contentLeft;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssTitle\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssTitle\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssTitle = function (val) {\n this.setPropertyValue(\"cssTitle\", val);\n };\n Question.prototype.getCssTitle = function (cssClasses) {\n var result = cssClasses.title;\n if (this.isCollapsed || this.isExpanded) {\n result += \" \" + cssClasses.titleExpandable;\n }\n if (this.containsErrors) {\n if (!!cssClasses.titleOnError) {\n result += \" \" + cssClasses.titleOnError;\n }\n }\n else if (this.isAnswered && !!cssClasses.titleOnAnswer) {\n result += \" \" + cssClasses.titleOnAnswer;\n }\n return result;\n };\n Object.defineProperty(Question.prototype, \"cssError\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssError\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssError = function (val) {\n this.setPropertyValue(\"cssError\", val);\n };\n //TODO was not removed from other places\n Question.prototype.getCssError = function (cssClasses) {\n var res = cssClasses.error.root || \"\";\n if (this.errorLocation == \"top\") {\n if (!!cssClasses.error.locationTop) {\n res += \" \" + cssClasses.error.locationTop;\n }\n }\n else if (this.errorLocation === \"bottom\" &&\n !!cssClasses.error.locationBottom) {\n res += \" \" + cssClasses.error.locationBottom;\n }\n return res;\n };\n Question.prototype.updateElementCss = function (reNew) {\n this.cssClassesValue = undefined;\n if (reNew) {\n this.updateQuestionCss(true);\n }\n };\n Question.prototype.updateQuestionCss = function (reNew) {\n if (this.isLoadingFromJson ||\n !this.survey ||\n (reNew !== true && !this.cssClassesValue))\n return;\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n }\n this.updateElementCssCore(this.cssClasses);\n };\n Question.prototype.ensureElementCss = function () {\n if (!this.cssClassesValue) {\n this.updateQuestionCss(true);\n }\n };\n Question.prototype.updateElementCssCore = function (cssClasses) {\n this.setCssRoot(this.getCssRoot(cssClasses));\n this.setCssHeader(this.getCssHeader(cssClasses));\n this.setCssContent(this.getCssContent(cssClasses));\n this.setCssTitle(this.getCssTitle(cssClasses));\n this.setCssError(this.getCssError(cssClasses));\n };\n Question.prototype.updateCssClasses = function (res, css) {\n if (!css.question)\n return;\n if (this.isRequired) {\n if (!!css.question.required) {\n res.root = (res.root ? res.root + \" \" : \"\") + objCss;\n }\n if (css.question.titleRequired) {\n res.title += \" \" + css.question.titleRequired;\n }\n }\n var objCss = css[this.getCssType()];\n if (objCss === undefined || objCss === null)\n return;\n if (typeof objCss === \"string\" || objCss instanceof String) {\n res.root = (res.root ? res.root + \" \" : \"\") + objCss;\n }\n else {\n for (var key in objCss) {\n res[key] = objCss[key];\n }\n }\n };\n Question.prototype.getCssType = function () {\n return this.getType();\n };\n Object.defineProperty(Question.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"width\", {\n /**\n * Use it to set the specific width to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"width\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"minWidth\", {\n /**\n * Use it to set the specific minWidth constraint to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"minWidth\", _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].minWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"minWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"maxWidth\", {\n /**\n * Use it to set the specific maxWidth constraint to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"maxWidth\", _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].maxWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"maxWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"renderWidth\", {\n /**\n * The rendered width of the question.\n */\n get: function () {\n return this.getPropertyValue(\"renderWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"indent\", {\n /**\n * Set it different from 0 to increase the left padding.\n */\n get: function () {\n return this.getPropertyValue(\"indent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"indent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"rightIndent\", {\n /**\n * Set it different from 0 to increase the right padding.\n */\n get: function () {\n return this.getPropertyValue(\"rightIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"rightIndent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"paddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"paddintLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddintLeft\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"paddingRight\", {\n get: function () {\n return this.getPropertyValue(\"paddingRight\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingRight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onIndentChanged = function () {\n this.paddingLeft = this.getIndentSize(this.indent);\n this.paddingRight = this.getIndentSize(this.rightIndent);\n };\n Question.prototype.getIndentSize = function (indent) {\n if (indent < 1 || !this.getSurvey() || !this.cssClasses)\n return \"\";\n return indent * this.cssClasses.indent + \"px\";\n };\n /**\n * Move the focus to the input of this question.\n * @param onError set this parameter to true, to focus the input with the first error, other wise the first input will be focused.\n */\n Question.prototype.focus = function (onError) {\n if (onError === void 0) { onError = false; }\n if (this.isDesignMode)\n return;\n if (!!this.survey) {\n this.survey.scrollElementToTop(this, this, null, this.id);\n }\n var id = !onError\n ? this.getFirstInputElementId()\n : this.getFirstErrorInputElementId();\n if (_survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].FocusElement(id)) {\n this.fireCallback(this.focusCallback);\n }\n };\n Question.prototype.fireCallback = function (callback) {\n if (callback)\n callback();\n };\n Question.prototype.getOthersMaxLength = function () {\n if (!this.survey)\n return null;\n return this.survey.maxOthersLength > 0 ? this.survey.maxOthersLength : null;\n };\n Question.prototype.onCreating = function () { };\n Question.prototype.getFirstInputElementId = function () {\n return this.inputId;\n };\n Question.prototype.getFirstErrorInputElementId = function () {\n return this.getFirstInputElementId();\n };\n Question.prototype.getProcessedTextValue = function (textValue) {\n var name = textValue.name.toLocaleLowerCase();\n textValue.isExists =\n Object.keys(Question.TextPreprocessorValuesMap).indexOf(name) !== -1 ||\n this[textValue.name] !== undefined;\n textValue.value = this[Question.TextPreprocessorValuesMap[name] || textValue.name];\n };\n Question.prototype.supportComment = function () {\n return false;\n };\n Question.prototype.supportOther = function () {\n return false;\n };\n Object.defineProperty(Question.prototype, \"isRequired\", {\n /**\n * Set this property to true, to make the question a required. If a user doesn't answer the question then a validation error will be generated.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"isRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isRequired\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredIf\", {\n /**\n * An expression that returns true or false. If it returns true the Question becomes required and an end-user has to answer it.\n * If it returns false the Question then an end-user may not answer it the Question maybe empty.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then isRequired property is used.\n * Please note, this property is hidden for question without input, for example html question.\n * @see isRequired\n */\n get: function () {\n return this.getPropertyValue(\"requiredIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredIf\", val);\n this.runConditions();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasComment\", {\n /**\n * Set it to true, to add a comment for the question.\n */\n get: function () {\n return this.getPropertyValue(\"hasComment\", false);\n },\n set: function (val) {\n if (!this.supportComment())\n return;\n this.setPropertyValue(\"hasComment\", val);\n if (this.hasComment)\n this.hasOther = false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"id\", {\n /**\n * The unique identificator. It is generated automatically.\n */\n get: function () {\n return this.getPropertyValue(\"id\");\n },\n set: function (val) {\n this.setPropertyValue(\"id\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaTitleId\", {\n get: function () {\n return this.id + \"_ariaTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaRole\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasOther\", {\n get: function () {\n return this.getPropertyValue(\"hasOther\", false);\n },\n set: function (val) {\n if (!this.supportOther() || this.hasOther == val)\n return;\n this.setPropertyValue(\"hasOther\", val);\n if (this.hasOther)\n this.hasComment = false;\n this.hasOtherChanged();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.hasOtherChanged = function () { };\n Object.defineProperty(Question.prototype, \"requireUpdateCommentValue\", {\n get: function () {\n return this.hasComment || this.hasOther;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isReadOnly\", {\n /**\n * Returns true if readOnly property is true or survey is in display mode or parent panel/page is readOnly.\n * @see SurveyModel.model\n * @see readOnly\n */\n get: function () {\n var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n return this.readOnly || isParentReadOnly || isSurveyReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isInputReadOnly\", {\n get: function () {\n var isDesignModeV2 = _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportCreatorV2 && this.isDesignMode;\n return this.isReadOnly || isDesignModeV2;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onReadOnlyChanged = function () {\n this.setPropertyValue(\"isInputReadOnly\", this.isInputReadOnly);\n _super.prototype.onReadOnlyChanged.call(this);\n };\n Object.defineProperty(Question.prototype, \"enableIf\", {\n /**\n * An expression that returns true or false. If it returns false the Question becomes read only and an end-user will not able to answer on the qustion. The library runs the expression on survey start and on changing a question value. If the property is empty then readOnly property is used.\n * Please note, this property is hidden for question without input, for example html question.\n * @see readOnly\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n this.runConditions();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Run visibleIf and enableIf expressions. If visibleIf or/and enabledIf are not empty, then the results of performing the expression (true or false) set to the visible/readOnly properties.\n * @param values Typically survey results\n * @see visible\n * @see visibleIf\n * @see readOnly\n * @see enableIf\n */\n Question.prototype.runCondition = function (values, properties) {\n if (this.isDesignMode)\n return;\n if (!properties)\n properties = {};\n properties[\"question\"] = this;\n if (!this.areInvisibleElementsShowing) {\n this.runVisibleIfCondition(values, properties);\n }\n this.runEnableIfCondition(values, properties);\n this.runRequiredIfCondition(values, properties);\n };\n Question.prototype.runVisibleIfCondition = function (values, properties) {\n var _this = this;\n if (!this.visibleIf)\n return;\n if (!this.conditionRunner)\n this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.visibleIf);\n this.conditionRunner.expression = this.visibleIf;\n this.conditionRunner.onRunComplete = function (res) {\n _this.visible = res;\n };\n this.conditionRunner.run(values, properties);\n };\n Question.prototype.runEnableIfCondition = function (values, properties) {\n var _this = this;\n if (!this.enableIf)\n return;\n if (!this.conditionEnabelRunner)\n this.conditionEnabelRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.enableIf);\n this.conditionEnabelRunner.expression = this.enableIf;\n this.conditionEnabelRunner.onRunComplete = function (res) {\n _this.readOnly = !res;\n };\n this.conditionEnabelRunner.run(values, properties);\n };\n Question.prototype.runRequiredIfCondition = function (values, properties) {\n var _this = this;\n if (!this.requiredIf)\n return;\n if (!this.conditionRequiredRunner)\n this.conditionRequiredRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.requiredIf);\n this.conditionRequiredRunner.expression = this.requiredIf;\n this.conditionRequiredRunner.onRunComplete = function (res) {\n _this.isRequired = res;\n };\n this.conditionRequiredRunner.run(values, properties);\n };\n Object.defineProperty(Question.prototype, \"no\", {\n /**\n * The property returns the question number. If question is invisible then it returns empty string.\n * If visibleIndex is 1, then no is 2, or 'B' if survey.questionStartIndex is 'A'.\n * @see SurveyModel.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"no\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.calcNo = function () {\n if (!this.hasTitle || this.hideNumber)\n return \"\";\n var no = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getNumberByIndex(this.visibleIndex, this.getStartIndex());\n if (!!this.survey) {\n no = this.survey.getUpdatedQuestionNo(this, no);\n }\n return no;\n };\n Question.prototype.getStartIndex = function () {\n if (!!this.parent)\n return this.parent.getQuestionStartIndex();\n if (!!this.survey)\n return this.survey.questionStartIndex;\n return \"\";\n };\n Question.prototype.onSurveyLoad = function () {\n this.fireCallback(this.surveyLoadCallback);\n this.updateValueWithDefaults();\n };\n Question.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n if (!this.survey)\n return;\n this.initDataFromSurvey();\n this.onSurveyValueChanged(this.value);\n this.updateValueWithDefaults();\n this.onIndentChanged();\n this.updateQuestionCss();\n };\n Question.prototype.initDataFromSurvey = function () {\n if (!!this.data) {\n this.updateValueFromSurvey(this.data.getValue(this.getValueName()));\n this.initCommentFromSurvey();\n }\n };\n Question.prototype.initCommentFromSurvey = function () {\n if (!!this.data && this.requireUpdateCommentValue) {\n this.updateCommentFromSurvey(this.data.getComment(this.getValueName()));\n }\n else {\n this.updateCommentFromSurvey(\"\");\n }\n };\n Question.prototype.runExpression = function (expression) {\n if (!this.survey || !expression)\n return undefined;\n return this.survey.runExpression(expression);\n };\n Object.defineProperty(Question.prototype, \"questionValue\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (val) {\n this.setPropertyValue(\"value\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"questionComment\", {\n get: function () {\n return this.getPropertyValue(\"comment\");\n },\n set: function (val) {\n this.setPropertyValue(\"comment\", val);\n this.fireCallback(this.commentChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"value\", {\n /**\n * Get/Set the question value.\n * @see SurveyMode.setValue\n * @see SurveyMode.getValue\n */\n get: function () {\n return this.getValueCore();\n },\n set: function (newValue) {\n this.setNewValue(newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"valueForSurvey\", {\n get: function () {\n if (!!this.valueToDataCallback) {\n return this.valueToDataCallback(this.value);\n }\n return this.value;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clear the question value. It clears the question comment as well.\n */\n Question.prototype.clearValue = function () {\n if (this.value !== undefined) {\n this.value = undefined;\n }\n this.comment = undefined;\n };\n Question.prototype.unbindValue = function () {\n this.clearValue();\n };\n Question.prototype.createValueCopy = function () {\n return this.getUnbindValue(this.value);\n };\n Question.prototype.getUnbindValue = function (value) {\n if (this.isValueSurveyElement(value))\n return value;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n };\n Question.prototype.isValueSurveyElement = function (val) {\n if (!val)\n return false;\n if (Array.isArray(val))\n return val.length > 0 ? this.isValueSurveyElement(val[0]) : false;\n return !!val.getType && !!val.onPropertyChanged;\n };\n Question.prototype.canClearValueAsInvisible = function () {\n if (this.isVisible && this.isParentVisible)\n return false;\n if (!!this.page && this.page.isStarted)\n return false;\n if (!this.survey || !this.valueName)\n return true;\n return !this.survey.hasVisibleQuestionByValueName(this.valueName);\n };\n Object.defineProperty(Question.prototype, \"isParentVisible\", {\n get: function () {\n var parent = this.parent;\n while (parent) {\n if (!parent.isVisible)\n return false;\n parent = parent.parent;\n }\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.clearValueIfInvisible = function () {\n if (this.canClearValueAsInvisible()) {\n this.clearValue();\n }\n };\n Object.defineProperty(Question.prototype, \"displayValue\", {\n get: function () {\n if (this.isLoadingFromJson)\n return \"\";\n return this.getDisplayValue(true);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Return the question value as a display text. For example, for dropdown, it would return the item text instead of item value.\n * @param keysAsText Set this value to true, to return key (in matrices questions) as display text as well.\n * @param value use this parameter, if you want to get display value for this value and not question.value. It is undefined by default.\n */\n Question.prototype.getDisplayValue = function (keysAsText, value) {\n if (value === void 0) { value = undefined; }\n var res = this.calcDisplayValue(keysAsText, value);\n return !!this.displayValueCallback ? this.displayValueCallback(res) : res;\n };\n Question.prototype.calcDisplayValue = function (keysAsText, value) {\n if (value === void 0) { value = undefined; }\n if (this.customWidget) {\n var res = this.customWidget.getDisplayValue(this, value);\n if (res)\n return res;\n }\n value = value == undefined ? this.createValueCopy() : value;\n if (this.isValueEmpty(value))\n return this.getDisplayValueEmpty();\n return this.getDisplayValueCore(keysAsText, value);\n };\n Question.prototype.getDisplayValueCore = function (keyAsText, value) {\n return value;\n };\n Question.prototype.getDisplayValueEmpty = function () {\n return \"\";\n };\n Object.defineProperty(Question.prototype, \"defaultValue\", {\n /**\n * Set the default value to the question. It will be assign to the question on loading the survey from JSON or adding a question to the survey or on setting this property of the value is empty.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"defaultValue\");\n },\n set: function (val) {\n if (this.isValueExpression(val)) {\n this.defaultValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"defaultValue\", this.convertDefaultValue(val));\n this.updateValueWithDefaults();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"defaultValueExpression\", {\n get: function () {\n return this.getPropertyValue(\"defaultValueExpression\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueExpression\", val);\n this.updateValueWithDefaults();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns question answer data as a plain object: with question title, name, value and displayValue.\n * For complex questions (like matrix, etc.) isNode flag is set to true and data contains array of nested objects (rows)\n * set options.includeEmpty to false if you want to skip empty answers\n */\n Question.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n if (options.includeEmpty || !this.isEmpty()) {\n var questionPlainData = {\n name: this.name,\n title: this.locTitle.renderedHtml,\n value: this.value,\n displayValue: this.displayValue,\n isNode: false,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n };\n if (options.includeQuestionTypes === true) {\n questionPlainData.questionType = this.getType();\n }\n (options.calculations || []).forEach(function (calculation) {\n questionPlainData[calculation.propertyName] = _this[calculation.propertyName];\n });\n if (this.hasComment) {\n questionPlainData.isNode = true;\n questionPlainData.data = [\n {\n name: 0,\n isComment: true,\n title: \"Comment\",\n value: _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].commentPrefix,\n displayValue: this.comment,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n },\n ];\n }\n return questionPlainData;\n }\n return undefined;\n };\n Object.defineProperty(Question.prototype, \"correctAnswer\", {\n /**\n * The correct answer on the question. Set this value if you are doing a quiz.\n * Please note, this property is hidden for question without input, for example html question.\n * @see SurveyModel.correctAnswers\n * @see SurveyModel.inCorrectAnswers\n */\n get: function () {\n return this.getPropertyValue(\"correctAnswer\");\n },\n set: function (val) {\n this.setPropertyValue(\"correctAnswer\", this.convertDefaultValue(val));\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.convertDefaultValue = function (val) {\n return val;\n };\n Object.defineProperty(Question.prototype, \"quizQuestionCount\", {\n /**\n * Returns questions count: 1 for the non-matrix questions and all inner visible questions that has input(s) widgets for question of matrix types.\n * @see getQuizQuestions\n */\n get: function () {\n if (this.isVisible &&\n this.hasInput &&\n !this.isValueEmpty(this.correctAnswer))\n return this.getQuizQuestionCount();\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"correctAnswerCount\", {\n get: function () {\n if (!this.isEmpty() && !this.isValueEmpty(this.correctAnswer))\n return this.getCorrectAnswerCount();\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getQuizQuestionCount = function () {\n return 1;\n };\n Question.prototype.getCorrectAnswerCount = function () {\n return this.isTwoValueEquals(this.value, this.correctAnswer, true, true)\n ? 1\n : 0;\n };\n Question.prototype.isAnswerCorrect = function () {\n return this.correctAnswerCount == this.quizQuestionCount;\n };\n Question.prototype.updateValueWithDefaults = function () {\n if (this.isLoadingFromJson ||\n (!this.isDesignMode && this.isDefaultValueEmpty()))\n return;\n if (!this.isDesignMode && !this.isEmpty())\n return;\n if (this.isEmpty() && this.isDefaultValueEmpty())\n return;\n if (!!this.survey && this.survey.isClearValueOnHidden && !this.isVisible)\n return;\n this.setDefaultValue();\n };\n Question.prototype.getQuestionFromArray = function (name, index) {\n return null;\n };\n Question.prototype.getDefaultValue = function () {\n return this.defaultValue;\n };\n Question.prototype.isDefaultValueEmpty = function () {\n return !this.defaultValueExpression && this.isValueEmpty(this.defaultValue);\n };\n Question.prototype.setDefaultValue = function () {\n var _this = this;\n this.setValueAndRunExpression(this.defaultValueExpression, this.getUnbindValue(this.defaultValue), function (val) {\n _this.value = val;\n });\n };\n Question.prototype.isValueExpression = function (val) {\n return !!val && typeof val == \"string\" && val.length > 0 && val[0] == \"=\";\n };\n Question.prototype.setValueAndRunExpression = function (expression, defaultValue, setFunc, values, properties) {\n var _this = this;\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n var func = function (val) {\n if (val instanceof Date) {\n val = val.toISOString().slice(0, 10);\n }\n setFunc(val);\n };\n if (!!expression && !!this.data) {\n if (!values)\n values = this.data.getFilteredValues();\n if (!properties)\n properties = this.data.getFilteredProperties();\n var runner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ExpressionRunner\"](expression);\n if (runner.canRun) {\n runner.onRunComplete = function (res) {\n if (res == undefined)\n res = _this.defaultValue;\n func(res);\n };\n runner.run(values, properties);\n }\n }\n else {\n func(defaultValue);\n }\n };\n Object.defineProperty(Question.prototype, \"comment\", {\n /**\n * The question comment value.\n */\n get: function () {\n return this.getQuestionComment();\n },\n set: function (newValue) {\n if (!!newValue) {\n newValue = newValue.toString().trim();\n }\n if (this.comment == newValue)\n return;\n this.setQuestionComment(newValue);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getQuestionComment = function () {\n return this.questionComment;\n };\n Question.prototype.setQuestionComment = function (newValue) {\n this.setNewComment(newValue);\n };\n /**\n * Returns true if the question value is empty\n */\n Question.prototype.isEmpty = function () {\n return this.isValueEmpty(this.value);\n };\n Object.defineProperty(Question.prototype, \"isAnswered\", {\n get: function () {\n return this.getPropertyValue(\"isAnswered\");\n },\n set: function (val) {\n this.setPropertyValue(\"isAnswered\", val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.updateIsAnswered = function () {\n this.setPropertyValue(\"isAnswered\", this.getIsAnswered());\n };\n Question.prototype.getIsAnswered = function () {\n return !this.isEmpty();\n };\n Object.defineProperty(Question.prototype, \"validators\", {\n /**\n * The list of question validators.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"validators\");\n },\n set: function (val) {\n this.setPropertyValue(\"validators\", val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getValidators = function () {\n return this.validators;\n };\n Question.prototype.getSupportedValidators = function () {\n var res = [];\n var className = this.getType();\n while (!!className) {\n var classValidators = _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportedValidators[className];\n if (!!classValidators) {\n for (var i = classValidators.length - 1; i >= 0; i--) {\n res.splice(0, 0, classValidators[i]);\n }\n }\n var classInfo = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(className);\n className = classInfo.parentName;\n }\n return res;\n };\n Question.prototype.addSupportedValidators = function (supportedValidators, classValidators) { };\n Question.prototype.addConditionObjectsByContext = function (objects, context) {\n objects.push({\n name: this.getValueName(),\n text: this.processedTitle,\n question: this,\n });\n };\n Question.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(this);\n json[\"type\"] = this.getType();\n return json;\n };\n /**\n * Returns true if there is a validation error(s) in the question.\n * @param fireCallback set it to true to show an error in UI.\n */\n Question.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var oldHasErrors = this.errors.length > 0;\n var errors = this.checkForErrors(!!rec && rec.isOnValueChanged === true);\n if (fireCallback) {\n if (!!this.survey) {\n this.survey.beforeSettingQuestionErrors(this, errors);\n }\n this.errors = errors;\n }\n this.updateContainsErrors();\n if (oldHasErrors != errors.length > 0) {\n this.updateQuestionCss();\n }\n if (this.isCollapsed && rec && fireCallback && errors.length > 0) {\n this.expand();\n }\n return errors.length > 0;\n };\n Object.defineProperty(Question.prototype, \"currentErrorCount\", {\n /**\n * Returns the validation errors count.\n */\n get: function () {\n return this.errors.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredText\", {\n /**\n * Returns the char/string for a required question.\n * @see SurveyModel.requiredText\n */\n get: function () {\n return this.survey != null && this.isRequired\n ? this.survey.requiredText\n : \"\";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add error into the question error list.\n * @param error\n */\n Question.prototype.addError = function (error) {\n if (!error)\n return;\n var newError = null;\n if (typeof error === \"string\" || error instanceof String) {\n newError = new _error__WEBPACK_IMPORTED_MODULE_4__[\"CustomError\"](error, this.survey);\n }\n else {\n newError = error;\n }\n this.errors.push(newError);\n };\n /**\n * Remove a particular error from the question error list.\n * @param error\n */\n Question.prototype.removeError = function (error) {\n var errors = this.errors;\n var index = errors.indexOf(error);\n if (index !== -1)\n errors.splice(index, 1);\n };\n Question.prototype.checkForErrors = function (isOnValueChanged) {\n var qErrors = new Array();\n if (this.isVisible && !this.isReadOnly) {\n this.collectErrors(qErrors, isOnValueChanged);\n }\n return qErrors;\n };\n Question.prototype.collectErrors = function (qErrors, isOnValueChanged) {\n this.onCheckForErrors(qErrors, isOnValueChanged);\n if (qErrors.length > 0 || !this.canRunValidators(isOnValueChanged))\n return;\n var errors = this.runValidators();\n if (errors.length > 0) {\n //validators may change the question value.\n qErrors.length = 0;\n for (var i = 0; i < errors.length; i++) {\n qErrors.push(errors[i]);\n }\n }\n if (this.survey && qErrors.length == 0) {\n var error = this.fireSurveyValidation();\n if (error) {\n qErrors.push(error);\n }\n }\n };\n Question.prototype.canRunValidators = function (isOnValueChanged) {\n return true;\n };\n Question.prototype.fireSurveyValidation = function () {\n if (this.validateValueCallback)\n return this.validateValueCallback();\n return this.survey ? this.survey.validateQuestion(this) : null;\n };\n Question.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n if (!isOnValueChanged && this.hasRequiredError()) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_4__[\"AnswerRequiredError\"](this.requiredErrorText, this));\n }\n };\n Question.prototype.hasRequiredError = function () {\n return this.isRequired && this.isEmpty();\n };\n Object.defineProperty(Question.prototype, \"isRunningValidators\", {\n get: function () {\n return this.getIsRunningValidators();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getIsRunningValidators = function () {\n return this.isRunningValidatorsValue;\n };\n Question.prototype.runValidators = function () {\n var _this = this;\n if (!!this.validatorRunner) {\n this.validatorRunner.onAsyncCompleted = null;\n }\n this.validatorRunner = new _validator__WEBPACK_IMPORTED_MODULE_5__[\"ValidatorRunner\"]();\n this.isRunningValidatorsValue = true;\n this.validatorRunner.onAsyncCompleted = function (errors) {\n _this.doOnAsyncCompleted(errors);\n };\n return this.validatorRunner.run(this);\n };\n Question.prototype.doOnAsyncCompleted = function (errors) {\n for (var i = 0; i < errors.length; i++) {\n this.errors.push(errors[i]);\n }\n this.isRunningValidatorsValue = false;\n this.raiseOnCompletedAsyncValidators();\n };\n Question.prototype.raiseOnCompletedAsyncValidators = function () {\n if (!!this.onCompletedAsyncValidators && !this.isRunningValidators) {\n this.onCompletedAsyncValidators(this.getAllErrors().length > 0);\n this.onCompletedAsyncValidators = null;\n }\n };\n Question.prototype.setNewValue = function (newValue) {\n var oldAnswered = this.isAnswered;\n this.setNewValueInData(newValue);\n this.allowNotifyValueChanged && this.onValueChanged();\n if (this.isAnswered != oldAnswered) {\n this.updateQuestionCss();\n }\n };\n Question.prototype.isTextValue = function () {\n return false;\n };\n Object.defineProperty(Question.prototype, \"isSurveyInputTextUpdate\", {\n get: function () {\n return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getDataLocNotification = function () {\n return this.isInputTextUpdate ? \"text\" : false;\n };\n Object.defineProperty(Question.prototype, \"isInputTextUpdate\", {\n get: function () {\n return this.isSurveyInputTextUpdate && this.isTextValue();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setNewValueInData = function (newValue) {\n newValue = this.valueToData(newValue);\n if (!this.isValueChangedInSurvey) {\n this.setValueCore(newValue);\n }\n };\n Question.prototype.getValueCore = function () {\n return this.questionValue;\n };\n Question.prototype.setValueCore = function (newValue) {\n this.setQuestionValue(newValue);\n if (this.data != null && this.canSetValueToSurvey()) {\n newValue = this.valueForSurvey;\n this.data.setValue(this.getValueName(), newValue, this.getDataLocNotification(), this.allowNotifyValueChanged);\n }\n };\n Question.prototype.canSetValueToSurvey = function () {\n return true;\n };\n Question.prototype.valueFromData = function (val) {\n return val;\n };\n Question.prototype.valueToData = function (val) {\n return val;\n };\n Question.prototype.onValueChanged = function () { };\n Question.prototype.setNewComment = function (newValue) {\n this.questionComment = newValue;\n if (this.data != null) {\n this.data.setComment(this.getValueName(), newValue, this.isSurveyInputTextUpdate ? \"text\" : false);\n }\n };\n Question.prototype.getValidName = function (name) {\n if (!name)\n return name;\n return name.trim().replace(/[\\{\\}]+/g, \"\");\n };\n //IQuestion\n Question.prototype.updateValueFromSurvey = function (newValue) {\n newValue = this.getUnbindValue(newValue);\n if (!!this.valueFromDataCallback) {\n newValue = this.valueFromDataCallback(newValue);\n }\n this.setQuestionValue(this.valueFromData(newValue));\n };\n Question.prototype.updateCommentFromSurvey = function (newValue) {\n this.questionComment = newValue;\n };\n Question.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n this.questionValue = newValue;\n this.allowNotifyValueChanged &&\n this.fireCallback(this.valueChangedCallback);\n if (updateIsAnswered)\n this.updateIsAnswered();\n };\n Question.prototype.onSurveyValueChanged = function (newValue) { };\n Question.prototype.setVisibleIndex = function (val) {\n if (!this.isVisible ||\n (!this.hasTitle && !_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].setQuestionVisibleIndexForHiddenTitle) ||\n (this.hideNumber && !_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].setQuestionVisibleIndexForHiddenNumber)) {\n val = -1;\n }\n this.setPropertyValue(\"visibleIndex\", val);\n this.setPropertyValue(\"no\", this.calcNo());\n return val < 0 ? 0 : 1;\n };\n Question.prototype.removeElement = function (element) {\n return false;\n };\n Question.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n Question.prototype.supportGoNextPageError = function () {\n return true;\n };\n /**\n * Call this function to remove values from the current question, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radigroup/dropdown/checkbox choices or matrix rows/columns.\n */\n Question.prototype.clearIncorrectValues = function () { };\n Question.prototype.clearOnDeletingContainer = function () { };\n /**\n * Call this function to clear all errors in the question\n */\n Question.prototype.clearErrors = function () {\n this.errors = [];\n };\n Question.prototype.clearUnusedValues = function () { };\n Question.prototype.onAnyValueChanged = function (name) { };\n Question.prototype.checkBindings = function (valueName, value) {\n if (this.bindings.isEmpty() || !this.data)\n return;\n var props = this.bindings.getPropertiesByValueName(valueName);\n for (var i = 0; i < props.length; i++) {\n this[props[i]] = value;\n }\n };\n /**\n * Returns the current survey locale\n * @see SurveyModel.locale\n */\n Question.prototype.getLocale = function () {\n return this.survey\n ? this.survey.getLocale()\n : this.locOwner\n ? this.locOwner.getLocale()\n : \"\";\n };\n Question.prototype.getMarkdownHtml = function (text, name) {\n return this.survey\n ? this.survey.getSurveyMarkdownHtml(this, text, name)\n : this.locOwner\n ? this.locOwner.getMarkdownHtml(text, name)\n : null;\n };\n Question.prototype.getRenderer = function (name) {\n return this.survey && typeof this.survey.getRendererForString === \"function\"\n ? this.survey.getRendererForString(this, name)\n : this.locOwner && typeof this.locOwner.getRenderer === \"function\"\n ? this.locOwner.getRenderer(name)\n : null;\n };\n Question.prototype.getProcessedText = function (text) {\n if (this.isLoadingFromJson)\n return text;\n if (this.textProcessor)\n return this.textProcessor.processText(text, this.useDisplayValuesInTitle);\n if (this.locOwner)\n return this.locOwner.getProcessedText(text);\n return text;\n };\n Question.prototype.getComponentName = function () {\n return _rendererFactory__WEBPACK_IMPORTED_MODULE_10__[\"RendererFactory\"].Instance.getRendererByQuestion(this);\n };\n Question.prototype.isDefaultRendering = function () {\n return (!!this.customWidget ||\n this.renderAs === \"default\" ||\n this.getComponentName() === \"default\");\n };\n //ISurveyErrorOwner\n Question.prototype.getErrorCustomText = function (text, error) {\n if (!!this.survey)\n return this.survey.getErrorCustomText(text, error);\n return text;\n };\n //IValidatorOwner\n Question.prototype.getValidatorTitle = function () {\n return null;\n };\n Object.defineProperty(Question.prototype, \"validatedValue\", {\n get: function () {\n return this.value;\n },\n set: function (val) {\n this.value = val;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getAllValues = function () {\n return !!this.data ? this.data.getAllValues() : null;\n };\n Question.TextPreprocessorValuesMap = {\n title: \"processedTitle\",\n require: \"requiredText\",\n };\n Question.questionCounter = 100;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true })\n ], Question.prototype, \"description\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Question.prototype, \"cssClassesValue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"default\" })\n ], Question.prototype, \"renderAs\", void 0);\n return Question;\n}(_survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"question\", [\n \"!name\",\n {\n name: \"state\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\"],\n },\n { name: \"visible:switch\", default: true },\n { name: \"useDisplayValuesInTitle:boolean\", default: true, layout: \"row\" },\n \"visibleIf:condition\",\n { name: \"width\" },\n { name: \"minWidth\", default: _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].minWidth },\n { name: \"maxWidth\", default: _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].maxWidth },\n { name: \"startWithNewLine:boolean\", default: true, layout: \"row\" },\n { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3], layout: \"row\" },\n {\n name: \"page\",\n isSerializable: false,\n visibleIf: function (obj) {\n var survey = obj ? obj.survey : null;\n return !survey || survey.pages.length > 1;\n },\n choices: function (obj) {\n var survey = obj ? obj.survey : null;\n return survey\n ? survey.pages.map(function (p) {\n return { value: p.name, text: p.title };\n })\n : [];\n },\n },\n { name: \"title:text\", serializationProperty: \"locTitle\", layout: \"row\" },\n {\n name: \"titleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n layout: \"row\",\n },\n {\n name: \"description:text\",\n serializationProperty: \"locDescription\",\n layout: \"row\",\n },\n {\n name: \"descriptionLocation\",\n default: \"default\",\n choices: [\"default\", \"underInput\", \"underTitle\"],\n },\n {\n name: \"hideNumber:boolean\",\n dependsOn: \"titleLocation\",\n visibleIf: function (obj) {\n if (!obj) {\n return true;\n }\n if (obj.titleLocation === \"hidden\") {\n return false;\n }\n var parent = obj ? obj.parent : null;\n var numberingAllowedByParent = !parent || parent.showQuestionNumbers !== \"off\";\n if (!numberingAllowedByParent) {\n return false;\n }\n var survey = obj ? obj.survey : null;\n return (!survey ||\n survey.showQuestionNumbers !== \"off\" ||\n (!!parent && parent.showQuestionNumbers === \"onpanel\"));\n },\n },\n \"valueName\",\n \"enableIf:condition\",\n \"defaultValue:value\",\n {\n name: \"defaultValueExpression:expression\",\n category: \"logic\",\n },\n \"correctAnswer:value\",\n \"isRequired:switch\",\n \"requiredIf:condition\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n \"readOnly:switch\",\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n {\n name: \"bindings:bindings\",\n serializationProperty: \"bindings\",\n visibleIf: function (obj) {\n return obj.bindings.getNames().length > 0;\n },\n },\n { name: \"renderAs\", default: \"default\", visible: false },\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addAlterNativeClassName(\"question\", \"questionbase\");\n\n\n/***/ }),\n\n/***/ \"./src/questionCustomWidgets.ts\":\n/*!**************************************!*\\\n !*** ./src/questionCustomWidgets.ts ***!\n \\**************************************/\n/*! exports provided: QuestionCustomWidget, CustomWidgetCollection */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return QuestionCustomWidget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return CustomWidgetCollection; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n\nvar QuestionCustomWidget = /** @class */ (function () {\n function QuestionCustomWidget(name, widgetJson) {\n this.name = name;\n this.widgetJson = widgetJson;\n this.isFirstRender = true;\n this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : \"\";\n }\n QuestionCustomWidget.prototype.afterRender = function (question, el) {\n var _this = this;\n if (this.isFirstRender) {\n this.isFirstRender = false;\n question.survey.onLocaleChangedEvent.add(function () {\n _this.widgetJson.willUnmount(question, el);\n _this.widgetJson.afterRender(question, el);\n });\n }\n if (this.widgetJson.afterRender)\n this.widgetJson.afterRender(question, el);\n };\n QuestionCustomWidget.prototype.willUnmount = function (question, el) {\n if (this.widgetJson.willUnmount)\n this.widgetJson.willUnmount(question, el);\n };\n QuestionCustomWidget.prototype.getDisplayValue = function (question, value) {\n if (value === void 0) { value = undefined; }\n if (this.widgetJson.getDisplayValue)\n return this.widgetJson.getDisplayValue(question, value);\n return null;\n };\n QuestionCustomWidget.prototype.isFit = function (question) {\n if (this.isLibraryLoaded() && this.widgetJson.isFit)\n return this.widgetJson.isFit(question);\n return false;\n };\n Object.defineProperty(QuestionCustomWidget.prototype, \"canShowInToolbox\", {\n get: function () {\n if (this.widgetJson.showInToolbox === false)\n return false;\n if (CustomWidgetCollection.Instance.getActivatedBy(this.name) != \"customtype\")\n return false;\n return !this.widgetJson.widgetIsLoaded || this.widgetJson.widgetIsLoaded();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"showInToolbox\", {\n get: function () {\n return this.widgetJson.showInToolbox !== false;\n },\n set: function (val) {\n this.widgetJson.showInToolbox = val;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCustomWidget.prototype.init = function () {\n if (this.widgetJson.init) {\n this.widgetJson.init();\n }\n };\n QuestionCustomWidget.prototype.activatedByChanged = function (activatedBy) {\n if (this.isLibraryLoaded() && this.widgetJson.activatedByChanged) {\n this.widgetJson.activatedByChanged(activatedBy);\n }\n };\n QuestionCustomWidget.prototype.isLibraryLoaded = function () {\n if (this.widgetJson.widgetIsLoaded)\n return this.widgetJson.widgetIsLoaded() == true;\n return true;\n };\n Object.defineProperty(QuestionCustomWidget.prototype, \"isDefaultRender\", {\n get: function () {\n return this.widgetJson.isDefaultRender;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfQuestionType\", {\n get: function () {\n return this.widgetJson.pdfQuestionType;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfRender\", {\n get: function () {\n return this.widgetJson.pdfRender;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionCustomWidget;\n}());\n\nvar CustomWidgetCollection = /** @class */ (function () {\n function CustomWidgetCollection() {\n this.widgetsValues = [];\n this.widgetsActivatedBy = {};\n this.onCustomWidgetAdded = new _base__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]();\n }\n Object.defineProperty(CustomWidgetCollection.prototype, \"widgets\", {\n get: function () {\n return this.widgetsValues;\n },\n enumerable: false,\n configurable: true\n });\n CustomWidgetCollection.prototype.add = function (widgetJson, activatedBy) {\n if (activatedBy === void 0) { activatedBy = \"property\"; }\n this.addCustomWidget(widgetJson, activatedBy);\n };\n CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson, activatedBy) {\n if (activatedBy === void 0) { activatedBy = \"property\"; }\n var name = widgetJson.name;\n if (!name) {\n name = \"widget_\" + this.widgets.length + 1;\n }\n var customWidget = new QuestionCustomWidget(name, widgetJson);\n this.widgetsValues.push(customWidget);\n customWidget.init();\n this.widgetsActivatedBy[name] = activatedBy;\n customWidget.activatedByChanged(activatedBy);\n this.onCustomWidgetAdded.fire(customWidget, null);\n return customWidget;\n };\n /**\n * Returns the way the custom wiget is activated. It can be activated by a property (\"property\"), question type (\"type\") or by new/custom question type (\"customtype\").\n * @param widgetName the custom widget name\n * @see setActivatedBy\n */\n CustomWidgetCollection.prototype.getActivatedBy = function (widgetName) {\n var res = this.widgetsActivatedBy[widgetName];\n return res ? res : \"property\";\n };\n /**\n * Sets the way the custom wiget is activated. The activation types are: property (\"property\"), question type (\"type\") or new/custom question type (\"customtype\"). A custom wiget may support all or only some of this activation types.\n * @param widgetName\n * @param activatedBy there are three possible variants: \"property\", \"type\" and \"customtype\"\n */\n CustomWidgetCollection.prototype.setActivatedBy = function (widgetName, activatedBy) {\n if (!widgetName || !activatedBy)\n return;\n var widget = this.getCustomWidgetByName(widgetName);\n if (!widget)\n return;\n this.widgetsActivatedBy[widgetName] = activatedBy;\n widget.activatedByChanged(activatedBy);\n };\n CustomWidgetCollection.prototype.clear = function () {\n this.widgetsValues = [];\n };\n CustomWidgetCollection.prototype.getCustomWidgetByName = function (name) {\n for (var i = 0; i < this.widgets.length; i++) {\n if (this.widgets[i].name == name)\n return this.widgets[i];\n }\n return null;\n };\n CustomWidgetCollection.prototype.getCustomWidget = function (question) {\n for (var i = 0; i < this.widgetsValues.length; i++) {\n if (this.widgetsValues[i].isFit(question))\n return this.widgetsValues[i];\n }\n return null;\n };\n CustomWidgetCollection.Instance = new CustomWidgetCollection();\n return CustomWidgetCollection;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_baseselect.ts\":\n/*!************************************!*\\\n !*** ./src/question_baseselect.ts ***!\n \\************************************/\n/*! exports provided: QuestionSelectBase, QuestionCheckboxBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return QuestionSelectBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return QuestionCheckboxBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey */ \"./src/survey.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n/**\n * It is a base class for checkbox, dropdown and radiogroup questions.\n */\nvar QuestionSelectBase = /** @class */ (function (_super) {\n __extends(QuestionSelectBase, _super);\n function QuestionSelectBase(name) {\n var _this = _super.call(this, name) || this;\n _this.otherItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"other\");\n _this.dependedQuestions = [];\n _this.noneItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"none\");\n _this.isSettingDefaultValue = false;\n _this.isSettingComment = false;\n _this.isRunningChoices = false;\n _this.isFirstLoadChoicesFromUrl = true;\n _this.isUpdatingChoicesDependedQuestions = false;\n var noneItemText = _this.createLocalizableString(\"noneText\", _this, true);\n noneItemText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noneItemText\");\n };\n _this.noneItemValue.locOwner = _this;\n _this.noneItemValue.setLocText(noneItemText);\n _this.createItemValues(\"choices\");\n _this.registerFunctionOnPropertyValueChanged(\"choices\", function () {\n if (!_this.filterItems()) {\n _this.onVisibleChoicesChanged();\n }\n });\n _this.registerFunctionOnPropertiesValueChanged([\"choicesFromQuestion\", \"choicesFromQuestionMode\", \"hasNone\"], function () {\n _this.onVisibleChoicesChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"hideIfChoicesEmpty\", function () {\n _this.updateVisibilityBasedOnChoices();\n });\n _this.createNewArray(\"visibleChoices\");\n _this.setNewRestfulProperty();\n var locOtherText = _this.createLocalizableString(\"otherText\", _this, true);\n _this.createLocalizableString(\"otherErrorText\", _this, true);\n _this.otherItemValue.locOwner = _this;\n _this.otherItemValue.setLocText(locOtherText);\n locOtherText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherItemText\");\n };\n _this.choicesByUrl.beforeSendRequestCallback = function () {\n _this.onBeforeSendRequest();\n };\n _this.choicesByUrl.getResultCallback = function (items) {\n _this.onLoadChoicesFromUrl(items);\n };\n _this.choicesByUrl.updateResultCallback = function (items, serverResult) {\n if (_this.survey) {\n return _this.survey.updateChoicesFromServer(_this, items, serverResult);\n }\n return items;\n };\n _this.createLocalizableString(\"otherPlaceHolder\", _this);\n return _this;\n }\n QuestionSelectBase.prototype.getType = function () {\n return \"selectbase\";\n };\n QuestionSelectBase.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n for (var i = 0; i < this.dependedQuestions.length; i++) {\n this.dependedQuestions[i].choicesFromQuestion = \"\";\n }\n this.removeFromDependedQuestion(this.getQuestionWithChoices());\n };\n QuestionSelectBase.prototype.supportGoNextPageError = function () {\n return !this.isOtherSelected || !!this.comment;\n };\n QuestionSelectBase.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n QuestionSelectBase.prototype.localeChanged = function () {\n _super.prototype.localeChanged.call(this);\n if (this.choicesOrder !== \"none\") {\n this.updateVisibleChoices();\n }\n };\n QuestionSelectBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n if (!!this.choicesFromUrl) {\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.choicesFromUrl);\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.visibleChoices);\n }\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"otherItem\", {\n /**\n * Returns the other item. By using this property, you may change programmatically it's value and text.\n * @see hasOther\n */\n get: function () {\n return this.otherItemValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"isOtherSelected\", {\n /**\n * Returns true if a user select the 'other' item.\n */\n get: function () {\n return this.hasOther && this.getHasOther(this.renderedValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hasNone\", {\n /**\n * Set this property to true, to show the \"None\" item on the bottom. If end-user checks this item, all other items would be unchecked.\n */\n get: function () {\n return this.getPropertyValue(\"hasNone\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hasNone\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"noneItem\", {\n /**\n * Returns the none item. By using this property, you may change programmatically it's value and text.\n * @see hasNone\n */\n get: function () {\n return this.noneItemValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"noneText\", {\n /**\n * Use this property to set the different text for none item.\n */\n get: function () {\n return this.getLocalizableStringText(\"noneText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noneItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"noneText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locNoneText\", {\n get: function () {\n return this.getLocalizableString(\"noneText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each choices item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see visibleIf\n * @see choicesEnableIf\n */\n get: function () {\n return this.getPropertyValue(\"choicesVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesVisibleIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesEnableIf\", {\n /**\n * An expression that returns true or false. It runs against each choices item and if for this item it returns true, then the item is enabled otherwise the item becomes disabled. Please use {item} to get the current item value in the expression.\n * @see choicesVisibleIf\n */\n get: function () {\n return this.getPropertyValue(\"choicesEnableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesEnableIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runItemsEnableCondition(values, properties);\n this.runItemsCondition(values, properties);\n };\n QuestionSelectBase.prototype.isTextValue = function () {\n return true; //for comments and others\n };\n QuestionSelectBase.prototype.setDefaultValue = function () {\n this.isSettingDefaultValue =\n !this.isValueEmpty(this.defaultValue) &&\n this.hasUnknownValue(this.defaultValue);\n this.prevCommentValue = undefined;\n _super.prototype.setDefaultValue.call(this);\n this.isSettingDefaultValue = false;\n };\n QuestionSelectBase.prototype.getIsMultipleValue = function () {\n return false;\n };\n QuestionSelectBase.prototype.convertDefaultValue = function (val) {\n if (val == null || val == undefined)\n return val;\n if (this.getIsMultipleValue()) {\n if (!Array.isArray(val))\n return [val];\n }\n else {\n if (Array.isArray(val) && val.length > 0)\n return val[0];\n }\n return val;\n };\n QuestionSelectBase.prototype.filterItems = function () {\n if (this.isLoadingFromJson ||\n !this.data ||\n this.areInvisibleElementsShowing)\n return false;\n var values = this.getDataFilteredValues();\n var properties = this.getDataFilteredProperties();\n this.runItemsEnableCondition(values, properties);\n return this.runItemsCondition(values, properties);\n };\n QuestionSelectBase.prototype.runItemsCondition = function (values, properties) {\n this.setConditionalChoicesRunner();\n var hasChanges = this.runConditionsForItems(values, properties);\n if (!!this.filteredChoicesValue &&\n this.filteredChoicesValue.length === this.activeChoices.length) {\n this.filteredChoicesValue = undefined;\n }\n if (hasChanges) {\n this.onVisibleChoicesChanged();\n this.clearIncorrectValues();\n }\n return hasChanges;\n };\n QuestionSelectBase.prototype.runItemsEnableCondition = function (values, properties) {\n var _this = this;\n this.setConditionalEnableChoicesRunner();\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runEnabledConditionsForItems(this.activeChoices, this.conditionChoicesEnableIfRunner, values, properties, function (item) {\n return _this.onEnableItemCallBack(item);\n });\n if (hasChanged) {\n this.clearDisabledValues();\n }\n this.onAfterRunItemsEnableCondition();\n };\n QuestionSelectBase.prototype.onAfterRunItemsEnableCondition = function () { };\n QuestionSelectBase.prototype.onEnableItemCallBack = function (item) {\n return true;\n };\n QuestionSelectBase.prototype.setConditionalChoicesRunner = function () {\n if (this.choicesVisibleIf) {\n if (!this.conditionChoicesVisibleIfRunner) {\n this.conditionChoicesVisibleIfRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.choicesVisibleIf);\n }\n this.conditionChoicesVisibleIfRunner.expression = this.choicesVisibleIf;\n }\n else {\n this.conditionChoicesVisibleIfRunner = null;\n }\n };\n QuestionSelectBase.prototype.setConditionalEnableChoicesRunner = function () {\n if (this.choicesEnableIf) {\n if (!this.conditionChoicesEnableIfRunner) {\n this.conditionChoicesEnableIfRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.choicesEnableIf);\n }\n this.conditionChoicesEnableIfRunner.expression = this.choicesEnableIf;\n }\n else {\n this.conditionChoicesEnableIfRunner = null;\n }\n };\n QuestionSelectBase.prototype.runConditionsForItems = function (values, properties) {\n this.filteredChoicesValue = [];\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runConditionsForItems(this.activeChoices, this.getFilteredChoices(), this.areInvisibleElementsShowing\n ? null\n : this.conditionChoicesVisibleIfRunner, values, properties, !this.survey || !this.survey.areInvisibleElementsShowing);\n };\n QuestionSelectBase.prototype.getHasOther = function (val) {\n return val === this.otherItem.value;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"validatedValue\", {\n get: function () {\n return this.rendredValueToDataCore(this.value);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.createRestful = function () {\n return new _choicesRestful__WEBPACK_IMPORTED_MODULE_6__[\"ChoicesRestful\"]();\n };\n QuestionSelectBase.prototype.setNewRestfulProperty = function () {\n this.setPropertyValue(\"choicesByUrl\", this.createRestful());\n this.choicesByUrl.owner = this;\n this.choicesByUrl.loadingOwner = this;\n };\n QuestionSelectBase.prototype.getQuestionComment = function () {\n if (!!this.commentValue)\n return this.commentValue;\n if (this.hasComment || this.getStoreOthersAsComment())\n return _super.prototype.getQuestionComment.call(this);\n return this.commentValue;\n };\n QuestionSelectBase.prototype.setQuestionComment = function (newValue) {\n if (this.hasComment || this.getStoreOthersAsComment())\n _super.prototype.setQuestionComment.call(this, newValue);\n else {\n if (!this.isSettingComment && newValue != this.commentValue) {\n this.isSettingComment = true;\n this.commentValue = newValue;\n if (this.isOtherSelected && !this.isRenderedValueSetting) {\n this.value = this.rendredValueToData(this.renderedValue);\n }\n this.isSettingComment = false;\n }\n }\n };\n QuestionSelectBase.prototype.clearValue = function () {\n _super.prototype.clearValue.call(this);\n this.prevCommentValue = undefined;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"renderedValue\", {\n get: function () {\n return this.getPropertyValue(\"renderedValue\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"renderedValue\", val);\n this.value = this.rendredValueToData(val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.setQuestionValue = function (newValue, updateIsAnswered, updateComment) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n if (updateComment === void 0) { updateComment = true; }\n if (this.isLoadingFromJson ||\n _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isTwoValueEquals(this.value, newValue))\n return;\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.setPropertyValue(\"renderedValue\", this.rendredValueFromData(newValue));\n if (this.hasComment || !updateComment)\n return;\n var isOtherSel = this.isOtherSelected;\n if (isOtherSel && !!this.prevCommentValue) {\n var oldComment = this.prevCommentValue;\n this.prevCommentValue = undefined;\n this.comment = oldComment;\n }\n if (!isOtherSel && !!this.comment) {\n if (this.getStoreOthersAsComment()) {\n this.prevCommentValue = this.comment;\n }\n this.comment = \"\";\n }\n };\n QuestionSelectBase.prototype.setNewValue = function (newValue) {\n newValue = this.valueFromData(newValue);\n if ((!this.choicesByUrl.isRunning &&\n !this.choicesByUrl.isWaitingForParameters) ||\n !this.isValueEmpty(newValue)) {\n this.cachedValueForUrlRequests = newValue;\n }\n _super.prototype.setNewValue.call(this, newValue);\n };\n QuestionSelectBase.prototype.valueFromData = function (val) {\n var choiceitem = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.activeChoices, val);\n if (!!choiceitem) {\n return choiceitem.value;\n }\n return _super.prototype.valueFromData.call(this, val);\n };\n QuestionSelectBase.prototype.rendredValueFromData = function (val) {\n if (this.getStoreOthersAsComment())\n return val;\n return this.renderedValueFromDataCore(val);\n };\n QuestionSelectBase.prototype.rendredValueToData = function (val) {\n if (this.getStoreOthersAsComment())\n return val;\n return this.rendredValueToDataCore(val);\n };\n QuestionSelectBase.prototype.renderedValueFromDataCore = function (val) {\n if (!this.hasUnknownValue(val, true, false))\n return this.valueFromData(val);\n this.comment = val;\n return this.otherItem.value;\n };\n QuestionSelectBase.prototype.rendredValueToDataCore = function (val) {\n if (val == this.otherItem.value && this.getQuestionComment()) {\n val = this.getQuestionComment();\n }\n return val;\n };\n QuestionSelectBase.prototype.hasUnknownValue = function (val, includeOther, isFilteredChoices, checkEmptyValue) {\n if (includeOther === void 0) { includeOther = false; }\n if (isFilteredChoices === void 0) { isFilteredChoices = true; }\n if (checkEmptyValue === void 0) { checkEmptyValue = false; }\n if (!checkEmptyValue && this.isValueEmpty(val))\n return false;\n if (includeOther && val == this.otherItem.value)\n return false;\n if (this.hasNone && val == this.noneItem.value)\n return false;\n var choices = isFilteredChoices\n ? this.getFilteredChoices()\n : this.activeChoices;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(choices, val) == null;\n };\n QuestionSelectBase.prototype.isValueDisabled = function (val) {\n var itemValue = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.getFilteredChoices(), val);\n return !!itemValue && !itemValue.isEnabled;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesByUrl\", {\n /**\n * Use this property to fill the choices from a RESTful service.\n * @see choices\n * @see ChoicesRestful\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"choicesByUrl\");\n },\n set: function (val) {\n if (!val)\n return;\n this.setNewRestfulProperty();\n this.choicesByUrl.fromJSON(val.toJSON());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choices\", {\n /**\n * The list of items. Every item has value and text. If text is empty, the value is rendered. The item text supports markdown.\n * @see choicesByUrl\n * @see choicesFromQuestion\n */\n get: function () {\n return this.getPropertyValue(\"choices\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"choices\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestion\", {\n /**\n * Set this property to get choices from the specified question instead of defining them in the current question. This avoids duplication of choices declaration in your survey definition.\n * By setting this property, the \"choices\", \"choicesVisibleIf\", \"choicesEnableIf\" and \"choicesOrder\" properties become invisible, because these question characteristics depend on actions in another (specified) question.\n * Use the `choicesFromQuestionMode` property to filter choices obtained from the specified question.\n * @see choices\n * @see choicesFromQuestionMode\n */\n get: function () {\n return this.getPropertyValue(\"choicesFromQuestion\");\n },\n set: function (val) {\n var question = this.getQuestionWithChoices();\n if (!!question) {\n question.removeFromDependedQuestion(this);\n }\n this.setPropertyValue(\"choicesFromQuestion\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.addIntoDependedQuestion = function (question) {\n if (!question || question.dependedQuestions.indexOf(this) > -1)\n return;\n question.dependedQuestions.push(this);\n };\n QuestionSelectBase.prototype.removeFromDependedQuestion = function (question) {\n if (!question)\n return;\n var index = question.dependedQuestions.indexOf(this);\n if (index > -1) {\n question.dependedQuestions.splice(index, 1);\n }\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestionMode\", {\n /**\n * This property becomes visible when the `choicesFromQuestion` property is selected. The default value is \"all\" (all visible choices from another question are displayed as they are).\n * You can set this property to \"selected\" or \"unselected\" to display only selected or unselected choices from the specified question.\n * @see choicesFromQuestion\n */\n get: function () {\n return this.getPropertyValue(\"choicesFromQuestionMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesFromQuestionMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hideIfChoicesEmpty\", {\n /**\n * Set this property to true to hide the question if there is no visible choices.\n */\n get: function () {\n return this.getPropertyValue(\"hideIfChoicesEmpty\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideIfChoicesEmpty\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"keepIncorrectValues\", {\n get: function () {\n return this.getPropertyValue(\"keepIncorrectValues\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"keepIncorrectValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"storeOthersAsComment\", {\n /**\n * Please use survey.storeOthersAsComment to change the behavior on the survey level. This property is depricated and invisible in Survey Creator.\n * By default the entered text in the others input in the checkbox/radiogroup/dropdown are stored as \"question name \" + \"-Comment\". The value itself is \"question name\": \"others\". Set this property to false, to store the entered text directly in the \"question name\" key.\n * Possible values are: \"default\", true, false\n * @see SurveyModel.storeOthersAsComment\n */\n get: function () {\n return this.getPropertyValue(\"storeOthersAsComment\", \"default\");\n },\n set: function (val) {\n this.setPropertyValue(\"storeOthersAsComment\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.hasOtherChanged = function () {\n this.onVisibleChoicesChanged();\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesOrder\", {\n /**\n * Use this property to render items in a specific order: \"asc\", \"desc\", \"random\". Default value is \"none\".\n */\n get: function () {\n return this.getPropertyValue(\"choicesOrder\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == this.choicesOrder)\n return;\n this.setPropertyValue(\"choicesOrder\", val);\n this.onVisibleChoicesChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherText\", {\n /**\n * Use this property to set the different text for other item.\n */\n get: function () {\n return this.getLocalizableStringText(\"otherText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherText\", val);\n this.onVisibleChoicesChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherText\", {\n get: function () {\n return this.getLocalizableString(\"otherText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherPlaceHolder\", {\n /**\n * Use this property to set the place holder text for other or comment field .\n */\n get: function () {\n return this.getLocalizableStringText(\"otherPlaceHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherPlaceHolder\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"otherPlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherErrorText\", {\n /**\n * The text that shows when the other item is choosed by the other input is empty.\n */\n get: function () {\n return this.getLocalizableStringText(\"otherErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherRequiredError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherErrorText\", {\n get: function () {\n return this.getLocalizableString(\"otherErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"visibleChoices\", {\n /**\n * The list of items as they will be rendered. If needed items are sorted and the other item is added.\n * @see hasOther\n * @see choicesOrder\n * @see enabledChoices\n */\n get: function () {\n return this.getPropertyValue(\"visibleChoices\", []);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"enabledChoices\", {\n /**\n * The list of enabled items as they will be rendered. The disabled items are not included\n * @see hasOther\n * @see choicesOrder\n * @see visibleChoices\n */\n get: function () {\n var res = [];\n var items = this.visibleChoices;\n for (var i = 0; i < items.length; i++) {\n if (items[i].isEnabled)\n res.push(items[i]);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.updateVisibleChoices = function () {\n if (this.isLoadingFromJson)\n return;\n var newValue = new Array();\n var calcValue = this.calcVisibleChoices();\n if (!calcValue)\n calcValue = [];\n for (var i = 0; i < calcValue.length; i++) {\n newValue.push(calcValue[i]);\n }\n this.setPropertyValue(\"visibleChoices\", newValue);\n };\n QuestionSelectBase.prototype.calcVisibleChoices = function () {\n if (this.canUseFilteredChoices())\n return this.getFilteredChoices();\n var res = this.sortVisibleChoices(this.getFilteredChoices().slice());\n this.addToVisibleChoices(res, this.isAddDefaultItems);\n return res;\n };\n QuestionSelectBase.prototype.canUseFilteredChoices = function () {\n return (!this.isAddDefaultItems &&\n !this.hasNone &&\n !this.hasOther &&\n this.choicesOrder == \"none\");\n };\n QuestionSelectBase.prototype.addToVisibleChoices = function (items, isAddAll) {\n if (isAddAll) {\n if (!this.newItemValue) {\n this.newItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"newitem\"); //TODO\n }\n items.push(this.newItemValue);\n }\n if (this.supportOther() && (isAddAll || this.hasOther)) {\n items.push(this.otherItem);\n }\n if (this.supportNone() && (isAddAll || this.hasNone)) {\n items.push(this.noneItem);\n }\n };\n /**\n * For internal use in SurveyJS Creator V2.\n */\n QuestionSelectBase.prototype.isItemInList = function (item) {\n if (item === this.otherItem)\n return this.hasOther;\n if (item === this.noneItem)\n return this.hasNone;\n if (item === this.newItemValue)\n return false;\n return true;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"isAddDefaultItems\", {\n get: function () {\n return (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportCreatorV2 && this.isDesignMode && !this.parentQuestion);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n var values = Array.isArray(this.value) ? this.value : [this.value];\n questionPlainData.isNode = true;\n questionPlainData.data = (questionPlainData.data || []).concat(values.map(function (dataValue, index) {\n var choice = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(_this.visibleChoices, dataValue);\n var choiceDataItem = {\n name: index,\n title: \"Choice\",\n value: dataValue,\n displayValue: _this.getChoicesDisplayValue(_this.visibleChoices, dataValue),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n if (!!choice) {\n (options.calculations || []).forEach(function (calculation) {\n choiceDataItem[calculation.propertyName] =\n choice[calculation.propertyName];\n });\n }\n if (_this.isOtherSelected && _this.otherItemValue === choice) {\n choiceDataItem.isOther = true;\n choiceDataItem.displayValue = _this.comment;\n }\n return choiceDataItem;\n }));\n }\n return questionPlainData;\n };\n /**\n * Returns the text for the current value. If the value is null then returns empty string. If 'other' is selected then returns the text for other value.\n */\n QuestionSelectBase.prototype.getDisplayValueCore = function (keysAsText, value) {\n return this.getChoicesDisplayValue(this.visibleChoices, value);\n };\n QuestionSelectBase.prototype.getDisplayValueEmpty = function () {\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(this.visibleChoices, undefined);\n };\n QuestionSelectBase.prototype.getChoicesDisplayValue = function (items, val) {\n if (val == this.otherItemValue.value)\n return this.comment ? this.comment : this.locOtherText.textOrHtml;\n var str = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(items, val);\n return str == \"\" && val ? val : str;\n };\n QuestionSelectBase.prototype.getFilteredChoices = function () {\n return this.filteredChoicesValue\n ? this.filteredChoicesValue\n : this.activeChoices;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"activeChoices\", {\n get: function () {\n var question = this.getQuestionWithChoices();\n if (!!question) {\n this.addIntoDependedQuestion(question);\n return this.getChoicesFromQuestion(question);\n }\n return this.choicesFromUrl ? this.choicesFromUrl : this.getChoices();\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.getQuestionWithChoices = function () {\n if (!this.choicesFromQuestion || !this.survey)\n return null;\n var res = this.survey.getQuestionByName(this.choicesFromQuestion);\n return !!res && !!res.visibleChoices && res !== this ? res : null;\n };\n QuestionSelectBase.prototype.getChoicesFromQuestion = function (question) {\n var res = [];\n var isSelected = this.choicesFromQuestionMode == \"selected\"\n ? true\n : this.choicesFromQuestionMode == \"unselected\"\n ? false\n : undefined;\n var choices = question.visibleChoices;\n for (var i = 0; i < choices.length; i++) {\n if (this.isBuiltInChoice(choices[i], question))\n continue;\n if (isSelected === undefined) {\n res.push(choices[i]);\n continue;\n }\n var itemsSelected = question.isItemSelected(choices[i]);\n if ((itemsSelected && isSelected) || (!itemsSelected && !isSelected)) {\n res.push(choices[i]);\n }\n }\n return res;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"hasActiveChoices\", {\n get: function () {\n var choices = this.visibleChoices;\n if (!choices || choices.length == 0) {\n this.onVisibleChoicesChanged();\n choices = this.visibleChoices;\n }\n for (var i = 0; i < choices.length; i++) {\n if (!this.isBuiltInChoice(choices[i], this))\n return true;\n }\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.isBuiltInChoice = function (item, question) {\n return (item === question.noneItem ||\n item === question.otherItem ||\n item === question.newItemValue);\n };\n QuestionSelectBase.prototype.getChoices = function () {\n return this.choices;\n };\n QuestionSelectBase.prototype.supportComment = function () {\n return true;\n };\n QuestionSelectBase.prototype.supportOther = function () {\n return this.isSupportProperty(\"hasOther\");\n };\n QuestionSelectBase.prototype.supportNone = function () {\n return this.isSupportProperty(\"hasNone\");\n };\n QuestionSelectBase.prototype.isSupportProperty = function (propName) {\n return (!this.isDesignMode ||\n _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].findProperty(this.getType(), propName).visible);\n };\n QuestionSelectBase.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (!this.hasOther || !this.isOtherSelected || this.comment)\n return;\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_5__[\"OtherEmptyError\"](this.otherErrorText, this));\n };\n QuestionSelectBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.runChoicesByUrl();\n if (this.isAddDefaultItems) {\n this.updateVisibleChoices();\n }\n };\n QuestionSelectBase.prototype.setSurveyCore = function (value) {\n _super.prototype.setSurveyCore.call(this, value);\n if (!!value && !!this.choicesFromQuestion) {\n this.onVisibleChoicesChanged();\n }\n };\n QuestionSelectBase.prototype.getStoreOthersAsComment = function () {\n if (this.isSettingDefaultValue)\n return false;\n return (this.storeOthersAsComment === true ||\n (this.storeOthersAsComment == \"default\" &&\n (this.survey != null ? this.survey.storeOthersAsComment : true)) ||\n (!this.choicesByUrl.isEmpty && !this.choicesFromUrl));\n };\n QuestionSelectBase.prototype.onSurveyLoad = function () {\n this.runChoicesByUrl();\n this.onVisibleChoicesChanged();\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionSelectBase.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n if (name != this.getValueName()) {\n this.runChoicesByUrl();\n }\n if (!!name && name == this.choicesFromQuestion) {\n this.onVisibleChoicesChanged();\n }\n };\n QuestionSelectBase.prototype.updateValueFromSurvey = function (newValue) {\n var newComment = \"\";\n if (this.hasOther &&\n !this.isRunningChoices &&\n !this.choicesByUrl.isRunning &&\n this.getStoreOthersAsComment()) {\n if (this.hasUnknownValue(newValue) && !this.getHasOther(newValue)) {\n newComment = this.getCommentFromValue(newValue);\n newValue = this.setOtherValueIntoValue(newValue);\n }\n else {\n newComment = this.data.getComment(this.getValueName());\n }\n }\n _super.prototype.updateValueFromSurvey.call(this, newValue);\n if (!!newComment) {\n this.setNewComment(newComment);\n }\n };\n QuestionSelectBase.prototype.getCommentFromValue = function (newValue) {\n return newValue;\n };\n QuestionSelectBase.prototype.setOtherValueIntoValue = function (newValue) {\n return this.otherItem.value;\n };\n QuestionSelectBase.prototype.runChoicesByUrl = function () {\n if (!this.choicesByUrl || this.isLoadingFromJson || this.isRunningChoices)\n return;\n var processor = this.surveyImpl\n ? this.surveyImpl.getTextProcessor()\n : this.textProcessor;\n if (!processor)\n processor = this.survey;\n if (!processor)\n return;\n this.isReadyValue = this.isChoicesLoaded || this.choicesByUrl.isEmpty;\n this.isRunningChoices = true;\n this.choicesByUrl.run(processor);\n this.isRunningChoices = false;\n };\n QuestionSelectBase.prototype.onBeforeSendRequest = function () {\n if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].disableOnGettingChoicesFromWeb === true && !this.isReadOnly) {\n this.enableOnLoadingChoices = true;\n this.readOnly = true;\n }\n };\n QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) {\n if (this.enableOnLoadingChoices) {\n this.readOnly = false;\n }\n if (!this.isReadOnly) {\n var errors = [];\n if (this.choicesByUrl && this.choicesByUrl.error) {\n errors.push(this.choicesByUrl.error);\n }\n this.errors = errors;\n }\n var newChoices = null;\n var checkCachedValuesOnExisting = true;\n if (this.isFirstLoadChoicesFromUrl &&\n !this.cachedValueForUrlRequests &&\n this.defaultValue) {\n this.cachedValueForUrlRequests = this.defaultValue;\n checkCachedValuesOnExisting = false;\n }\n if (this.isValueEmpty(this.cachedValueForUrlRequests)) {\n this.cachedValueForUrlRequests = this.value;\n }\n this.isFirstLoadChoicesFromUrl = false;\n var cachedValues = this.createCachedValueForUrlRequests(this.cachedValueForUrlRequests, checkCachedValuesOnExisting);\n if (array && (array.length > 0 || this.choicesByUrl.allowEmptyResponse)) {\n newChoices = new Array();\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].setData(newChoices, array);\n }\n if (!!newChoices) {\n for (var i = 0; i < newChoices.length; i++) {\n newChoices[i].locOwner = this;\n }\n }\n this.choicesFromUrl = newChoices;\n this.filterItems();\n this.onVisibleChoicesChanged();\n if (newChoices) {\n var newValue = this.updateCachedValueForUrlRequests(cachedValues, newChoices);\n if (!!newValue && !this.isReadOnly) {\n var hasChanged = !_helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isTwoValueEquals(this.value, newValue.value);\n try {\n if (!this.isValueEmpty(newValue.value)) {\n this.allowNotifyValueChanged = false;\n this.setQuestionValue(undefined, true, false);\n }\n this.allowNotifyValueChanged = hasChanged;\n if (hasChanged) {\n this.value = newValue.value;\n }\n else {\n this.setQuestionValue(newValue.value);\n }\n }\n finally {\n this.allowNotifyValueChanged = true;\n }\n }\n }\n this.choicesLoaded();\n };\n QuestionSelectBase.prototype.createCachedValueForUrlRequests = function (val, checkOnExisting) {\n if (this.isValueEmpty(val))\n return null;\n if (Array.isArray(val)) {\n var res = [];\n for (var i = 0; i < val.length; i++) {\n res.push(this.createCachedValueForUrlRequests(val[i], true));\n }\n return res;\n }\n var isExists = checkOnExisting ? !this.hasUnknownValue(val) : true;\n return { value: val, isExists: isExists };\n };\n QuestionSelectBase.prototype.updateCachedValueForUrlRequests = function (val, newChoices) {\n if (this.isValueEmpty(val))\n return null;\n if (Array.isArray(val)) {\n var res = [];\n for (var i = 0; i < val.length; i++) {\n var updatedValue = this.updateCachedValueForUrlRequests(val[i], newChoices);\n if (updatedValue && !this.isValueEmpty(updatedValue.value)) {\n var newValue = updatedValue.value;\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(newChoices, updatedValue.value);\n if (!!item) {\n newValue = item.value;\n }\n res.push(newValue);\n }\n }\n return { value: res };\n }\n var value = val.isExists && this.hasUnknownValue(val.value) ? null : val.value;\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(newChoices, value);\n if (!!item) {\n value = item.value;\n }\n return { value: value };\n };\n QuestionSelectBase.prototype.updateChoicesDependedQuestions = function () {\n if (this.isUpdatingChoicesDependedQuestions)\n return;\n this.isUpdatingChoicesDependedQuestions = true;\n for (var i = 0; i < this.dependedQuestions.length; i++) {\n this.dependedQuestions[i].onVisibleChoicesChanged();\n this.dependedQuestions[i].updateChoicesDependedQuestions();\n }\n this.isUpdatingChoicesDependedQuestions = false;\n };\n QuestionSelectBase.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n if (this.isLoadingFromJson)\n return;\n this.updateChoicesDependedQuestions();\n };\n QuestionSelectBase.prototype.onVisibleChoicesChanged = function () {\n if (this.isLoadingFromJson)\n return;\n this.updateVisibleChoices();\n this.updateVisibilityBasedOnChoices();\n if (!!this.visibleChoicesChangedCallback) {\n this.visibleChoicesChangedCallback();\n }\n this.updateChoicesDependedQuestions();\n };\n QuestionSelectBase.prototype.updateVisibilityBasedOnChoices = function () {\n if (this.hideIfChoicesEmpty) {\n var filteredChoices = this.getFilteredChoices();\n this.visible = !filteredChoices || filteredChoices.length > 0;\n }\n };\n QuestionSelectBase.prototype.sortVisibleChoices = function (array) {\n var order = this.choicesOrder.toLowerCase();\n if (order == \"asc\")\n return this.sortArray(array, 1);\n if (order == \"desc\")\n return this.sortArray(array, -1);\n if (order == \"random\")\n return this.randomizeArray(array);\n return array;\n };\n QuestionSelectBase.prototype.sortArray = function (array, mult) {\n return array.sort(function (a, b) {\n if (a.calculatedText < b.calculatedText)\n return -1 * mult;\n if (a.calculatedText > b.calculatedText)\n return 1 * mult;\n return 0;\n });\n };\n QuestionSelectBase.prototype.randomizeArray = function (array) {\n return _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].randomizeArray(array);\n };\n QuestionSelectBase.prototype.clearIncorrectValues = function () {\n if (this.keepIncorrectValues || this.isEmpty())\n return;\n if (!!this.survey &&\n this.survey.questionCountByValueName(this.getValueName()) > 1)\n return;\n if (!!this.choicesByUrl &&\n !this.choicesByUrl.isEmpty &&\n (!this.choicesFromUrl || this.choicesFromUrl.length == 0))\n return;\n if (this.clearIncorrectValuesCallback) {\n this.clearIncorrectValuesCallback();\n }\n else {\n this.clearIncorrectValuesCore();\n }\n };\n QuestionSelectBase.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n this.clearIncorrectValues();\n };\n /**\n * Returns true if item is selected\n * @param item checkbox or radio item value\n */\n QuestionSelectBase.prototype.isItemSelected = function (item) {\n return item.value === this.value;\n };\n QuestionSelectBase.prototype.clearDisabledValues = function () {\n if (!this.survey || !this.survey.clearValueOnDisableItems)\n return;\n this.clearDisabledValuesCore();\n };\n QuestionSelectBase.prototype.clearIncorrectValuesCore = function () {\n var val = this.value;\n if (this.canClearValueAnUnknow(val)) {\n this.clearValue();\n }\n };\n QuestionSelectBase.prototype.canClearValueAnUnknow = function (val) {\n if (!this.getStoreOthersAsComment() && this.isOtherSelected)\n return false;\n return this.hasUnknownValue(val, true, true, true);\n };\n QuestionSelectBase.prototype.clearDisabledValuesCore = function () {\n if (this.isValueDisabled(this.value)) {\n this.clearValue();\n }\n };\n QuestionSelectBase.prototype.clearUnusedValues = function () {\n _super.prototype.clearUnusedValues.call(this);\n if (!this.isOtherSelected && !this.hasComment) {\n this.comment = \"\";\n }\n };\n QuestionSelectBase.prototype.getColumnClass = function () {\n var columnClass = this.cssClasses.column;\n if (this.hasColumns) {\n columnClass += \" sv-q-column-\" + this.colCount;\n }\n return columnClass;\n };\n QuestionSelectBase.prototype.getItemIndex = function (item) {\n return this.visibleChoices.indexOf(item);\n };\n QuestionSelectBase.prototype.getItemClass = function (item) {\n var itemClass = this.cssClasses.item;\n var isDisabled = this.isReadOnly || !item.isEnabled;\n var isChecked = this.isItemSelected(item) ||\n (this.isOtherSelected && this.otherItem.value === item.value);\n var allowHover = !isDisabled && !isChecked && !(!!this.survey && this.survey.isDesignMode);\n var isNone = item === this.noneItem;\n if (!this.hasColumns) {\n itemClass +=\n this.colCount === 0\n ? \" \" + this.cssClasses.itemInline\n : \" sv-q-col-\" + this.colCount;\n }\n if (isDisabled && !!this.cssClasses.itemDisabled)\n itemClass += \" \" + this.cssClasses.itemDisabled;\n if (isChecked && !!this.cssClasses.itemChecked)\n itemClass += \" \" + this.cssClasses.itemChecked;\n if (allowHover && !!this.cssClasses.itemHover)\n itemClass += \" \" + this.cssClasses.itemHover;\n if (isNone && !!this.cssClasses.itemNone)\n itemClass += \" \" + this.cssClasses.itemNone;\n return itemClass;\n };\n QuestionSelectBase.prototype.getLabelClass = function (item) {\n var labelClass = this.cssClasses.label;\n if (this.isItemSelected(item)) {\n labelClass += \" \" + this.cssClasses.labelChecked;\n }\n return labelClass;\n };\n QuestionSelectBase.prototype.getControlLabelClass = function (item) {\n var controlLabelClass = this.cssClasses.controlLabel;\n if (this.isItemSelected(item)) {\n controlLabelClass += \" \" + this.cssClasses.controlLabelChecked;\n }\n return controlLabelClass;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"columns\", {\n get: function () {\n var columns = [];\n var colCount = this.colCount;\n if (this.hasColumns && this.visibleChoices.length > 0) {\n if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].showItemsInOrder == \"column\") {\n var prevIndex = 0;\n var leftElementsCount = this.visibleChoices.length % colCount;\n for (var i = 0; i < colCount; i++) {\n var column = [];\n for (var j = prevIndex; j < prevIndex + Math.floor(this.visibleChoices.length / colCount); j++) {\n column.push(this.visibleChoices[j]);\n }\n if (leftElementsCount > 0) {\n leftElementsCount--;\n column.push(this.visibleChoices[j]);\n j++;\n }\n prevIndex = j;\n columns.push(column);\n }\n }\n else {\n for (var i = 0; i < colCount; i++) {\n var column = [];\n for (var j = i; j < this.visibleChoices.length; j += colCount) {\n column.push(this.visibleChoices[j]);\n }\n columns.push(column);\n }\n }\n }\n return columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hasColumns\", {\n get: function () {\n return this.colCount > 1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.choicesLoaded = function () {\n this.isChoicesLoaded = true;\n var oldIsReady = this.isReadyValue;\n this.isReadyValue = true;\n this.onReadyChanged &&\n this.onReadyChanged.fire(this, {\n question: this,\n isReady: true,\n oldIsReady: oldIsReady,\n });\n };\n QuestionSelectBase.prototype.getItemValueWrapperComponentName = function (item) {\n var survey = this.survey;\n if (survey) {\n return survey.getItemValueWrapperComponentName(item, this);\n }\n return _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"].TemplateRendererComponentName;\n };\n QuestionSelectBase.prototype.getItemValueWrapperComponentData = function (item) {\n var survey = this.survey;\n if (survey) {\n return survey.getItemValueWrapperComponentData(item, this);\n }\n return item;\n };\n return QuestionSelectBase;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n/**\n * A base class for checkbox and radiogroup questions. It introduced a colCount property.\n */\nvar QuestionCheckboxBase = /** @class */ (function (_super) {\n __extends(QuestionCheckboxBase, _super);\n function QuestionCheckboxBase(name) {\n return _super.call(this, name) || this;\n }\n Object.defineProperty(QuestionCheckboxBase.prototype, \"colCount\", {\n /**\n * The number of columns for radiogroup and checkbox questions. Items are rendred in one line if the value is 0.\n */\n get: function () {\n return this.getPropertyValue(\"colCount\", this.isFlowLayout ? 0 : 1);\n },\n set: function (value) {\n if (value < 0 || value > 5 || this.isFlowLayout)\n return;\n this.setPropertyValue(\"colCount\", value);\n this.fireCallback(this.colCountChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxBase.prototype.onParentChanged = function () {\n _super.prototype.onParentChanged.call(this);\n if (this.isFlowLayout) {\n this.setPropertyValue(\"colCount\", null);\n }\n };\n QuestionCheckboxBase.prototype.onParentQuestionChanged = function () {\n this.onVisibleChoicesChanged();\n };\n QuestionCheckboxBase.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"choices\");\n };\n return QuestionCheckboxBase;\n}(QuestionSelectBase));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"selectbase\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n \"choicesFromQuestion:question_selectbase\",\n {\n name: \"choices:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"choices_Item\");\n },\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesFromQuestionMode\",\n default: \"all\",\n choices: [\"all\", \"selected\", \"unselected\"],\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !!obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesOrder\",\n default: \"none\",\n choices: [\"none\", \"asc\", \"desc\", \"random\"],\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesByUrl:restfull\",\n className: \"ChoicesRestful\",\n onGetValue: function (obj) {\n return obj.choicesByUrl.getData();\n },\n onSetValue: function (obj, value) {\n obj.choicesByUrl.setData(value);\n },\n },\n \"hideIfChoicesEmpty:boolean\",\n {\n name: \"choicesVisibleIf:condition\",\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesEnableIf:condition\",\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n \"hasOther:boolean\",\n \"hasNone:boolean\",\n {\n name: \"otherPlaceHolder\",\n serializationProperty: \"locOtherPlaceHolder\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"noneText\",\n serializationProperty: \"locNoneText\",\n dependsOn: \"hasNone\",\n visibleIf: function (obj) {\n return obj.hasNone;\n },\n },\n {\n name: \"otherText\",\n serializationProperty: \"locOtherText\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"otherErrorText\",\n serializationProperty: \"locOtherErrorText\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"storeOthersAsComment\",\n default: \"default\",\n choices: [\"default\", true, false],\n visible: false,\n },\n], null, \"question\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"checkboxbase\", [\n {\n name: \"colCount:number\",\n default: 1,\n choices: [0, 1, 2, 3, 4, 5],\n layout: \"row\",\n },\n], null, \"selectbase\");\n\n\n/***/ }),\n\n/***/ \"./src/question_boolean.ts\":\n/*!*********************************!*\\\n !*** ./src/question_boolean.ts ***!\n \\*********************************/\n/*! exports provided: QuestionBooleanModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return QuestionBooleanModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n/**\n * A Model for a boolean question.\n */\nvar QuestionBooleanModel = /** @class */ (function (_super) {\n __extends(QuestionBooleanModel, _super);\n function QuestionBooleanModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"labelFalse\", _this, true);\n _this.createLocalizableString(\"labelTrue\", _this, true);\n _this.locLabelFalse.onGetTextCallback = function (text) {\n return !!text\n ? text\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"booleanUncheckedLabel\");\n };\n _this.locLabelTrue.onGetTextCallback = function (text) {\n return !!text\n ? text\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"booleanCheckedLabel\");\n };\n return _this;\n }\n QuestionBooleanModel.prototype.getType = function () {\n return \"boolean\";\n };\n QuestionBooleanModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n QuestionBooleanModel.prototype.supportGoNextPageAutomatic = function () {\n return this.renderAs !== \"checkbox\";\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"isIndeterminate\", {\n /**\n * Returns true if the question check will be rendered in indeterminate mode. value is empty.\n */\n get: function () {\n return this.isEmpty();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"hasTitle\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"checkedValue\", {\n /**\n * Get/set question value in 3 modes: indeterminate (value is empty), true (check is set) and false (check is unset).\n * @see valueTrue\n * @see valueFalse\n */\n get: function () {\n if (this.isEmpty())\n return null;\n return this.value == this.getValueTrue();\n },\n set: function (val) {\n if (this.isReadOnly) {\n return;\n }\n this.setCheckedValue(val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.setCheckedValue = function (val) {\n if (this.isValueEmpty(val)) {\n this.value = null;\n }\n else {\n this.value = val == true ? this.getValueTrue() : this.getValueFalse();\n }\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"defaultValue\", {\n /**\n * Set the default state of the check: \"indeterminate\" - default (value is empty/null), \"true\" - value equals valueTrue or true, \"false\" - value equals valueFalse or false.\n */\n get: function () {\n return this.getPropertyValue(\"defaultValue\");\n },\n set: function (val) {\n if (val === true)\n val = \"true\";\n if (val === false)\n val = \"false\";\n this.setPropertyValue(\"defaultValue\", val);\n this.updateValueWithDefaults();\n },\n enumerable: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.getDefaultValue = function () {\n if (this.defaultValue == \"indeterminate\")\n return null;\n if (this.defaultValue === undefined)\n return null;\n return this.defaultValue == \"true\"\n ? this.getValueTrue()\n : this.getValueFalse();\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"locTitle\", {\n get: function () {\n return this.showTitle || this.isValueEmpty(this.locLabel.text)\n ? this.getLocalizableString(\"title\")\n : this.locLabel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locDisplayLabel\", {\n get: function () {\n if (this.locLabel.text)\n return this.locLabel;\n return this.showTitle ? this.locLabel : this.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"labelTrue\", {\n /**\n * Set this property, if you want to have a different label for state when check is set.\n */\n get: function () {\n return this.getLocalizableStringText(\"labelTrue\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"labelTrue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelTrue\", {\n get: function () {\n return this.getLocalizableString(\"labelTrue\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"labelFalse\", {\n /**\n * Set this property, if you want to have a different label for state when check is unset.\n */\n get: function () {\n return this.getLocalizableStringText(\"labelFalse\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"labelFalse\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelFalse\", {\n get: function () {\n return this.getLocalizableString(\"labelFalse\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.getValueTrue = function () {\n return this.valueTrue ? this.valueTrue : true;\n };\n QuestionBooleanModel.prototype.getValueFalse = function () {\n return this.valueFalse ? this.valueFalse : false;\n };\n QuestionBooleanModel.prototype.setDefaultValue = function () {\n if (this.defaultValue == \"true\")\n this.setCheckedValue(true);\n if (this.defaultValue == \"false\")\n this.setCheckedValue(false);\n if (this.defaultValue == \"indeterminate\")\n this.setCheckedValue(null);\n };\n QuestionBooleanModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (value == this.getValueTrue())\n return this.locLabelTrue.textOrHtml;\n return this.locLabelFalse.textOrHtml;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true })\n ], QuestionBooleanModel.prototype, \"label\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"showTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"valueTrue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"valueFalse\", void 0);\n return QuestionBooleanModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"boolean\", [\n { name: \"label:text\", serializationProperty: \"locLabel\" },\n {\n name: \"labelTrue:text\",\n serializationProperty: \"locLabelTrue\",\n },\n {\n name: \"labelFalse:text\",\n serializationProperty: \"locLabelFalse\",\n },\n \"showTitle:boolean\",\n \"valueTrue\",\n \"valueFalse\",\n { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n return new QuestionBooleanModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"boolean\", function (name) {\n return new QuestionBooleanModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_buttongroup.ts\":\n/*!*************************************!*\\\n !*** ./src/question_buttongroup.ts ***!\n \\*************************************/\n/*! exports provided: ButtonGroupItemValue, QuestionButtonGroupModel, ButtonGroupItemModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return ButtonGroupItemValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return QuestionButtonGroupModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return ButtonGroupItemModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ButtonGroupItemValue = /** @class */ (function (_super) {\n __extends(ButtonGroupItemValue, _super);\n function ButtonGroupItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"buttongroupitemvalue\"; }\n var _this = _super.call(this, value, text, typeName) || this;\n _this.typeName = typeName;\n return _this;\n }\n ButtonGroupItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"buttongroupitemvalue\";\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"iconName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"iconSize\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"showCaption\", void 0);\n return ButtonGroupItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"]));\n\n/**\n * A Model for a button group question.\n */\nvar QuestionButtonGroupModel = /** @class */ (function (_super) {\n __extends(QuestionButtonGroupModel, _super);\n function QuestionButtonGroupModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionButtonGroupModel.prototype.getType = function () {\n return \"buttongroup\";\n };\n QuestionButtonGroupModel.prototype.getItemValueType = function () {\n return \"buttongroupitemvalue\";\n };\n QuestionButtonGroupModel.prototype.supportOther = function () {\n return false;\n };\n return QuestionButtonGroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroup\", [\n {\n name: \"choices:buttongroupitemvalue[]\",\n },\n], function () {\n return new QuestionButtonGroupModel(\"\");\n}, \"checkboxbase\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroupitemvalue\", [\n { name: \"showCaption:boolean\", default: true },\n { name: \"iconName:text\" },\n { name: \"iconSize:number\" },\n], function (value) { return new ButtonGroupItemValue(value); }, \"itemvalue\");\n// QuestionFactory.Instance.registerQuestion(\"buttongroup\", name => {\n// var q = new QuestionButtonGroupModel(name);\n// q.choices = QuestionFactory.DefaultChoices;\n// return q;\n// });\nvar ButtonGroupItemModel = /** @class */ (function () {\n function ButtonGroupItemModel(question, item, index) {\n this.question = question;\n this.item = item;\n this.index = index;\n }\n Object.defineProperty(ButtonGroupItemModel.prototype, \"value\", {\n get: function () {\n return this.item.value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"iconName\", {\n get: function () {\n return this.item.iconName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"iconSize\", {\n get: function () {\n return this.item.iconSize || 24;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"caption\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"showCaption\", {\n get: function () {\n return this.item.showCaption || this.item.showCaption === undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"isRequired\", {\n get: function () {\n return this.question.isRequired;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"selected\", {\n get: function () {\n return this.question.isItemSelected(this.item);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"readOnly\", {\n get: function () {\n return this.question.isInputReadOnly || !this.item.isEnabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"name\", {\n get: function () {\n return this.question.name + \"_\" + this.question.id;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"id\", {\n get: function () {\n return this.question.inputId + \"_\" + this.index;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"hasErrors\", {\n get: function () {\n return this.question.errors.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"describedBy\", {\n get: function () {\n return this.question.errors.length > 0\n ? this.question.id + \"_errors\"\n : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"labelClass\", {\n get: function () {\n var css = this.question.cssClasses.item;\n if (this.selected) {\n css += \" \" + this.question.cssClasses.itemSelected;\n }\n if (!this.readOnly && !this.selected) {\n css += \" \" + this.question.cssClasses.itemHover;\n }\n if (this.question.isReadOnly || !this.item.isEnabled) {\n css += \" \" + this.question.cssClasses.itemDisabled;\n }\n return css;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"css\", {\n get: function () {\n return {\n label: this.labelClass,\n icon: this.question.cssClasses.itemIcon,\n control: this.question.cssClasses.itemControl,\n caption: this.question.cssClasses.itemCaption,\n decorator: this.question.cssClasses.itemDecorator,\n };\n },\n enumerable: false,\n configurable: true\n });\n ButtonGroupItemModel.prototype.onChange = function () {\n this.question.renderedValue = this.item.value;\n };\n return ButtonGroupItemModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_checkbox.ts\":\n/*!**********************************!*\\\n !*** ./src/question_checkbox.ts ***!\n \\**********************************/\n/*! exports provided: QuestionCheckboxModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return QuestionCheckboxModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n/**\n * A Model for a checkbox question\n */\nvar QuestionCheckboxModel = /** @class */ (function (_super) {\n __extends(QuestionCheckboxModel, _super);\n function QuestionCheckboxModel(name) {\n var _this = _super.call(this, name) || this;\n _this.selectAllItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"](\"selectall\");\n _this.invisibleOldValues = {};\n _this.isChangingValueOnClearIncorrect = false;\n var selectAllItemText = _this.createLocalizableString(\"selectAllText\", _this, true);\n selectAllItemText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"selectAllItemText\");\n };\n _this.selectAllItem.locOwner = _this;\n _this.selectAllItem.setLocText(selectAllItemText);\n _this.registerFunctionOnPropertiesValueChanged([\"hasSelectAll\", \"selectAllText\"], function () {\n _this.onVisibleChoicesChanged();\n });\n return _this;\n }\n Object.defineProperty(QuestionCheckboxModel.prototype, \"ariaRole\", {\n get: function () {\n return \"group\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxModel.prototype.getType = function () {\n return \"checkbox\";\n };\n QuestionCheckboxModel.prototype.onCreating = function () {\n _super.prototype.onCreating.call(this);\n this.createNewArray(\"renderedValue\");\n this.createNewArray(\"value\");\n };\n QuestionCheckboxModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllItem\", {\n /**\n * Returns the select all item. By using this property, you may change programmatically it's value and text.\n * @see hasSelectAll\n */\n get: function () {\n return this.selectAllItemValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllText\", {\n /**\n * Use this property to set the different text for Select All item.\n */\n get: function () {\n return this.getLocalizableStringText(\"selectAllText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"selectAllItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"selectAllText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"locSelectAllText\", {\n get: function () {\n return this.getLocalizableString(\"selectAllText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"hasSelectAll\", {\n /**\n * Set this property to true, to show the \"Select All\" item on the top. If end-user checks this item, then all items are checked.\n */\n get: function () {\n return this.getPropertyValue(\"hasSelectAll\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hasSelectAll\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"isAllSelected\", {\n /**\n * Returns true if all items are selected\n * @see toggleSelectAll\n */\n get: function () {\n var val = this.value;\n if (!val || !Array.isArray(val))\n return false;\n if (this.isItemSelected(this.noneItem))\n return false;\n var allItemCount = this.visibleChoices.length;\n if (this.hasOther)\n allItemCount--;\n if (this.hasNone)\n allItemCount--;\n if (this.hasSelectAll)\n allItemCount--;\n var selectedCount = val.length;\n if (this.isItemSelected(this.otherItem))\n selectedCount--;\n return selectedCount === allItemCount;\n },\n set: function (val) {\n if (val) {\n this.selectAll();\n }\n else {\n this.clearValue();\n }\n },\n enumerable: false,\n configurable: true\n });\n /**\n * It will select all items, except other and none. If all items have been already selected then it will clear the value\n * @see isAllSelected\n * @see selectAll\n */\n QuestionCheckboxModel.prototype.toggleSelectAll = function () {\n this.isAllSelected = !this.isAllSelected;\n };\n /**\n * Select all items, except other and none.\n */\n QuestionCheckboxModel.prototype.selectAll = function () {\n var val = [];\n for (var i = 0; i < this.visibleChoices.length; i++) {\n var item = this.visibleChoices[i];\n if (item === this.noneItem ||\n item === this.otherItem ||\n item === this.selectAllItem)\n continue;\n val.push(item.value);\n }\n this.value = val;\n };\n /**\n * Returns true if item is checked\n * @param item checkbox item value\n */\n QuestionCheckboxModel.prototype.isItemSelected = function (item) {\n if (item === this.selectAllItem)\n return this.isAllSelected;\n var val = this.renderedValue;\n if (!val || !Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(val[i], item.value))\n return true;\n }\n return false;\n };\n Object.defineProperty(QuestionCheckboxModel.prototype, \"maxSelectedChoices\", {\n /**\n * Set this property different to 0 to limit the number of selected choices in the checkbox.\n */\n get: function () {\n return this.getPropertyValue(\"maxSelectedChoices\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n this.setPropertyValue(\"maxSelectedChoices\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectedItems\", {\n /**\n * Return the selected items in the checkbox. Returns empty array if the value is empty\n */\n get: function () {\n if (this.isEmpty())\n return [];\n var val = this.value;\n var res = [];\n for (var i = 0; i < val.length; i++) {\n res.push(_itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, val[i]));\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxModel.prototype.onEnableItemCallBack = function (item) {\n if (!this.shouldCheckMaxSelectedChoices())\n return true;\n return this.isItemSelected(item);\n };\n QuestionCheckboxModel.prototype.onAfterRunItemsEnableCondition = function () {\n if (this.maxSelectedChoices < 1)\n return;\n if (this.hasSelectAll) {\n this.selectAllItem.setIsEnabled(this.maxSelectedChoices >= this.activeChoices.length);\n }\n if (this.hasOther) {\n this.otherItem.setIsEnabled(!this.shouldCheckMaxSelectedChoices() || this.isOtherSelected);\n }\n };\n QuestionCheckboxModel.prototype.shouldCheckMaxSelectedChoices = function () {\n if (this.maxSelectedChoices < 1)\n return false;\n var val = this.value;\n var len = !Array.isArray(val) ? 0 : val.length;\n return len >= this.maxSelectedChoices;\n };\n QuestionCheckboxModel.prototype.getItemClass = function (item) {\n var val = this.value; //trigger dependencies from koValue for knockout\n var itemClass = _super.prototype.getItemClass.call(this, item);\n var isSelectAll = item === this.selectAllItem;\n if (isSelectAll && !!this.cssClasses.itemSelectAll)\n itemClass += \" \" + this.cssClasses.itemSelectAll;\n return itemClass;\n };\n QuestionCheckboxModel.prototype.setNewValue = function (newValue) {\n if (!this.isChangingValueOnClearIncorrect) {\n this.invisibleOldValues = [];\n }\n newValue = this.valueFromData(newValue);\n var value = this.value;\n if (!newValue)\n newValue = [];\n if (!value)\n value = [];\n if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(value, newValue))\n return;\n if (this.hasNone) {\n var prevNoneIndex = this.noneIndexInArray(value);\n var newNoneIndex = this.noneIndexInArray(newValue);\n if (prevNoneIndex > -1) {\n if (newNoneIndex > -1 && newValue.length > 1) {\n newValue.splice(newNoneIndex, 1);\n }\n }\n else {\n if (newNoneIndex > -1) {\n newValue.splice(0, newValue.length);\n newValue.push(this.noneItem.value);\n }\n }\n }\n _super.prototype.setNewValue.call(this, this.rendredValueToData(newValue));\n };\n QuestionCheckboxModel.prototype.getIsMultipleValue = function () {\n return true;\n };\n QuestionCheckboxModel.prototype.getCommentFromValue = function (newValue) {\n var ind = this.getFirstUnknownIndex(newValue);\n if (ind < 0)\n return \"\";\n return newValue[ind];\n };\n QuestionCheckboxModel.prototype.setOtherValueIntoValue = function (newValue) {\n var ind = this.getFirstUnknownIndex(newValue);\n if (ind < 0)\n return newValue;\n newValue.splice(ind, 1, this.otherItem.value);\n return newValue;\n };\n QuestionCheckboxModel.prototype.getFirstUnknownIndex = function (newValue) {\n if (!Array.isArray(newValue))\n return -1;\n for (var i = 0; i < newValue.length; i++) {\n if (this.hasUnknownValue(newValue[i]))\n return i;\n }\n return -1;\n };\n QuestionCheckboxModel.prototype.noneIndexInArray = function (val) {\n if (!val || !Array.isArray(val))\n return -1;\n var noneValue = this.noneItem.value;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == noneValue)\n return i;\n }\n return -1;\n };\n QuestionCheckboxModel.prototype.canUseFilteredChoices = function () {\n return !this.hasSelectAll && _super.prototype.canUseFilteredChoices.call(this);\n };\n QuestionCheckboxModel.prototype.supportSelectAll = function () {\n return this.isSupportProperty(\"hasSelectAll\");\n };\n QuestionCheckboxModel.prototype.addToVisibleChoices = function (items, isAddAll) {\n if (this.supportSelectAll() && (isAddAll || this.hasSelectAll)) {\n items.unshift(this.selectAllItem);\n }\n _super.prototype.addToVisibleChoices.call(this, items, isAddAll);\n };\n QuestionCheckboxModel.prototype.isBuiltInChoice = function (item, question) {\n return (item === question.selectAllItem ||\n _super.prototype.isBuiltInChoice.call(this, item, question));\n };\n /**\n * For internal use in SurveyJS Creator V2.\n */\n QuestionCheckboxModel.prototype.isItemInList = function (item) {\n if (item == this.selectAllItem)\n return this.hasSelectAll;\n return _super.prototype.isItemInList.call(this, item);\n };\n QuestionCheckboxModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!Array.isArray(value))\n return _super.prototype.getDisplayValueCore.call(this, keysAsText, value);\n var items = this.visibleChoices;\n var str = \"\";\n for (var i = 0; i < value.length; i++) {\n var valStr = this.getChoicesDisplayValue(items, value[i]);\n if (valStr) {\n if (str)\n str += \", \";\n str += valStr;\n }\n }\n return str;\n };\n QuestionCheckboxModel.prototype.clearIncorrectValuesCore = function () {\n this.clearIncorrectAndDisabledValues(false);\n };\n QuestionCheckboxModel.prototype.clearDisabledValuesCore = function () {\n this.clearIncorrectAndDisabledValues(true);\n };\n QuestionCheckboxModel.prototype.clearIncorrectAndDisabledValues = function (clearDisabled) {\n var val = this.value;\n var hasChanged = false;\n var restoredValues = this.restoreValuesFromInvisible();\n if (!val && restoredValues.length == 0)\n return;\n if (!Array.isArray(val) || val.length == 0) {\n this.isChangingValueOnClearIncorrect = true;\n if (!clearDisabled) {\n if (this.hasComment) {\n this.value = null;\n }\n else {\n this.clearValue();\n }\n }\n this.isChangingValueOnClearIncorrect = false;\n if (restoredValues.length == 0)\n return;\n val = [];\n }\n var newValue = [];\n for (var i = 0; i < val.length; i++) {\n var isUnkown = this.canClearValueAnUnknow(val[i]);\n if ((!clearDisabled && !isUnkown) ||\n (clearDisabled && !this.isValueDisabled(val[i]))) {\n newValue.push(val[i]);\n }\n else {\n hasChanged = true;\n if (isUnkown) {\n this.invisibleOldValues[val[i]] = true;\n }\n }\n }\n for (var i = 0; i < restoredValues.length; i++) {\n newValue.push(restoredValues[i]);\n hasChanged = true;\n }\n if (!hasChanged)\n return;\n this.isChangingValueOnClearIncorrect = true;\n if (newValue.length == 0) {\n this.clearValue();\n }\n else {\n this.value = newValue;\n }\n this.isChangingValueOnClearIncorrect = false;\n };\n QuestionCheckboxModel.prototype.restoreValuesFromInvisible = function () {\n var res = [];\n var visItems = this.visibleChoices;\n for (var i = 0; i < visItems.length; i++) {\n var val = visItems[i].value;\n if (this.invisibleOldValues[val]) {\n res.push(val);\n delete this.invisibleOldValues[val];\n }\n }\n return res;\n };\n QuestionCheckboxModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n var json = _super.prototype.getConditionJson.call(this);\n if (operator == \"contains\" || operator == \"notcontains\") {\n json[\"type\"] = \"radiogroup\";\n }\n return json;\n };\n QuestionCheckboxModel.prototype.isAnswerCorrect = function () {\n return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isArrayContainsEqual(this.value, this.correctAnswer);\n };\n QuestionCheckboxModel.prototype.setDefaultValueWithOthers = function () {\n this.value = this.renderedValueFromDataCore(this.defaultValue);\n };\n QuestionCheckboxModel.prototype.getHasOther = function (val) {\n if (!val || !Array.isArray(val))\n return false;\n return val.indexOf(this.otherItem.value) >= 0;\n };\n QuestionCheckboxModel.prototype.valueFromData = function (val) {\n if (!val)\n return val;\n if (!Array.isArray(val))\n return [_super.prototype.valueFromData.call(this, val)];\n var value = [];\n for (var i = 0; i < val.length; i++) {\n var choiceitem = _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.activeChoices, val[i]);\n if (!!choiceitem) {\n value.push(choiceitem.value);\n }\n else {\n value.push(val[i]);\n }\n }\n return value;\n };\n QuestionCheckboxModel.prototype.renderedValueFromDataCore = function (val) {\n if (!val || !Array.isArray(val))\n val = [];\n if (!this.hasActiveChoices)\n return val;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == this.otherItem.value)\n return val;\n if (this.hasUnknownValue(val[i], true, false)) {\n this.comment = val[i];\n var newVal = val.slice();\n newVal[i] = this.otherItem.value;\n return newVal;\n }\n }\n return val;\n };\n QuestionCheckboxModel.prototype.rendredValueToDataCore = function (val) {\n if (!val || !val.length)\n return val;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == this.otherItem.value) {\n if (this.getQuestionComment()) {\n var newVal = val.slice();\n newVal[i] = this.getQuestionComment();\n return newVal;\n }\n }\n }\n return val;\n };\n return QuestionCheckboxModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"checkbox\", [\n \"hasSelectAll:boolean\",\n { name: \"maxSelectedChoices:number\", default: 0 },\n { name: \"selectAllText\", serializationProperty: \"locSelectAllText\" },\n], function () {\n return new QuestionCheckboxModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"checkbox\", function (name) {\n var q = new QuestionCheckboxModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_comment.ts\":\n/*!*********************************!*\\\n !*** ./src/question_comment.ts ***!\n \\*********************************/\n/*! exports provided: QuestionCommentModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return QuestionCommentModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_textbase */ \"./src/question_textbase.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Model for a comment question\n */\nvar QuestionCommentModel = /** @class */ (function (_super) {\n __extends(QuestionCommentModel, _super);\n function QuestionCommentModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(QuestionCommentModel.prototype, \"rows\", {\n /**\n * The html rows attribute.\n */\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n set: function (val) {\n this.setPropertyValue(\"rows\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"cols\", {\n /**\n * The html cols attribute.\n */\n get: function () {\n return this.getPropertyValue(\"cols\");\n },\n set: function (val) {\n this.setPropertyValue(\"cols\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionCommentModel.prototype.getType = function () {\n return \"comment\";\n };\n return QuestionCommentModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionTextBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"comment\", [\n { name: \"maxLength:number\", default: -1 },\n { name: \"cols:number\", default: 50 },\n { name: \"rows:number\", default: 4 },\n { name: \"placeHolder\", serializationProperty: \"locPlaceHolder\" },\n {\n name: \"textUpdateMode\",\n default: \"default\",\n choices: [\"default\", \"onBlur\", \"onTyping\"],\n },\n], function () {\n return new QuestionCommentModel(\"\");\n}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"comment\", function (name) {\n return new QuestionCommentModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_custom.ts\":\n/*!********************************!*\\\n !*** ./src/question_custom.ts ***!\n \\********************************/\n/*! exports provided: ComponentQuestionJSON, ComponentCollection, QuestionCustomModelBase, QuestionCustomModel, QuestionCompositeModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return ComponentQuestionJSON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return ComponentCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModelBase\", function() { return QuestionCustomModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return QuestionCustomModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return QuestionCompositeModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar ComponentQuestionJSON = /** @class */ (function () {\n function ComponentQuestionJSON(name, json) {\n this.name = name;\n this.json = json;\n var self = this;\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(name, [], function (json) {\n return ComponentCollection.Instance.createQuestion(!!json ? json.name : \"\", self);\n }, \"question\");\n this.onInit();\n }\n ComponentQuestionJSON.prototype.onInit = function () {\n if (!this.json.onInit)\n return;\n this.json.onInit();\n };\n ComponentQuestionJSON.prototype.onCreated = function (question) {\n if (!this.json.onCreated)\n return;\n this.json.onCreated(question);\n };\n ComponentQuestionJSON.prototype.onLoaded = function (question) {\n if (!this.json.onLoaded)\n return;\n this.json.onLoaded(question);\n };\n ComponentQuestionJSON.prototype.onAfterRender = function (question, htmlElement) {\n if (!this.json.onAfterRender)\n return;\n this.json.onAfterRender(question, htmlElement);\n };\n ComponentQuestionJSON.prototype.onAfterRenderContentElement = function (question, element, htmlElement) {\n if (!this.json.onAfterRenderContentElement)\n return;\n this.json.onAfterRenderContentElement(question, element, htmlElement);\n };\n ComponentQuestionJSON.prototype.onPropertyChanged = function (question, propertyName, newValue) {\n if (!this.json.onPropertyChanged)\n return;\n this.json.onPropertyChanged(question, propertyName, newValue);\n };\n ComponentQuestionJSON.prototype.onValueChanged = function (question, name, newValue) {\n if (!this.json.onValueChanged)\n return;\n this.json.onValueChanged(question, name, newValue);\n };\n ComponentQuestionJSON.prototype.onItemValuePropertyChanged = function (question, item, propertyName, name, newValue) {\n if (!this.json.onItemValuePropertyChanged)\n return;\n this.json.onItemValuePropertyChanged(question, {\n obj: item,\n propertyName: propertyName,\n name: name,\n newValue: newValue,\n });\n };\n Object.defineProperty(ComponentQuestionJSON.prototype, \"isComposite\", {\n get: function () {\n return !!this.json.elementsJSON || !!this.json.createElements;\n },\n enumerable: false,\n configurable: true\n });\n return ComponentQuestionJSON;\n}());\n\nvar ComponentCollection = /** @class */ (function () {\n function ComponentCollection() {\n this.customQuestionValues = [];\n }\n ComponentCollection.prototype.add = function (json) {\n if (!json)\n return;\n var name = json.name;\n if (!name) {\n throw \"Attribute name is missed\";\n }\n name = name.toLowerCase();\n if (!!this.getCustomQuestionByName(name)) {\n throw \"There is already registered custom question with name '\" +\n name +\n \"'\";\n }\n if (!!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(name)) {\n throw \"There is already class with name '\" + name + \"'\";\n }\n var customQuestion = new ComponentQuestionJSON(name, json);\n if (!!this.onAddingJson)\n this.onAddingJson(name, customQuestion.isComposite);\n this.customQuestionValues.push(customQuestion);\n };\n Object.defineProperty(ComponentCollection.prototype, \"items\", {\n get: function () {\n return this.customQuestionValues;\n },\n enumerable: false,\n configurable: true\n });\n ComponentCollection.prototype.getCustomQuestionByName = function (name) {\n for (var i = 0; i < this.customQuestionValues.length; i++) {\n if (this.customQuestionValues[i].name == name)\n return this.customQuestionValues[i];\n }\n return null;\n };\n ComponentCollection.prototype.clear = function () {\n for (var i = 0; i < this.customQuestionValues.length; i++) {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].removeClass(this.customQuestionValues[i].name);\n }\n this.customQuestionValues = [];\n };\n ComponentCollection.prototype.createQuestion = function (name, questionJSON) {\n if (!!questionJSON.isComposite)\n return this.createCompositeModel(name, questionJSON);\n return this.createCustomModel(name, questionJSON);\n };\n ComponentCollection.prototype.createCompositeModel = function (name, questionJSON) {\n if (!!this.onCreateComposite)\n return this.onCreateComposite(name, questionJSON);\n return new QuestionCompositeModel(name, questionJSON);\n };\n ComponentCollection.prototype.createCustomModel = function (name, questionJSON) {\n if (!!this.onCreateCustom)\n return this.onCreateCustom(name, questionJSON);\n return new QuestionCustomModel(name, questionJSON);\n };\n ComponentCollection.Instance = new ComponentCollection();\n return ComponentCollection;\n}());\n\nvar QuestionCustomModelBase = /** @class */ (function (_super) {\n __extends(QuestionCustomModelBase, _super);\n function QuestionCustomModelBase(name, customQuestion) {\n var _this = _super.call(this, name) || this;\n _this.customQuestion = customQuestion;\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n _survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = true;\n _this.createWrapper();\n _survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = false;\n if (!!_this.customQuestion) {\n _this.customQuestion.onCreated(_this);\n }\n return _this;\n }\n QuestionCustomModelBase.prototype.getType = function () {\n return !!this.customQuestion ? this.customQuestion.name : \"custom\";\n };\n QuestionCustomModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n if (!!this.getElement()) {\n this.getElement().locStrsChanged();\n }\n };\n QuestionCustomModelBase.prototype.createWrapper = function () { };\n QuestionCustomModelBase.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n if (!!this.customQuestion && !this.isLoadingFromJson) {\n this.customQuestion.onPropertyChanged(this, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n if (!!this.customQuestion && !this.isLoadingFromJson) {\n this.customQuestion.onItemValuePropertyChanged(this, item, item.ownerPropertyName, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.onFirstRendering = function () {\n var el = this.getElement();\n if (!!el) {\n el.onFirstRendering();\n }\n _super.prototype.onFirstRendering.call(this);\n };\n QuestionCustomModelBase.prototype.initElement = function (el) {\n if (!el)\n return;\n el.setSurveyImpl(this);\n el.disableDesignActions = true;\n };\n QuestionCustomModelBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.initElement(this.getElement());\n };\n QuestionCustomModelBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n if (!!this.getElement()) {\n this.getElement().onSurveyLoad();\n this.customQuestion.onLoaded(this);\n }\n };\n QuestionCustomModelBase.prototype.afterRenderQuestionElement = function (el) {\n //Do nothing\n };\n QuestionCustomModelBase.prototype.afterRender = function (el) {\n _super.prototype.afterRender.call(this, el);\n if (!!this.customQuestion) {\n this.customQuestion.onAfterRender(this, el);\n }\n };\n QuestionCustomModelBase.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.updateElementCss();\n };\n QuestionCustomModelBase.prototype.setNewValue = function (newValue) {\n _super.prototype.setNewValue.call(this, newValue);\n this.updateElementCss();\n };\n //ISurveyImpl\n QuestionCustomModelBase.prototype.getSurveyData = function () {\n return this;\n };\n // getSurvey(): ISurvey {\n // return this.survey;\n // }\n QuestionCustomModelBase.prototype.getTextProcessor = function () {\n return this.textProcessor;\n };\n //ISurveyData\n QuestionCustomModelBase.prototype.getValue = function (name) {\n return this.value;\n };\n QuestionCustomModelBase.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n if (!this.data)\n return;\n var newName = this.convertDataName(name);\n this.data.setValue(newName, this.convertDataValue(name, newValue), locNotification, allowNotifyValueChanged);\n this.updateIsAnswered();\n this.updateElementCss();\n if (!!this.customQuestion) {\n this.customQuestion.onValueChanged(this, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.convertDataName = function (name) {\n return this.getValueName();\n };\n QuestionCustomModelBase.prototype.convertDataValue = function (name, newValue) {\n return newValue;\n };\n QuestionCustomModelBase.prototype.getVariable = function (name) {\n return !!this.data ? this.data.getVariable(name) : null;\n };\n QuestionCustomModelBase.prototype.setVariable = function (name, newValue) {\n if (!this.data)\n return;\n this.data.setVariable(name, newValue);\n };\n QuestionCustomModelBase.prototype.getComment = function (name) {\n return !!this.data ? this.data.getComment(this.getValueName()) : \"\";\n };\n QuestionCustomModelBase.prototype.setComment = function (name, newValue, locNotification) {\n if (!this.data)\n return;\n this.data.setComment(this.getValueName(), newValue, locNotification);\n };\n QuestionCustomModelBase.prototype.getAllValues = function () {\n return !!this.data ? this.data.getAllValues() : {};\n };\n QuestionCustomModelBase.prototype.getFilteredValues = function () {\n return !!this.data ? this.data.getFilteredValues() : {};\n };\n QuestionCustomModelBase.prototype.getFilteredProperties = function () {\n return !!this.data ? this.data.getFilteredProperties() : {};\n };\n //IPanel\n QuestionCustomModelBase.prototype.addElement = function (element, index) { };\n QuestionCustomModelBase.prototype.removeElement = function (element) {\n return false;\n };\n QuestionCustomModelBase.prototype.getQuestionTitleLocation = function () {\n return \"left\";\n };\n QuestionCustomModelBase.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n QuestionCustomModelBase.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n QuestionCustomModelBase.prototype.elementWidthChanged = function (el) { };\n Object.defineProperty(QuestionCustomModelBase.prototype, \"elements\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n QuestionCustomModelBase.prototype.indexOf = function (el) {\n return -1;\n };\n QuestionCustomModelBase.prototype.ensureRowsVisibility = function () {\n // do nothing\n };\n return QuestionCustomModelBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\nvar QuestionCustomModel = /** @class */ (function (_super) {\n __extends(QuestionCustomModel, _super);\n function QuestionCustomModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionCustomModel.prototype.getTemplate = function () {\n return \"custom\";\n };\n QuestionCustomModel.prototype.createWrapper = function () {\n this.questionWrapper = this.createQuestion();\n };\n QuestionCustomModel.prototype.getElement = function () {\n return this.contentQuestion;\n };\n QuestionCustomModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n if (!!this.contentQuestion) {\n this.contentQuestion.onAnyValueChanged(name);\n }\n };\n QuestionCustomModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n if (!this.contentQuestion)\n return false;\n var res = this.contentQuestion.hasErrors(fireCallback, rec);\n this.errors = [];\n for (var i = 0; i < this.contentQuestion.errors.length; i++) {\n this.errors.push(this.contentQuestion.errors[i]);\n }\n if (!res) {\n res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n }\n this.updateElementCss();\n return res;\n };\n QuestionCustomModel.prototype.focus = function (onError) {\n if (onError === void 0) { onError = false; }\n if (!!this.contentQuestion) {\n this.contentQuestion.focus(onError);\n }\n else {\n _super.prototype.focus.call(this, onError);\n }\n };\n Object.defineProperty(QuestionCustomModel.prototype, \"contentQuestion\", {\n get: function () {\n return this.questionWrapper;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCustomModel.prototype.createQuestion = function () {\n var json = this.customQuestion.json;\n var res = null;\n if (!!json.questionJSON) {\n var qType = json.questionJSON.type;\n if (!qType || !_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(qType))\n throw \"type attribute in questionJSON is empty or incorrect\";\n res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(qType);\n this.initElement(res);\n res.fromJSON(json.questionJSON);\n }\n else {\n if (!!json.createQuestion) {\n res = json.createQuestion();\n this.initElement(res);\n }\n }\n if (!!res && !res.name) {\n res.name = \"question\";\n }\n return res;\n };\n QuestionCustomModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n if (!this.contentQuestion)\n return;\n if (this.isEmpty() && !this.contentQuestion.isEmpty()) {\n this.value = this.contentQuestion.value;\n }\n };\n QuestionCustomModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.contentQuestion) {\n this.contentQuestion.runCondition(values, properties);\n }\n };\n QuestionCustomModel.prototype.convertDataName = function (name) {\n if (!this.contentQuestion)\n return _super.prototype.convertDataName.call(this, name);\n var newName = name.replace(this.contentQuestion.getValueName(), this.getValueName());\n return newName.indexOf(this.getValueName()) == 0\n ? newName\n : _super.prototype.convertDataName.call(this, name);\n };\n QuestionCustomModel.prototype.convertDataValue = function (name, newValue) {\n return this.convertDataName(name) == _super.prototype.convertDataName.call(this, name)\n ? this.contentQuestion.value\n : newValue;\n };\n QuestionCustomModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n if (!!this.contentQuestion &&\n !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(this.contentQuestion.value, newValue)) {\n this.contentQuestion.value = this.getUnbindValue(newValue);\n }\n };\n QuestionCustomModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n if (!!this.contentQuestion) {\n this.contentQuestion.onSurveyValueChanged(newValue);\n }\n };\n QuestionCustomModel.prototype.getValueCore = function () {\n if (!!this.contentQuestion)\n return this.contentQuestion.value;\n return _super.prototype.getValueCore.call(this);\n };\n QuestionCustomModel.prototype.initElement = function (el) {\n var _this = this;\n _super.prototype.initElement.call(this, el);\n if (!!el) {\n el.parent = this;\n el.afterRenderQuestionCallback = function (question, element) {\n if (!!_this.customQuestion) {\n _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n }\n };\n }\n };\n QuestionCustomModel.prototype.updateElementCssCore = function (cssClasses) {\n if (!!this.contentQuestion) {\n cssClasses = this.contentQuestion.cssClasses;\n }\n _super.prototype.updateElementCssCore.call(this, cssClasses);\n };\n QuestionCustomModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n return !!this.contentQuestion\n ? this.contentQuestion.getDisplayValue(keyAsText, value)\n : _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\n };\n return QuestionCustomModel;\n}(QuestionCustomModelBase));\n\nvar QuestionCompositeTextProcessor = /** @class */ (function (_super) {\n __extends(QuestionCompositeTextProcessor, _super);\n function QuestionCompositeTextProcessor(composite, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.composite = composite;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.composite.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"panel\", {\n get: function () {\n return this.composite.contentPanel;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionCompositeTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__[\"QuestionTextProcessor\"]));\nvar QuestionCompositeModel = /** @class */ (function (_super) {\n __extends(QuestionCompositeModel, _super);\n function QuestionCompositeModel(name, customQuestion) {\n var _this = _super.call(this, name, customQuestion) || this;\n _this.customQuestion = customQuestion;\n _this.settingNewValue = false;\n _this.textProcessing = new QuestionCompositeTextProcessor(_this, QuestionCompositeModel.ItemVariableName);\n return _this;\n }\n QuestionCompositeModel.prototype.createWrapper = function () {\n this.panelWrapper = this.createPanel();\n };\n QuestionCompositeModel.prototype.getTemplate = function () {\n return \"composite\";\n };\n QuestionCompositeModel.prototype.getCssType = function () {\n return \"composite\";\n };\n QuestionCompositeModel.prototype.getElement = function () {\n return this.contentPanel;\n };\n Object.defineProperty(QuestionCompositeModel.prototype, \"contentPanel\", {\n get: function () {\n return this.panelWrapper;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCompositeModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n if (!this.contentPanel)\n return res;\n return this.contentPanel.hasErrors(fireCallback, false, rec) || res;\n };\n QuestionCompositeModel.prototype.updateElementCss = function (reNew) {\n _super.prototype.updateElementCss.call(this, reNew);\n if (this.contentPanel) {\n this.contentPanel.updateElementCss(reNew);\n }\n };\n QuestionCompositeModel.prototype.getTextProcessor = function () {\n return this.textProcessing;\n };\n QuestionCompositeModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValueIfInvisible();\n }\n };\n QuestionCompositeModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onAnyValueChanged(name);\n }\n };\n QuestionCompositeModel.prototype.createPanel = function () {\n var res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n res.showQuestionNumbers = \"off\";\n res.renderWidth = \"100%\";\n var json = this.customQuestion.json;\n if (!!json.elementsJSON) {\n res.fromJSON({ elements: json.elementsJSON });\n }\n if (!!json.createElements) {\n json.createElements(res, this);\n }\n this.initElement(res);\n res.readOnly = this.isReadOnly;\n this.setAfterRenderCallbacks(res);\n return res;\n };\n QuestionCompositeModel.prototype.onReadOnlyChanged = function () {\n if (!!this.contentPanel) {\n this.contentPanel.readOnly = this.isReadOnly;\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n QuestionCompositeModel.prototype.onSurveyLoad = function () {\n if (!!this.contentPanel) {\n this.contentPanel.readOnly = this.isReadOnly;\n this.setIsContentElement(this.contentPanel);\n }\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionCompositeModel.prototype.setIsContentElement = function (panel) {\n panel.isContentElement = true;\n var elements = panel.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (el.isPanel) {\n this.setIsContentElement(el);\n }\n else {\n el.isContentElement = true;\n }\n }\n };\n QuestionCompositeModel.prototype.setVisibleIndex = function (val) {\n var res = _super.prototype.setVisibleIndex.call(this, val);\n if (this.isVisible && !!this.contentPanel) {\n res += this.contentPanel.setVisibleIndex(val);\n }\n return res;\n };\n QuestionCompositeModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.contentPanel) {\n var oldComposite = values[QuestionCompositeModel.ItemVariableName];\n values[QuestionCompositeModel.ItemVariableName] = this.contentPanel.getValue();\n this.contentPanel.runCondition(values, properties);\n delete values[QuestionCompositeModel.ItemVariableName];\n if (!!oldComposite) {\n values[QuestionCompositeModel.ItemVariableName] = oldComposite;\n }\n }\n };\n QuestionCompositeModel.prototype.getValue = function (name) {\n var val = this.value;\n return !!val ? val[name] : null;\n };\n QuestionCompositeModel.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n if (this.settingNewValue)\n return;\n _super.prototype.setValue.call(this, name, newValue, locNotification, allowNotifyValueChanged);\n if (!this.contentPanel)\n return;\n var q = this.contentPanel.getQuestionByName(name);\n if (!!q && !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(newValue, q.value)) {\n this.settingNewValue = true;\n q.value = newValue;\n this.settingNewValue = false;\n }\n };\n QuestionCompositeModel.prototype.addConditionObjectsByContext = function (objects, context) {\n if (!this.contentPanel)\n return;\n var questions = this.contentPanel.questions;\n var prefixName = this.name;\n var prefixText = this.title;\n for (var i = 0; i < questions.length; i++) {\n objects.push({\n name: prefixName + \".\" + questions[i].name,\n text: prefixText + \".\" + questions[i].title,\n question: questions[i],\n });\n }\n };\n QuestionCompositeModel.prototype.convertDataValue = function (name, newValue) {\n var val = this.value;\n if (!val)\n val = {};\n if (this.isValueEmpty(newValue) && !this.isEditingSurveyElement) {\n delete val[name];\n }\n else {\n val[name] = newValue;\n }\n return val;\n };\n QuestionCompositeModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.settingNewValue = true;\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n var key = questions[i].getValueName();\n questions[i].value = !!newValue ? newValue[key] : undefined;\n }\n this.settingNewValue = false;\n };\n QuestionCompositeModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n return !!this.contentPanel\n ? this.contentPanel.getDisplayValue(keyAsText)\n : _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\n };\n QuestionCompositeModel.prototype.setAfterRenderCallbacks = function (panel) {\n var _this = this;\n if (!panel || !this.customQuestion)\n return;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].afterRenderQuestionCallback = function (question, element) {\n _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n };\n }\n };\n QuestionCompositeModel.ItemVariableName = \"composite\";\n return QuestionCompositeModel;\n}(QuestionCustomModelBase));\n\n\n\n/***/ }),\n\n/***/ \"./src/question_dropdown.ts\":\n/*!**********************************!*\\\n !*** ./src/question_dropdown.ts ***!\n \\**********************************/\n/*! exports provided: QuestionDropdownModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return QuestionDropdownModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a dropdown question\n */\nvar QuestionDropdownModel = /** @class */ (function (_super) {\n __extends(QuestionDropdownModel, _super);\n function QuestionDropdownModel(name) {\n var _this = _super.call(this, name) || this;\n _this.minMaxChoices = [];\n _this.createLocalizableString(\"optionsCaption\", _this);\n var self = _this;\n _this.registerFunctionOnPropertiesValueChanged([\"choicesMin\", \"choicesMax\", \"choicesStep\"], function () {\n self.onVisibleChoicesChanged();\n });\n return _this;\n }\n Object.defineProperty(QuestionDropdownModel.prototype, \"showOptionsCaption\", {\n /**\n * This flag controls whether to show options caption item ('Choose...').\n */\n get: function () {\n return this.getPropertyValue(\"showOptionsCaption\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showOptionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"optionsCaption\", {\n /**\n * Use this property to set the options caption different from the default value. The default value is taken from localization strings.\n */\n get: function () {\n return this.getLocalizableStringText(\"optionsCaption\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionDropdownModel.prototype.getType = function () {\n return \"dropdown\";\n };\n Object.defineProperty(QuestionDropdownModel.prototype, \"selectedItem\", {\n get: function () {\n if (this.isEmpty())\n return null;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: false,\n configurable: true\n });\n QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n QuestionDropdownModel.prototype.getChoices = function () {\n var items = _super.prototype.getChoices.call(this);\n if (this.choicesMax <= this.choicesMin)\n return items;\n var res = [];\n for (var i = 0; i < items.length; i++) {\n res.push(items[i]);\n }\n if (this.minMaxChoices.length === 0 ||\n this.minMaxChoices.length !==\n (this.choicesMax - this.choicesMin) / this.choicesStep + 1) {\n this.minMaxChoices = [];\n for (var i = this.choicesMin; i <= this.choicesMax; i += this.choicesStep) {\n this.minMaxChoices.push(new _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"](i));\n }\n }\n res = res.concat(this.minMaxChoices);\n return res;\n };\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMin\", {\n /**\n * Use this and choicesMax property to automatically add choices. For example choicesMin = 1 and choicesMax = 10 will generate ten additional choices from 1 to 10.\n * @see choicesMax\n * @see choicesStep\n */\n get: function () {\n return this.getPropertyValue(\"choicesMin\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"choicesMin\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMax\", {\n /**\n * Use this and choicesMax property to automatically add choices. For example choicesMin = 1 and choicesMax = 10 will generate ten additional choices from 1 to 10.\n * @see choicesMin\n * @see choicesStep\n */\n get: function () {\n return this.getPropertyValue(\"choicesMax\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"choicesMax\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesStep\", {\n /**\n * The default value is 1. It tells the value of the iterator between choicesMin and choicesMax properties.\n * If choicesMin = 10, choicesMax = 30 and choicesStep = 10 then you will have only three additional choices: [10, 20, 30].\n * @see choicesMin\n * @see choicesMax\n */\n get: function () {\n return this.getPropertyValue(\"choicesStep\", 1);\n },\n set: function (val) {\n if (val < 1)\n val = 1;\n this.setPropertyValue(\"choicesStep\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"autoComplete\", {\n /**\n * Dropdown auto complete\n */\n get: function () {\n return this.getPropertyValue(\"autoComplete\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"autoComplete\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionDropdownModel.prototype.getControlClass = function () {\n var cssClasses = this.cssClasses;\n var result = cssClasses.control +\n (this.errors.length > 0 ? \" \" + cssClasses.onError : \"\");\n if (this.isReadOnly) {\n result += \" \" + cssClasses.controlDisabled;\n }\n return result;\n };\n return QuestionDropdownModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionSelectBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"dropdown\", [\n { name: \"optionsCaption\", serializationProperty: \"locOptionsCaption\" },\n { name: \"showOptionsCaption:boolean\", default: true },\n { name: \"choicesMin:number\", default: 0 },\n { name: \"choicesMax:number\", default: 0 },\n { name: \"choicesStep:number\", default: 1, minValue: 1 },\n {\n name: \"autoComplete\",\n dataList: [\n \"name\",\n \"honorific-prefix\",\n \"given-name\",\n \"additional-name\",\n \"family-name\",\n \"honorific-suffix\",\n \"nickname\",\n \"organization-title\",\n \"username\",\n \"new-password\",\n \"current-password\",\n \"organization\",\n \"street-address\",\n \"address-line1\",\n \"address-line2\",\n \"address-line3\",\n \"address-level4\",\n \"address-level3\",\n \"address-level2\",\n \"address-level1\",\n \"country\",\n \"country-name\",\n \"postal-code\",\n \"cc-name\",\n \"cc-given-name\",\n \"cc-additional-name\",\n \"cc-family-name\",\n \"cc-number\",\n \"cc-exp\",\n \"cc-exp-month\",\n \"cc-exp-year\",\n \"cc-csc\",\n \"cc-type\",\n \"transaction-currency\",\n \"transaction-amount\",\n \"language\",\n \"bday\",\n \"bday-day\",\n \"bday-month\",\n \"bday-year\",\n \"sex\",\n \"url\",\n \"photo\",\n \"tel\",\n \"tel-country-code\",\n \"tel-national\",\n \"tel-area-code\",\n \"tel-local\",\n \"tel-local-prefix\",\n \"tel-local-suffix\",\n \"tel-extension\",\n \"email\",\n \"impp\",\n ],\n },\n], function () {\n return new QuestionDropdownModel(\"\");\n}, \"selectbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"dropdown\", function (name) {\n var q = new QuestionDropdownModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_empty.ts\":\n/*!*******************************!*\\\n !*** ./src/question_empty.ts ***!\n \\*******************************/\n/*! exports provided: QuestionEmptyModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return QuestionEmptyModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A Model for an question that renders empty \"div\" tag. It used as a base class for some custom widgets\n */\nvar QuestionEmptyModel = /** @class */ (function (_super) {\n __extends(QuestionEmptyModel, _super);\n function QuestionEmptyModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionEmptyModel.prototype.getType = function () {\n return \"empty\";\n };\n return QuestionEmptyModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"empty\", [], function () {\n return new QuestionEmptyModel(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/question_expression.ts\":\n/*!************************************!*\\\n !*** ./src/question_expression.ts ***!\n \\************************************/\n/*! exports provided: QuestionExpressionModel, getCurrecyCodes */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return QuestionExpressionModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCurrecyCodes\", function() { return getCurrecyCodes; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for expression question. It is a read-only question. It calculates value based on epxression property.\n */\nvar QuestionExpressionModel = /** @class */ (function (_super) {\n __extends(QuestionExpressionModel, _super);\n function QuestionExpressionModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"format\", _this);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"expression\", function () {\n if (self.expressionRunner) {\n self.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ExpressionRunner\"](self.expression);\n }\n });\n return _this;\n }\n QuestionExpressionModel.prototype.getType = function () {\n return \"expression\";\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"hasInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"format\", {\n /**\n * Use this property to display the value in your own format. Make sure you have \"{0}\" substring in your string, to display the actual value.\n */\n get: function () {\n return this.getLocalizableStringText(\"format\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"format\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"locFormat\", {\n get: function () {\n return this.getLocalizableString(\"format\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"expression\", {\n /**\n * The Expression that used to calculate the question value. You may use standard operators like +, -, * and /, squares (). Here is the example of accessing the question value {questionname}.\n *
Example: \"({quantity} * {price}) * (100 - {discount}) / 100\"\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionExpressionModel.prototype.locCalculation = function () {\n this.expressionIsRunning = true;\n };\n QuestionExpressionModel.prototype.unlocCalculation = function () {\n this.expressionIsRunning = false;\n };\n QuestionExpressionModel.prototype.runCondition = function (values, properties) {\n var _this = this;\n _super.prototype.runCondition.call(this, values, properties);\n if (!this.expression ||\n this.expressionIsRunning ||\n (!this.runIfReadOnly && this.isReadOnly))\n return;\n this.locCalculation();\n if (!this.expressionRunner) {\n this.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ExpressionRunner\"](this.expression);\n }\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, _this.value)) {\n _this.value = newValue;\n }\n _this.unlocCalculation();\n };\n this.expressionRunner.run(values, properties);\n };\n QuestionExpressionModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n return false;\n };\n QuestionExpressionModel.prototype.getAllErrors = function () {\n return [];\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"maximumFractionDigits\", {\n /**\n * The maximum number of fraction digits to use if displayStyle is not \"none\". Possible values are from 0 to 20. The default value is -1 and it means that this property is not used.\n */\n get: function () {\n return this.getPropertyValue(\"maximumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"maximumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"minimumFractionDigits\", {\n /**\n * The minimum number of fraction digits to use if displayStyle is not \"none\". Possible values are from 0 to 20. The default value is -1 and it means that this property is not used.\n */\n get: function () {\n return this.getPropertyValue(\"minimumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"minimumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"runIfReadOnly\", {\n get: function () {\n return this.runIfReadOnlyValue === true;\n },\n set: function (val) {\n this.runIfReadOnlyValue = val;\n },\n enumerable: false,\n configurable: true\n });\n QuestionExpressionModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var val = this.isValueEmpty(value) ? this.defaultValue : value;\n var res = \"\";\n if (!this.isValueEmpty(val)) {\n var str = this.getValueAsStr(val);\n res = !this.format ? str : this.format[\"format\"](str);\n }\n if (!!this.survey) {\n res = this.survey.getExpressionDisplayValue(this, val, res);\n }\n return res;\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"displayStyle\", {\n /**\n * You may set this property to \"decimal\", \"currency\", \"percent\" or \"date\". If you set it to \"currency\", you may use the currency property to display the value in currency different from USD.\n * @see currency\n */\n get: function () {\n return this.getPropertyValue(\"displayStyle\");\n },\n set: function (val) {\n this.setPropertyValue(\"displayStyle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"currency\", {\n /**\n * Use it to display the value in the currency differen from USD. The displayStype should be set to \"currency\".\n * @see displayStyle\n */\n get: function () {\n return this.getPropertyValue(\"currency\");\n },\n set: function (val) {\n if (getCurrecyCodes().indexOf(val) < 0)\n return;\n this.setPropertyValue(\"currency\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"useGrouping\", {\n /**\n * \tDetermines whether to display grouping separators. The default value is true.\n */\n get: function () {\n return this.getPropertyValue(\"useGrouping\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"useGrouping\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionExpressionModel.prototype.getValueAsStr = function (val) {\n if (this.displayStyle == \"date\") {\n var d = new Date(val);\n if (!!d && !!d.toLocaleDateString)\n return d.toLocaleDateString();\n }\n if (this.displayStyle != \"none\" && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val)) {\n var locale = this.getLocale();\n if (!locale)\n locale = \"en\";\n var options = {\n style: this.displayStyle,\n currency: this.currency,\n useGrouping: this.useGrouping,\n };\n if (this.maximumFractionDigits > -1) {\n options[\"maximumFractionDigits\"] = this.maximumFractionDigits;\n }\n if (this.minimumFractionDigits > -1) {\n options[\"minimumFractionDigits\"] = this.minimumFractionDigits;\n }\n return val.toLocaleString(locale, options);\n }\n return val.toString();\n };\n return QuestionExpressionModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\nfunction getCurrecyCodes() {\n return [\n \"AED\",\n \"AFN\",\n \"ALL\",\n \"AMD\",\n \"ANG\",\n \"AOA\",\n \"ARS\",\n \"AUD\",\n \"AWG\",\n \"AZN\",\n \"BAM\",\n \"BBD\",\n \"BDT\",\n \"BGN\",\n \"BHD\",\n \"BIF\",\n \"BMD\",\n \"BND\",\n \"BOB\",\n \"BOV\",\n \"BRL\",\n \"BSD\",\n \"BTN\",\n \"BWP\",\n \"BYN\",\n \"BZD\",\n \"CAD\",\n \"CDF\",\n \"CHE\",\n \"CHF\",\n \"CHW\",\n \"CLF\",\n \"CLP\",\n \"CNY\",\n \"COP\",\n \"COU\",\n \"CRC\",\n \"CUC\",\n \"CUP\",\n \"CVE\",\n \"CZK\",\n \"DJF\",\n \"DKK\",\n \"DOP\",\n \"DZD\",\n \"EGP\",\n \"ERN\",\n \"ETB\",\n \"EUR\",\n \"FJD\",\n \"FKP\",\n \"GBP\",\n \"GEL\",\n \"GHS\",\n \"GIP\",\n \"GMD\",\n \"GNF\",\n \"GTQ\",\n \"GYD\",\n \"HKD\",\n \"HNL\",\n \"HRK\",\n \"HTG\",\n \"HUF\",\n \"IDR\",\n \"ILS\",\n \"INR\",\n \"IQD\",\n \"IRR\",\n \"ISK\",\n \"JMD\",\n \"JOD\",\n \"JPY\",\n \"KES\",\n \"KGS\",\n \"KHR\",\n \"KMF\",\n \"KPW\",\n \"KRW\",\n \"KWD\",\n \"KYD\",\n \"KZT\",\n \"LAK\",\n \"LBP\",\n \"LKR\",\n \"LRD\",\n \"LSL\",\n \"LYD\",\n \"MAD\",\n \"MDL\",\n \"MGA\",\n \"MKD\",\n \"MMK\",\n \"MNT\",\n \"MOP\",\n \"MRO\",\n \"MUR\",\n \"MVR\",\n \"MWK\",\n \"MXN\",\n \"MXV\",\n \"MYR\",\n \"MZN\",\n \"NAD\",\n \"NGN\",\n \"NIO\",\n \"NOK\",\n \"NPR\",\n \"NZD\",\n \"OMR\",\n \"PAB\",\n \"PEN\",\n \"PGK\",\n \"PHP\",\n \"PKR\",\n \"PLN\",\n \"PYG\",\n \"QAR\",\n \"RON\",\n \"RSD\",\n \"RUB\",\n \"RWF\",\n \"SAR\",\n \"SBD\",\n \"SCR\",\n \"SDG\",\n \"SEK\",\n \"SGD\",\n \"SHP\",\n \"SLL\",\n \"SOS\",\n \"SRD\",\n \"SSP\",\n \"STD\",\n \"SVC\",\n \"SYP\",\n \"SZL\",\n \"THB\",\n \"TJS\",\n \"TMT\",\n \"TND\",\n \"TOP\",\n \"TRY\",\n \"TTD\",\n \"TWD\",\n \"TZS\",\n \"UAH\",\n \"UGX\",\n \"USD\",\n \"USN\",\n \"UYI\",\n \"UYU\",\n \"UZS\",\n \"VEF\",\n \"VND\",\n \"VUV\",\n \"WST\",\n \"XAF\",\n \"XAG\",\n \"XAU\",\n \"XBA\",\n \"XBB\",\n \"XBC\",\n \"XBD\",\n \"XCD\",\n \"XDR\",\n \"XOF\",\n \"XPD\",\n \"XPF\",\n \"XPT\",\n \"XSU\",\n \"XTS\",\n \"XUA\",\n \"XXX\",\n \"YER\",\n \"ZAR\",\n \"ZMW\",\n \"ZWL\",\n ];\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"expression\", [\n \"expression:expression\",\n { name: \"format\", serializationProperty: \"locFormat\" },\n {\n name: \"displayStyle\",\n default: \"none\",\n choices: [\"none\", \"decimal\", \"currency\", \"percent\", \"date\"],\n },\n {\n name: \"currency\",\n choices: function () {\n return getCurrecyCodes();\n },\n default: \"USD\",\n },\n { name: \"maximumFractionDigits:number\", default: -1 },\n { name: \"minimumFractionDigits:number\", default: -1 },\n { name: \"useGrouping:boolean\", default: true },\n { name: \"enableIf\", visible: false },\n { name: \"isRequired\", visible: false },\n { name: \"readOnly\", visible: false },\n { name: \"requiredErrorText\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"requiredIf\", visible: false },\n], function () {\n return new QuestionExpressionModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"expression\", function (name) {\n return new QuestionExpressionModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_file.ts\":\n/*!******************************!*\\\n !*** ./src/question_file.ts ***!\n \\******************************/\n/*! exports provided: QuestionFileModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return QuestionFileModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a file question\n */\nvar QuestionFileModel = /** @class */ (function (_super) {\n __extends(QuestionFileModel, _super);\n function QuestionFileModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isUploading = false;\n /**\n * The event is fired after question state has been changed.\n *
sender the question object that fires the event\n *
options.state new question state value.\n */\n _this.onStateChanged = _this.addEvent();\n _this.previewValue = [];\n _this.currentState = \"empty\";\n return _this;\n }\n QuestionFileModel.prototype.getType = function () {\n return \"file\";\n };\n QuestionFileModel.prototype.clearOnDeletingContainer = function () {\n if (!this.survey)\n return;\n this.survey.clearFiles(this, this.name, this.value, null, function () { });\n };\n Object.defineProperty(QuestionFileModel.prototype, \"showPreview\", {\n /**\n * Set it to true, to show the preview for the image files.\n */\n get: function () {\n return this.getPropertyValue(\"showPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"showPreview\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"allowMultiple\", {\n /**\n * Set it to true, to allow select multiple files.\n */\n get: function () {\n return this.getPropertyValue(\"allowMultiple\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"allowMultiple\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"acceptedTypes\", {\n /**\n * Accepted file types. Passed to the 'accept' attribute of the file input tag. See https://www.w3schools.com/tags/att_input_accept.asp for more details.\n */\n get: function () {\n return this.getPropertyValue(\"acceptedTypes\");\n },\n set: function (val) {\n this.setPropertyValue(\"acceptedTypes\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"storeDataAsText\", {\n /**\n * Set it to false if you do not want to serialize file content as text in the survey.data.\n * In this case, you have to write the code onUploadFiles event to store the file content.\n * @see SurveyModel.onUploadFiles\n */\n get: function () {\n return this.getPropertyValue(\"storeDataAsText\");\n },\n set: function (val) {\n this.setPropertyValue(\"storeDataAsText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"waitForUpload\", {\n /**\n * Set it to true if you want to wait until files will be uploaded to your server.\n */\n get: function () {\n return this.getPropertyValue(\"waitForUpload\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"waitForUpload\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"allowImagesPreview\", {\n /**\n * Set it to false if you want to disable images preview.\n */\n get: function () {\n return this.getPropertyValue(\"allowImagesPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowImagesPreview\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"maxSize\", {\n /**\n * Use this property to setup the maximum allowed file size.\n */\n get: function () {\n return this.getPropertyValue(\"maxSize\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxSize\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"needConfirmRemoveFile\", {\n /**\n * Use this property to setup confirmation to remove file.\n */\n get: function () {\n return this.getPropertyValue(\"needConfirmRemoveFile\");\n },\n set: function (val) {\n this.setPropertyValue(\"needConfirmRemoveFile\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * The remove file confirmation message.\n */\n QuestionFileModel.prototype.getConfirmRemoveMessage = function (fileName) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"]\n .getString(\"confirmRemoveFile\")[\"format\"](fileName);\n };\n Object.defineProperty(QuestionFileModel.prototype, \"confirmRemoveAllMessage\", {\n /**\n * The remove all files confirmation message.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"confirmRemoveAllFiles\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"noFileChosenCaption\", {\n /**\n * The no file chosen caption for modern theme.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noFileChosen\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"chooseButtonCaption\", {\n /**\n * The choose files button caption for modern theme.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"chooseFileCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"cleanButtonCaption\", {\n /**\n * The clean files button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"cleanCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"removeFileCaption\", {\n /**\n * The remove file button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"removeFileCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"inputTitle\", {\n /**\n * The input title value.\n */\n get: function () {\n if (this.isUploading)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"loadingFile\");\n if (this.isEmpty())\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"chooseFile\");\n return \" \";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clear value programmatically.\n */\n QuestionFileModel.prototype.clear = function (doneCallback) {\n var _this = this;\n if (!this.survey)\n return;\n this.survey.clearFiles(this, this.name, this.value, null, function (status, data) {\n if (status === \"success\") {\n _this.value = undefined;\n _this.errors = [];\n !!doneCallback && doneCallback();\n }\n });\n };\n /**\n * Remove file item programmatically.\n */\n QuestionFileModel.prototype.removeFile = function (content) {\n var _this = this;\n if (!this.survey)\n return;\n this.survey.clearFiles(this, this.name, this.value, content.name, function (status, data) {\n if (status === \"success\") {\n var oldValue = _this.value;\n if (Array.isArray(oldValue)) {\n _this.value = oldValue.filter(function (f) { return f.name !== content.name; });\n }\n else {\n _this.value = undefined;\n }\n }\n });\n };\n /**\n * Load multiple files programmatically.\n * @param files\n */\n QuestionFileModel.prototype.loadFiles = function (files) {\n var _this = this;\n if (!this.survey) {\n return;\n }\n this.errors = [];\n if (!this.allFilesOk(files)) {\n return;\n }\n this.stateChanged(\"loading\");\n var loadFilesProc = function () {\n var content = [];\n if (_this.storeDataAsText) {\n files.forEach(function (file) {\n var fileReader = new FileReader();\n fileReader.onload = function (e) {\n content = content.concat([\n { name: file.name, type: file.type, content: fileReader.result },\n ]);\n if (content.length === files.length) {\n _this.value = (_this.value || []).concat(content);\n }\n };\n fileReader.readAsDataURL(file);\n });\n }\n else {\n if (_this.survey) {\n _this.survey.uploadFiles(_this, _this.name, files, function (status, data) {\n if (status === \"error\") {\n _this.stateChanged(\"error\");\n }\n if (status === \"success\") {\n _this.value = (_this.value || []).concat(data.map(function (r) {\n return {\n name: r.file.name,\n type: r.file.type,\n content: r.content,\n };\n }));\n }\n });\n }\n }\n };\n if (this.allowMultiple) {\n loadFilesProc();\n }\n else {\n this.clear(loadFilesProc);\n }\n };\n QuestionFileModel.prototype.canPreviewImage = function (fileItem) {\n return this.allowImagesPreview && !!fileItem && this.isFileImage(fileItem);\n };\n QuestionFileModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n var _this = this;\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.previewValue = [];\n var state = (!Array.isArray(newValue) && !!newValue) ||\n (Array.isArray(newValue) && newValue.length > 0)\n ? this.showPreview\n ? \"loading\"\n : \"loaded\"\n : \"empty\";\n this.stateChanged(state);\n if (!this.showPreview || !newValue)\n return;\n var newValues = Array.isArray(newValue)\n ? newValue\n : !!newValue\n ? [newValue]\n : [];\n if (this.storeDataAsText) {\n newValues.forEach(function (value) {\n var content = value.content || value;\n _this.previewValue = _this.previewValue.concat([\n {\n name: value.name,\n type: value.type,\n content: content,\n },\n ]);\n });\n if (state === \"loading\")\n this.stateChanged(\"loaded\");\n }\n else {\n newValues.forEach(function (value) {\n var content = value.content || value;\n if (_this.survey) {\n _this.survey.downloadFile(_this.name, value, function (status, data) {\n if (status === \"success\") {\n _this.previewValue = _this.previewValue.concat([\n {\n content: data,\n name: value.name,\n type: value.type,\n },\n ]);\n if (_this.previewValue.length === newValues.length) {\n _this.stateChanged(\"loaded\");\n }\n }\n else {\n _this.stateChanged(\"error\");\n }\n });\n }\n });\n }\n };\n QuestionFileModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (this.isUploading && this.waitForUpload) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_3__[\"UploadingFileError\"](_surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"uploadingFile\"), this));\n }\n };\n QuestionFileModel.prototype.stateChanged = function (state) {\n if (state === \"loading\") {\n this.isUploading = true;\n }\n if (state === \"loaded\") {\n this.isUploading = false;\n }\n if (state === \"error\") {\n this.isUploading = false;\n }\n this.currentState = state;\n this.onStateChanged.fire(this, { state: state });\n };\n QuestionFileModel.prototype.allFilesOk = function (files) {\n var _this = this;\n var errorLength = this.errors ? this.errors.length : 0;\n (files || []).forEach(function (file) {\n if (_this.maxSize > 0 && file.size > _this.maxSize) {\n _this.errors.push(new _error__WEBPACK_IMPORTED_MODULE_3__[\"ExceedSizeError\"](_this.maxSize, _this));\n }\n });\n return errorLength === this.errors.length;\n };\n QuestionFileModel.prototype.isFileImage = function (file) {\n if (!file)\n return false;\n var imagePrefix = \"data:image\";\n var subStr = file.content && file.content.substr(0, imagePrefix.length);\n subStr = subStr && subStr.toLowerCase();\n var result = subStr === imagePrefix ||\n (!!file.type && file.type.toLowerCase().indexOf(\"image/\") === 0);\n return result;\n };\n QuestionFileModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData && !this.isEmpty()) {\n questionPlainData.isNode = false;\n var values = Array.isArray(this.value) ? this.value : [this.value];\n questionPlainData.data = values.map(function (dataValue, index) {\n return {\n name: index,\n title: \"File\",\n value: (dataValue.content && dataValue.content) || dataValue,\n displayValue: (dataValue.name && dataValue.name) || dataValue,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n });\n }\n return questionPlainData;\n };\n QuestionFileModel.prototype.supportComment = function () {\n return true;\n };\n return QuestionFileModel;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"file\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n { name: \"showPreview:boolean\", default: true },\n \"allowMultiple:boolean\",\n { name: \"allowImagesPreview:boolean\", default: true },\n \"imageHeight\",\n \"imageWidth\",\n \"acceptedTypes\",\n { name: \"storeDataAsText:boolean\", default: true },\n { name: \"waitForUpload:boolean\", default: false },\n \"maxSize:number\",\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"needConfirmRemoveFile:boolean\", visible: true, default: false },\n], function () {\n return new QuestionFileModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"file\", function (name) {\n return new QuestionFileModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_html.ts\":\n/*!******************************!*\\\n !*** ./src/question_html.ts ***!\n \\******************************/\n/*! exports provided: QuestionHtmlModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return QuestionHtmlModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Model for html question. Unlike other questions it doesn't have value and title.\n */\nvar QuestionHtmlModel = /** @class */ (function (_super) {\n __extends(QuestionHtmlModel, _super);\n function QuestionHtmlModel(name) {\n var _this = _super.call(this, name) || this;\n var locHtml = _this.createLocalizableString(\"html\", _this);\n locHtml.onGetTextCallback = function (str) {\n return !!_this.survey && !_this.ignoreHtmlProgressing\n ? _this.survey.processHtml(str)\n : str;\n };\n return _this;\n }\n QuestionHtmlModel.prototype.getType = function () {\n return \"html\";\n };\n Object.defineProperty(QuestionHtmlModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionHtmlModel.prototype.getProcessedText = function (text) {\n if (this.ignoreHtmlProgressing)\n return text;\n return _super.prototype.getProcessedText.call(this, text);\n };\n Object.defineProperty(QuestionHtmlModel.prototype, \"html\", {\n /**\n * Set html to display it\n */\n get: function () {\n return this.getLocalizableStringText(\"html\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"html\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"processedHtml\", {\n get: function () {\n return this.survey ? this.survey.processHtml(this.html) : this.html;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionHtmlModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"html\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new QuestionHtmlModel(\"\");\n}, \"nonvalue\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"html\", function (name) {\n return new QuestionHtmlModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_image.ts\":\n/*!*******************************!*\\\n !*** ./src/question_image.ts ***!\n \\*******************************/\n/*! exports provided: QuestionImageModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return QuestionImageModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Model for image question. This question hasn't any functionality and can be used to improve the appearance of the survey.\n */\nvar QuestionImageModel = /** @class */ (function (_super) {\n __extends(QuestionImageModel, _super);\n function QuestionImageModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"imageLink\", _this, false);\n _this.createLocalizableString(\"text\", _this, false);\n return _this;\n }\n QuestionImageModel.prototype.getType = function () {\n return \"image\";\n };\n Object.defineProperty(QuestionImageModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageLink\", {\n /**\n * The image URL.\n */\n get: function () {\n return this.getLocalizableStringText(\"imageLink\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"imageLink\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"locImageLink\", {\n get: function () {\n return this.getLocalizableString(\"imageLink\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"text\", {\n /**\n * The image alt text.\n */\n get: function () {\n return this.getLocalizableStringText(\"text\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"text\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"locText\", {\n get: function () {\n return this.getLocalizableString(\"text\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageFit\", {\n /**\n * The image fit mode.\n */\n get: function () {\n return this.getPropertyValue(\"imageFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageFit\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"contentMode\", {\n /**\n * The content mode.\n */\n get: function () {\n return this.getPropertyValue(\"contentMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"contentMode\", val);\n if (val === \"video\") {\n this.showLabel = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n return QuestionImageModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"image\", [\n { name: \"imageLink\", serializationProperty: \"locImageLink\" },\n { name: \"text\", serializationProperty: \"locText\" },\n {\n name: \"contentMode\",\n default: \"image\",\n choices: [\"image\", \"video\"],\n },\n {\n name: \"imageFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n { name: \"imageHeight:number\", default: 150, minValue: 0 },\n { name: \"imageWidth:number\", default: 200, minValue: 0 },\n], function () {\n return new QuestionImageModel(\"\");\n}, \"nonvalue\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"image\", function (name) {\n return new QuestionImageModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_imagepicker.ts\":\n/*!*************************************!*\\\n !*** ./src/question_imagepicker.ts ***!\n \\*************************************/\n/*! exports provided: ImageItemValue, QuestionImagePickerModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return ImageItemValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return QuestionImagePickerModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar ImageItemValue = /** @class */ (function (_super) {\n __extends(ImageItemValue, _super);\n function ImageItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"imageitemvalue\"; }\n var _this = _super.call(this, value, text, typeName) || this;\n _this.typeName = typeName;\n _this.createLocalizableString(\"imageLink\", _this, false);\n return _this;\n }\n ImageItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"itemvalue\";\n };\n Object.defineProperty(ImageItemValue.prototype, \"imageLink\", {\n /**\n * The image or video link property.\n */\n get: function () {\n return this.getLocalizableStringText(\"imageLink\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"imageLink\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ImageItemValue.prototype, \"locImageLink\", {\n get: function () {\n return this.getLocalizableString(\"imageLink\");\n },\n enumerable: false,\n configurable: true\n });\n ImageItemValue.prototype.getLocale = function () {\n return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n };\n ImageItemValue.prototype.getMarkdownHtml = function (text, name) {\n return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : text;\n };\n ImageItemValue.prototype.getRenderer = function (name) {\n return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n };\n ImageItemValue.prototype.getProcessedText = function (text) {\n return !!this.locOwner ? this.locOwner.getProcessedText(text) : text;\n };\n return ImageItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"]));\n\n/**\n * A Model for a select image question.\n */\nvar QuestionImagePickerModel = /** @class */ (function (_super) {\n __extends(QuestionImagePickerModel, _super);\n function QuestionImagePickerModel(name) {\n var _this = _super.call(this, name) || this;\n _this.colCount = 0;\n _this.choicesByUrl.createItemValue = function (value) {\n return new ImageItemValue(value);\n };\n return _this;\n }\n QuestionImagePickerModel.prototype.getType = function () {\n return \"imagepicker\";\n };\n QuestionImagePickerModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.getItemValueType = function () {\n return \"imageitemvalue\";\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.supportOther = function () {\n return false;\n };\n QuestionImagePickerModel.prototype.supportNone = function () {\n return false;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"multiSelect\", {\n /**\n * Multi select option. If set to true, then allows to select multiple images.\n */\n get: function () {\n return this.getPropertyValue(\"multiSelect\", false);\n },\n set: function (newValue) {\n this.setPropertyValue(\"multiSelect\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns true if item is checked\n * @param item image picker item value\n */\n QuestionImagePickerModel.prototype.isItemSelected = function (item) {\n var val = this.value;\n if (this.isValueEmpty(val))\n return false;\n if (!this.multiSelect)\n return _helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isTwoValueEquals(val, item.value);\n if (!Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isTwoValueEquals(val[i], item.value))\n return true;\n }\n return false;\n };\n QuestionImagePickerModel.prototype.clearIncorrectValues = function () {\n if (this.multiSelect) {\n var val = this.value;\n if (!val)\n return;\n if (!Array.isArray(val) || val.length == 0) {\n this.clearValue();\n return;\n }\n var newValue = [];\n for (var i = 0; i < val.length; i++) {\n if (!this.hasUnknownValue(val[i], true)) {\n newValue.push(val[i]);\n }\n }\n if (newValue.length == val.length)\n return;\n if (newValue.length == 0) {\n this.clearValue();\n }\n else {\n this.value = newValue;\n }\n }\n else {\n _super.prototype.clearIncorrectValues.call(this);\n }\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"showLabel\", {\n /**\n * Show label under the image.\n */\n get: function () {\n return this.getPropertyValue(\"showLabel\", false);\n },\n set: function (newValue) {\n this.setPropertyValue(\"showLabel\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n if (!this.isDesignMode && this.multiSelect) {\n this.createNewArray(\"renderedValue\");\n this.createNewArray(\"value\");\n }\n };\n QuestionImagePickerModel.prototype.getValueCore = function () {\n var value = _super.prototype.getValueCore.call(this);\n if (value !== undefined) {\n return value;\n }\n if (this.multiSelect) {\n return [];\n }\n return value;\n };\n QuestionImagePickerModel.prototype.convertValToArrayForMultSelect = function (val) {\n if (!this.multiSelect)\n return val;\n if (this.isValueEmpty(val) || Array.isArray(val))\n return val;\n return [val];\n };\n QuestionImagePickerModel.prototype.renderedValueFromDataCore = function (val) {\n return this.convertValToArrayForMultSelect(val);\n };\n QuestionImagePickerModel.prototype.rendredValueToDataCore = function (val) {\n return this.convertValToArrayForMultSelect(val);\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageFit\", {\n /**\n * The image fit mode.\n */\n get: function () {\n return this.getPropertyValue(\"imageFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageFit\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"contentMode\", {\n /**\n * The content mode.\n */\n get: function () {\n return this.getPropertyValue(\"contentMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"contentMode\", val);\n if (val === \"video\") {\n this.showLabel = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.convertDefaultValue = function (val) {\n return val;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"hasColumns\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionImagePickerModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imageitemvalue\", [], function (value) { return new ImageItemValue(value); }, \"itemvalue\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imageitemvalue\", {\n name: \"imageLink\",\n serializationProperty: \"locImageLink\",\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imagepicker\", [\n { name: \"hasOther\", visible: false },\n { name: \"otherText\", visible: false },\n { name: \"hasNone\", visible: false },\n { name: \"noneText\", visible: false },\n { name: \"optionsCaption\", visible: false },\n { name: \"otherErrorText\", visible: false },\n { name: \"storeOthersAsComment\", visible: false },\n {\n name: \"contentMode\",\n default: \"image\",\n choices: [\"image\", \"video\"],\n },\n {\n name: \"imageFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n { name: \"imageHeight:number\", default: 150, minValue: 0 },\n { name: \"imageWidth:number\", default: 200, minValue: 0 },\n], function () {\n return new QuestionImagePickerModel(\"\");\n}, \"checkboxbase\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"showLabel:boolean\",\n default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"colCount:number\",\n default: 0,\n choices: [0, 1, 2, 3, 4, 5],\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"multiSelect:boolean\",\n default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"choices:imageitemvalue[]\",\n});\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"imagepicker\", function (name) {\n var q = new QuestionImagePickerModel(name);\n //q.choices = QuestionFactory.DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrix.ts\":\n/*!********************************!*\\\n !*** ./src/question_matrix.ts ***!\n \\********************************/\n/*! exports provided: MatrixRowModel, MatrixCells, QuestionMatrixModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return MatrixRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return MatrixCells; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return QuestionMatrixModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\nvar MatrixRowModel = /** @class */ (function (_super) {\n __extends(MatrixRowModel, _super);\n function MatrixRowModel(item, fullName, data, value) {\n var _this = _super.call(this) || this;\n _this.fullName = fullName;\n _this.item = item;\n _this.data = data;\n _this.value = value;\n _this.cellClick = function (column) {\n _this.value = column.value;\n };\n _this.registerFunctionOnPropertyValueChanged(\"value\", function () {\n if (_this.data)\n _this.data.onMatrixRowChanged(_this);\n });\n return _this;\n }\n Object.defineProperty(MatrixRowModel.prototype, \"name\", {\n get: function () {\n return this.item.value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (newValue) {\n newValue = this.data.getCorrectedRowValue(newValue);\n this.setPropertyValue(\"value\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"rowClasses\", {\n get: function () {\n var cssClasses = this.data.cssClasses;\n var rowClass = !!cssClasses.row ? cssClasses.row : \"\";\n var rowErrorClass = !!cssClasses.rowError ? cssClasses.rowError : \"\";\n var hasError = !!this.data.getErrorByType(\"requiredinallrowserror\");\n var classes = rowClass;\n if (!!rowErrorClass && hasError && this.isValueEmpty(this.value)) {\n if (!!classes)\n classes += \" \";\n classes += rowErrorClass;\n }\n return classes;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\nvar MatrixCells = /** @class */ (function () {\n function MatrixCells(cellsOwner) {\n this.cellsOwner = cellsOwner;\n this.values = {};\n }\n Object.defineProperty(MatrixCells.prototype, \"isEmpty\", {\n get: function () {\n return Object.keys(this.values).length == 0;\n },\n enumerable: false,\n configurable: true\n });\n MatrixCells.prototype.setCellText = function (row, column, val) {\n row = this.getCellRowColumnValue(row, this.rows);\n column = this.getCellRowColumnValue(column, this.columns);\n if (!row || !column)\n return;\n if (val) {\n if (!this.values[row])\n this.values[row] = {};\n if (!this.values[row][column])\n this.values[row][column] = this.createString();\n this.values[row][column].text = val;\n }\n else {\n if (this.values[row] && this.values[row][column]) {\n var loc = this.values[row][column];\n loc.text = \"\";\n if (loc.isEmpty) {\n delete this.values[row][column];\n if (Object.keys(this.values[row]).length == 0) {\n delete this.values[row];\n }\n }\n }\n }\n };\n MatrixCells.prototype.setDefaultCellText = function (column, val) {\n this.setCellText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column, val);\n };\n MatrixCells.prototype.getCellLocText = function (row, column) {\n row = this.getCellRowColumnValue(row, this.rows);\n column = this.getCellRowColumnValue(column, this.columns);\n if (!row || !column)\n return null;\n if (!this.values[row])\n return null;\n if (!this.values[row][column])\n return null;\n return this.values[row][column];\n };\n MatrixCells.prototype.getDefaultCellLocText = function (column, val) {\n return this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n };\n MatrixCells.prototype.getCellDisplayLocText = function (row, column) {\n var cellText = this.getCellLocText(row, column);\n if (cellText && !cellText.isEmpty)\n return cellText;\n cellText = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n if (cellText && !cellText.isEmpty)\n return cellText;\n if (typeof column == \"number\") {\n column =\n column >= 0 && column < this.columns.length\n ? this.columns[column]\n : null;\n }\n if (column && column.locText)\n return column.locText;\n return null;\n };\n MatrixCells.prototype.getCellText = function (row, column) {\n var loc = this.getCellLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n MatrixCells.prototype.getDefaultCellText = function (column) {\n var loc = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n return loc ? loc.calculatedText : null;\n };\n MatrixCells.prototype.getCellDisplayText = function (row, column) {\n var loc = this.getCellDisplayLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n Object.defineProperty(MatrixCells.prototype, \"rows\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getRows() : [];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixCells.prototype, \"columns\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getColumns() : [];\n },\n enumerable: false,\n configurable: true\n });\n MatrixCells.prototype.getCellRowColumnValue = function (val, values) {\n if (val === null || val === undefined)\n return null;\n if (typeof val == \"number\") {\n if (val < 0 || val >= values.length)\n return null;\n val = values[val].value;\n }\n if (val.value)\n return val.value;\n return val;\n };\n MatrixCells.prototype.getJson = function () {\n if (this.isEmpty)\n return null;\n var res = {};\n for (var row in this.values) {\n var resRow = {};\n var rowValues = this.values[row];\n for (var col in rowValues) {\n resRow[col] = rowValues[col].getJson();\n }\n res[row] = resRow;\n }\n return res;\n };\n MatrixCells.prototype.setJson = function (value) {\n this.values = {};\n if (!value)\n return;\n for (var row in value) {\n if (row == \"pos\")\n continue;\n var rowValues = value[row];\n this.values[row] = {};\n for (var col in rowValues) {\n if (col == \"pos\")\n continue;\n var loc = this.createString();\n loc.setJson(rowValues[col]);\n this.values[row][col] = loc;\n }\n }\n };\n MatrixCells.prototype.createString = function () {\n return new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](this.cellsOwner, true);\n };\n return MatrixCells;\n}());\n\n/**\n * A Model for a simple matrix question.\n */\nvar QuestionMatrixModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixModel, _super);\n function QuestionMatrixModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isRowChanging = false;\n _this.emptyLocalizableString = new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](_this);\n _this.cellsValue = new MatrixCells(_this);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"columns\", function () {\n self.onColumnsChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"rows\", function () {\n if (!self.filterItems()) {\n self.onRowsChanged();\n }\n });\n _this.registerFunctionOnPropertyValueChanged(\"hideIfRowsEmpty\", function () {\n self.updateVisibilityBasedOnRows();\n });\n return _this;\n }\n QuestionMatrixModel.prototype.getType = function () {\n return \"matrix\";\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"isAllRowRequired\", {\n /**\n * Set this property to true, if you want a user to answer all rows.\n */\n get: function () {\n return this.getPropertyValue(\"isAllRowRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isAllRowRequired\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasRows\", {\n /**\n * Returns true, if there is at least one row.\n */\n get: function () {\n return this.rows.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"rowsOrder\", {\n /**\n * Use this property to render items in a specific order: \"random\" or \"initial\". Default is \"initial\".\n */\n get: function () {\n return this.getPropertyValue(\"rowsOrder\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == this.rowsOrder)\n return;\n this.setPropertyValue(\"rowsOrder\", val);\n this.onRowsChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hideIfRowsEmpty\", {\n /**\n * Set this property to true to hide the question if there is no visible rows in the matrix.\n */\n get: function () {\n return this.getPropertyValue(\"hideIfRowsEmpty\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideIfRowsEmpty\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixModel.prototype.getRows = function () {\n return this.rows;\n };\n QuestionMatrixModel.prototype.getColumns = function () {\n return this.visibleColumns;\n };\n QuestionMatrixModel.prototype.addColumn = function (value, text) {\n var col = new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value, text);\n this.columns.push(col);\n return col;\n };\n QuestionMatrixModel.prototype.getItemClass = function (row, column) {\n var isChecked = row.value == column.value;\n var isDisabled = this.isReadOnly;\n var allowHover = !isChecked && !isDisabled;\n var cellDisabledClass = this.hasCellText\n ? this.cssClasses.cellTextDisabled\n : this.cssClasses.itemDisabled;\n var cellSelectedClass = this.hasCellText\n ? this.cssClasses.cellTextSelected\n : this.cssClasses.itemChecked;\n var itemHoverClass = !this.hasCellText ? this.cssClasses.itemHover : \"\";\n var cellClass = this.hasCellText\n ? this.cssClasses.cellText\n : this.cssClasses.label;\n var itemClass = this.hasCellText && !!this.cssClasses.cell\n ? this.cssClasses.cell + \" \"\n : \"\";\n itemClass +=\n cellClass +\n (isChecked ? \" \" + cellSelectedClass : \"\") +\n (isDisabled ? \" \" + cellDisabledClass : \"\") +\n (allowHover ? \" \" + itemHoverClass : \"\");\n return itemClass;\n };\n QuestionMatrixModel.prototype.getQuizQuestionCount = function () {\n var res = 0;\n for (var i = 0; i < this.rows.length; i++) {\n if (!this.isValueEmpty(this.correctAnswer[this.rows[i].value]))\n res++;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getCorrectAnswerCount = function () {\n var res = 0;\n var value = this.value;\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i].value;\n if (!this.isValueEmpty(value[row]) &&\n _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(this.correctAnswer[row], value[row]))\n res++;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getVisibleRows = function () {\n var result = new Array();\n var val = this.value;\n if (!val)\n val = {};\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (this.isValueEmpty(row.value))\n continue;\n result.push(this.createMatrixRow(row, this.id + \"_\" + row.value.toString().replace(/\\s/g, \"_\"), val[row.value]));\n }\n if (result.length == 0 && !this.filteredRows) {\n result.push(this.createMatrixRow(new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](null), this.name.replace(/\\s/g, \"_\"), val));\n }\n this.generatedVisibleRows = result;\n return result;\n };\n QuestionMatrixModel.prototype.sortVisibleRows = function (array) {\n var order = this.rowsOrder.toLowerCase();\n if (order === \"random\")\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].randomizeArray(array);\n return array;\n };\n QuestionMatrixModel.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.rows = this.sortVisibleRows(this.rows);\n this.updateVisibilityBasedOnRows();\n };\n QuestionMatrixModel.prototype.processRowsOnSet = function (newRows) {\n return this.sortVisibleRows(newRows);\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"visibleRows\", {\n /**\n * Returns the list of visible rows as model objects.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getVisibleRows();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"cells\", {\n get: function () {\n return this.cellsValue;\n },\n set: function (value) {\n this.cells.setJson(value && value.getJson ? value.getJson() : null);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasCellText\", {\n get: function () {\n return !this.cells.isEmpty;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixModel.prototype.setCellText = function (row, column, val) {\n this.cells.setCellText(row, column, val);\n };\n QuestionMatrixModel.prototype.getCellText = function (row, column) {\n return this.cells.getCellText(row, column);\n };\n QuestionMatrixModel.prototype.setDefaultCellText = function (column, val) {\n this.cells.setDefaultCellText(column, val);\n };\n QuestionMatrixModel.prototype.getDefaultCellText = function (column) {\n return this.cells.getDefaultCellText(column);\n };\n QuestionMatrixModel.prototype.getCellDisplayText = function (row, column) {\n return this.cells.getCellDisplayText(row, column);\n };\n QuestionMatrixModel.prototype.getCellDisplayLocText = function (row, column) {\n var loc = this.cells.getCellDisplayLocText(row, column);\n return loc ? loc : this.emptyLocalizableString;\n };\n QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () {\n return this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if ((!isOnValueChanged || this.errors.length > 0) &&\n this.hasErrorInRows()) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"RequiredInAllRowsError\"](null, this));\n }\n };\n QuestionMatrixModel.prototype.hasErrorInRows = function () {\n if (!this.isAllRowRequired)\n return false;\n return !this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.hasValuesInAllRows = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (!rows)\n return true;\n for (var i = 0; i < rows.length; i++) {\n if (this.isValueEmpty(rows[i].value))\n return false;\n }\n return true;\n };\n QuestionMatrixModel.prototype.getIsAnswered = function () {\n return _super.prototype.getIsAnswered.call(this) && this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.createMatrixRow = function (item, fullName, value) {\n var row = new MatrixRowModel(item, fullName, this, value);\n this.onMatrixRowCreated(row);\n return row;\n };\n QuestionMatrixModel.prototype.onMatrixRowCreated = function (row) { };\n QuestionMatrixModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, this.isRowChanging || updateIsAnswered);\n if (!this.generatedVisibleRows || this.generatedVisibleRows.length == 0)\n return;\n this.isRowChanging = true;\n var val = this.value;\n if (!val)\n val = {};\n if (this.rows.length == 0) {\n this.generatedVisibleRows[0].value = val;\n }\n else {\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n var rowVal = val[row.name];\n if (this.isValueEmpty(rowVal))\n rowVal = null;\n this.generatedVisibleRows[i].value = rowVal;\n }\n }\n this.updateIsAnswered();\n this.isRowChanging = false;\n };\n QuestionMatrixModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var res = {};\n for (var key in value) {\n var newKey = keysAsText\n ? _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, key)\n : key;\n if (!newKey)\n newKey = key;\n var newValue = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(this.columns, value[key]);\n if (!newValue)\n newValue = value[key];\n res[newKey] = newValue;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n var values = this.createValueCopy();\n questionPlainData.isNode = true;\n questionPlainData.data = Object.keys(values || {}).map(function (rowName) {\n var row = _this.rows.filter(function (r) { return r.value === rowName; })[0];\n var rowDataItem = {\n name: rowName,\n title: !!row ? row.text : \"row\",\n value: values[rowName],\n displayValue: _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(_this.visibleColumns, values[rowName]),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getItemByValue(_this.visibleColumns, values[rowName]);\n if (!!item) {\n (options.calculations || []).forEach(function (calculation) {\n rowDataItem[calculation.propertyName] =\n item[calculation.propertyName];\n });\n }\n return rowDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionMatrixModel.prototype.addConditionObjectsByContext = function (objects, context) {\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i];\n if (!!row.value) {\n objects.push({\n name: this.getValueName() + \".\" + row.value,\n text: this.processedTitle + \".\" + row.calculatedText,\n question: this,\n });\n }\n }\n };\n QuestionMatrixModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var question = new _question_dropdown__WEBPACK_IMPORTED_MODULE_9__[\"QuestionDropdownModel\"](path);\n question.choices = this.columns;\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"JsonObject\"]().toJsonObject(question);\n json[\"type\"] = question.getType();\n return json;\n };\n QuestionMatrixModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n if (this.hasRows) {\n this.clearInvisibleValuesInRows();\n }\n };\n QuestionMatrixModel.prototype.getFirstInputElementId = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (rows.length > 0 && this.visibleColumns.length > 0) {\n return this.inputId + \"_\" + rows[0].name + \"_\" + 0;\n }\n return _super.prototype.getFirstInputElementId.call(this);\n };\n QuestionMatrixModel.prototype.onRowsChanged = function () {\n this.updateVisibilityBasedOnRows();\n _super.prototype.onRowsChanged.call(this);\n };\n QuestionMatrixModel.prototype.updateVisibilityBasedOnRows = function () {\n if (this.hideIfRowsEmpty) {\n this.visible =\n this.rows.length > 0 &&\n (!this.filteredRows || this.filteredRows.length > 0);\n }\n };\n //IMatrixData\n QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) {\n if (this.isRowChanging)\n return;\n this.isRowChanging = true;\n if (!this.hasRows) {\n this.setNewValue(row.value);\n }\n else {\n var newValue = this.value;\n if (!newValue) {\n newValue = {};\n }\n newValue[row.name] = row.value;\n this.setNewValue(newValue);\n }\n this.isRowChanging = false;\n };\n QuestionMatrixModel.prototype.getCorrectedRowValue = function (value) {\n for (var i = 0; i < this.columns.length; i++) {\n if (value === this.columns[i].value)\n return value;\n }\n for (var i = 0; i < this.columns.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(value, this.columns[i].value))\n return this.columns[i].value;\n }\n return value;\n };\n QuestionMatrixModel.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"columns\");\n keys.push(\"rows\");\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"SurveyModel\", {\n get: function () {\n return this.survey;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName({ column: cell }, \"column-header\");\n };\n QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData({ column: cell }, \"column-header\");\n };\n QuestionMatrixModel.prototype.getRowHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName({ row: cell }, \"row-header\");\n };\n QuestionMatrixModel.prototype.getRowHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData({ row: cell }, \"row-header\");\n };\n return QuestionMatrixModel;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"matrix\", [\n {\n name: \"columns:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"matrix_column\");\n },\n },\n {\n name: \"rows:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"matrix_row\");\n },\n },\n { name: \"cells:cells\", serializationProperty: \"cells\" },\n {\n name: \"rowsOrder\",\n default: \"initial\",\n choices: [\"initial\", \"random\"],\n },\n \"isAllRowRequired:boolean\",\n \"hideIfRowsEmpty:boolean\",\n], function () {\n return new QuestionMatrixModel(\"\");\n}, \"matrixbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].Instance.registerQuestion(\"matrix\", function (name) {\n var q = new QuestionMatrixModel(name);\n q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultRows;\n q.columns = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultColums;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdown.ts\":\n/*!****************************************!*\\\n !*** ./src/question_matrixdropdown.ts ***!\n \\****************************************/\n/*! exports provided: MatrixDropdownRowModel, QuestionMatrixDropdownModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return MatrixDropdownRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return QuestionMatrixDropdownModel; });\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar MatrixDropdownRowModel = /** @class */ (function (_super) {\n __extends(MatrixDropdownRowModel, _super);\n function MatrixDropdownRowModel(name, item, data, value) {\n var _this = _super.call(this, data, value) || this;\n _this.name = name;\n _this.item = item;\n _this.buildCells(value);\n return _this;\n }\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"rowName\", {\n get: function () {\n return this.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixDropdownRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]));\n\n/**\n * A Model for a matrix dropdown question. You may use a dropdown, checkbox, radiogroup, text and comment questions as a cell editors.\n */\nvar QuestionMatrixDropdownModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownModel, _super);\n function QuestionMatrixDropdownModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"totalText\", _this, true);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rows\", function () {\n self.clearGeneratedRows();\n self.resetRenderedTable();\n self.filterItems();\n });\n return _this;\n }\n QuestionMatrixDropdownModel.prototype.getType = function () {\n return \"matrixdropdown\";\n };\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"totalText\", {\n /**\n * Set this property to show it on the first column for the total row.\n */\n get: function () {\n return this.getLocalizableStringText(\"totalText\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"totalText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"locTotalText\", {\n get: function () {\n return this.getLocalizableString(\"totalText\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModel.prototype.getFooterText = function () {\n return this.locTotalText;\n };\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"rowTitleWidth\", {\n /**\n * The column width for the first column, row title column.\n */\n get: function () {\n return this.getPropertyValue(\"rowTitleWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"rowTitleWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModel.prototype.getRowTitleWidth = function () {\n return this.rowTitleWidth;\n };\n QuestionMatrixDropdownModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value)\n return value;\n var rows = this.visibleRows;\n var res = {};\n for (var i = 0; i < rows.length; i++) {\n var rowValue = this.rows[i].value;\n var val = value[rowValue];\n if (!val)\n continue;\n if (keysAsText) {\n var displayRowValue = _itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, rowValue);\n if (!!displayRowValue) {\n rowValue = displayRowValue;\n }\n }\n res[rowValue] = this.getRowDisplayValue(keysAsText, rows[i], val);\n }\n return res;\n };\n QuestionMatrixDropdownModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context ? this.columns.indexOf(context) > -1 : false;\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i];\n if (!row.value)\n continue;\n var prefixName = this.getValueName() + \".\" + row.value + \".\";\n var prefixTitle = this.processedTitle + \".\" + row.calculatedText + \".\";\n for (var j = 0; j < this.columns.length; j++) {\n var column = this.columns[j];\n objects.push({\n name: prefixName + column.name,\n text: prefixTitle + column.fullTitle,\n question: this,\n });\n }\n }\n if (hasContext) {\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column == context)\n continue;\n objects.push({\n name: \"row.\" + column.name,\n text: \"row.\" + column.fullTitle,\n question: this,\n });\n }\n }\n };\n QuestionMatrixDropdownModel.prototype.clearIncorrectValues = function () {\n var val = this.value;\n if (!val)\n return;\n var newVal = null;\n var isChanged = false;\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n for (var key in val) {\n if (_itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getItemByValue(rows, key)) {\n if (newVal == null)\n newVal = {};\n newVal[key] = val[key];\n }\n else {\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newVal;\n }\n _super.prototype.clearIncorrectValues.call(this);\n };\n QuestionMatrixDropdownModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n this.clearInvisibleValuesInRows();\n };\n QuestionMatrixDropdownModel.prototype.generateRows = function () {\n var result = new Array();\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n if (!rows || rows.length === 0)\n return result;\n var val = this.value;\n if (!val)\n val = {};\n for (var i = 0; i < rows.length; i++) {\n if (!rows[i].value)\n continue;\n result.push(this.createMatrixRow(rows[i], val[rows[i].value]));\n }\n return result;\n };\n QuestionMatrixDropdownModel.prototype.createMatrixRow = function (item, value) {\n return new MatrixDropdownRowModel(item.value, item, this, value);\n };\n QuestionMatrixDropdownModel.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"rows\");\n };\n return QuestionMatrixDropdownModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"matrixdropdown\", [\n {\n name: \"rows:itemvalue[]\",\n },\n \"rowsVisibleIf:condition\",\n \"rowTitleWidth\",\n { name: \"totalText\", serializationProperty: \"locTotalText\" },\n], function () {\n return new QuestionMatrixDropdownModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdropdown\", function (name) {\n var q = new QuestionMatrixDropdownModel(name);\n q.choices = [1, 2, 3, 4, 5];\n q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].DefaultRows;\n _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdownbase.ts\":\n/*!********************************************!*\\\n !*** ./src/question_matrixdropdownbase.ts ***!\n \\********************************************/\n/*! exports provided: matrixDropdownColumnTypes, MatrixDropdownColumn, MatrixDropdownCell, MatrixDropdownTotalCell, MatrixDropdownRowModelBase, MatrixDropdownTotalRowModel, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, QuestionMatrixDropdownModelBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return matrixDropdownColumnTypes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return MatrixDropdownColumn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return MatrixDropdownCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownTotalCell\", function() { return MatrixDropdownTotalCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return MatrixDropdownRowModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownTotalRowModel\", function() { return MatrixDropdownTotalRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return QuestionMatrixDropdownRenderedCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return QuestionMatrixDropdownRenderedRow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return QuestionMatrixDropdownRenderedTable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return QuestionMatrixDropdownModelBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./question_expression */ \"./src/question_expression.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data) {\n cellQuestion.storeOthersAsComment = !!question\n ? question.storeOthersAsComment\n : false;\n if ((!cellQuestion.choices || cellQuestion.choices.length == 0) &&\n cellQuestion.choicesByUrl.isEmpty) {\n cellQuestion.choices = question.choices;\n }\n if (!cellQuestion.choicesByUrl.isEmpty) {\n cellQuestion.choicesByUrl.run(data.getTextProcessor());\n }\n}\nvar matrixDropdownColumnTypes = {\n dropdown: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"optionsCaption\",\n \"otherText\",\n \"choicesVisibleIf\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n if (!!cellQuestion.locOptionsCaption &&\n cellQuestion.locOptionsCaption.isEmpty &&\n !question.locOptionsCaption.isEmpty) {\n cellQuestion.optionsCaption = question.optionsCaption;\n }\n },\n },\n checkbox: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"otherText\",\n \"choicesVisibleIf\",\n \"hasSelectAll\",\n \"hasNone\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n cellQuestion.colCount =\n column.colCount > -1 ? column.colCount : question.columnColCount;\n },\n },\n radiogroup: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"otherText\",\n \"choicesVisibleIf\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n cellQuestion.colCount =\n column.colCount > -1 ? column.colCount : question.columnColCount;\n },\n },\n text: {\n properties: [\"placeHolder\", \"inputType\", \"maxLength\", \"min\", \"max\", \"step\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n comment: {\n properties: [\"placeHolder\", \"rows\", \"maxLength\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n boolean: {\n properties: [\"renderAs\", \"defaultValue\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n cellQuestion.showTitle = true;\n cellQuestion.renderAs = column.renderAs;\n },\n },\n expression: {\n properties: [\"expression\", \"displayStyle\", \"currency\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n rating: {\n properties: [\"rateValues\"],\n },\n};\nvar MatrixDropdownColumn = /** @class */ (function (_super) {\n __extends(MatrixDropdownColumn, _super);\n function MatrixDropdownColumn(name, title) {\n if (title === void 0) { title = null; }\n var _this = _super.call(this) || this;\n _this.colOwnerValue = null;\n _this.indexValue = -1;\n _this._isVisible = true;\n _this._hasVisibleCell = true;\n var self = _this;\n _this.createLocalizableString(\"totalFormat\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"showInMultipleColumns\", function () {\n self.doShowInMultipleColumnsChanged();\n });\n _this.updateTemplateQuestion();\n _this.name = name;\n if (title) {\n _this.title = title;\n }\n else {\n _this.templateQuestion.locTitle.strChanged();\n }\n return _this;\n }\n MatrixDropdownColumn.getColumnTypes = function () {\n var res = [];\n for (var key in matrixDropdownColumnTypes) {\n res.push(key);\n }\n return res;\n };\n MatrixDropdownColumn.prototype.getOriginalObj = function () {\n return this.templateQuestion;\n };\n MatrixDropdownColumn.prototype.getClassNameProperty = function () {\n return \"cellType\";\n };\n MatrixDropdownColumn.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.colOwner ? this.colOwner.survey : null;\n };\n MatrixDropdownColumn.prototype.endLoadingFromJson = function () {\n var _this = this;\n _super.prototype.endLoadingFromJson.call(this);\n this.templateQuestion.endLoadingFromJson();\n this.templateQuestion.onGetSurvey = function () {\n return _this.getSurvey();\n };\n };\n MatrixDropdownColumn.prototype.getDynamicPropertyName = function () {\n return \"cellType\";\n };\n MatrixDropdownColumn.prototype.getDynamicType = function () {\n return this.calcCellQuestionType();\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"colOwner\", {\n get: function () {\n return this.colOwnerValue;\n },\n set: function (value) {\n this.colOwnerValue = value;\n if (!!value) {\n this.updateTemplateQuestion();\n }\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n this.locTitle.strChanged();\n };\n MatrixDropdownColumn.prototype.addUsedLocales = function (locales) {\n _super.prototype.addUsedLocales.call(this, locales);\n this.templateQuestion.addUsedLocales(locales);\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"index\", {\n get: function () {\n return this.indexValue;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.setIndex = function (val) {\n this.indexValue = val;\n };\n MatrixDropdownColumn.prototype.getType = function () {\n return \"matrixdropdowncolumn\";\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"cellType\", {\n get: function () {\n return this.getPropertyValue(\"cellType\");\n },\n set: function (val) {\n val = val.toLocaleLowerCase();\n this.setPropertyValue(\"cellType\", val);\n this.updateTemplateQuestion();\n if (!!this.colOwner) {\n this.colOwner.onColumnCellTypeChanged(this);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"templateQuestion\", {\n get: function () {\n return this.templateQuestionValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"value\", {\n get: function () {\n return this.templateQuestion.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isVisible\", {\n get: function () {\n return this._isVisible;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.setIsVisible = function (newVal) {\n this._isVisible = newVal;\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasVisibleCell\", {\n get: function () {\n return this._hasVisibleCell;\n },\n set: function (newVal) {\n this._hasVisibleCell = newVal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"name\", {\n get: function () {\n return this.templateQuestion.name;\n },\n set: function (val) {\n this.templateQuestion.name = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"title\", {\n get: function () {\n return this.templateQuestion.title;\n },\n set: function (val) {\n this.templateQuestion.title = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTitle\", {\n get: function () {\n return this.templateQuestion.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"fullTitle\", {\n get: function () {\n return this.locTitle.textOrHtml;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isRequired\", {\n get: function () {\n return this.templateQuestion.isRequired;\n },\n set: function (val) {\n this.templateQuestion.isRequired = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredText\", {\n get: function () {\n return this.templateQuestion.requiredText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredErrorText\", {\n get: function () {\n return this.templateQuestion.requiredErrorText;\n },\n set: function (val) {\n this.templateQuestion.requiredErrorText = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.templateQuestion.locRequiredErrorText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"readOnly\", {\n get: function () {\n return this.templateQuestion.readOnly;\n },\n set: function (val) {\n this.templateQuestion.readOnly = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasOther\", {\n get: function () {\n return this.templateQuestion.hasOther;\n },\n set: function (val) {\n this.templateQuestion.hasOther = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"visibleIf\", {\n get: function () {\n return this.templateQuestion.visibleIf;\n },\n set: function (val) {\n this.templateQuestion.visibleIf = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"enableIf\", {\n get: function () {\n return this.templateQuestion.enableIf;\n },\n set: function (val) {\n this.templateQuestion.enableIf = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredIf\", {\n get: function () {\n return this.templateQuestion.requiredIf;\n },\n set: function (val) {\n this.templateQuestion.requiredIf = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isUnique\", {\n get: function () {\n return this.getPropertyValue(\"isUnique\");\n },\n set: function (val) {\n this.setPropertyValue(\"isUnique\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"showInMultipleColumns\", {\n get: function () {\n return this.getPropertyValue(\"showInMultipleColumns\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showInMultipleColumns\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isSupportMultipleColumns\", {\n get: function () {\n return [\"checkbox\", \"radiogroup\"].indexOf(this.cellType) > -1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isShowInMultipleColumns\", {\n get: function () {\n return this.showInMultipleColumns && this.isSupportMultipleColumns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"validators\", {\n get: function () {\n return this.templateQuestion.validators;\n },\n set: function (val) {\n this.templateQuestion.validators = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalType\", {\n get: function () {\n return this.getPropertyValue(\"totalType\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalType\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalExpression\", {\n get: function () {\n return this.getPropertyValue(\"totalExpression\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasTotal\", {\n get: function () {\n return this.totalType != \"none\" || !!this.totalExpression;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalFormat\", {\n get: function () {\n return this.getLocalizableStringText(\"totalFormat\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"totalFormat\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTotalFormat\", {\n get: function () {\n return this.getLocalizableString(\"totalFormat\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"renderAs\", {\n get: function () {\n return this.getPropertyValue(\"renderAs\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderAs\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMaximumFractionDigits\", {\n get: function () {\n return this.getPropertyValue(\"totalMaximumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"totalMaximumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMinimumFractionDigits\", {\n get: function () {\n return this.getPropertyValue(\"totalMinimumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"totalMinimumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalDisplayStyle\", {\n get: function () {\n return this.getPropertyValue(\"totalDisplayStyle\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalDisplayStyle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalCurrency\", {\n get: function () {\n return this.getPropertyValue(\"totalCurrency\");\n },\n set: function (val) {\n if (Object(_question_expression__WEBPACK_IMPORTED_MODULE_9__[\"getCurrecyCodes\"])().indexOf(val) < 0)\n return;\n this.setPropertyValue(\"totalCurrency\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"minWidth\", {\n get: function () {\n return this.getPropertyValue(\"minWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"minWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"width\", {\n get: function () {\n return this.getPropertyValue(\"width\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"colCount\", {\n get: function () {\n return this.getPropertyValue(\"colCount\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 4)\n return;\n this.setPropertyValue(\"colCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.getLocale = function () {\n return this.colOwner ? this.colOwner.getLocale() : \"\";\n };\n MatrixDropdownColumn.prototype.getMarkdownHtml = function (text, name) {\n return this.colOwner ? this.colOwner.getMarkdownHtml(text, name) : null;\n };\n MatrixDropdownColumn.prototype.getRenderer = function (name) {\n return !!this.colOwner ? this.colOwner.getRenderer(name) : null;\n };\n MatrixDropdownColumn.prototype.getProcessedText = function (text) {\n return this.colOwner ? this.colOwner.getProcessedText(text) : text;\n };\n MatrixDropdownColumn.prototype.createCellQuestion = function (data) {\n var qType = this.calcCellQuestionType();\n var cellQuestion = this.createNewQuestion(qType);\n this.callOnCellQuestionUpdate(cellQuestion, data);\n return cellQuestion;\n };\n MatrixDropdownColumn.prototype.updateCellQuestion = function (cellQuestion, data, onUpdateJson) {\n if (onUpdateJson === void 0) { onUpdateJson = null; }\n this.setQuestionProperties(cellQuestion, onUpdateJson);\n this.callOnCellQuestionUpdate(cellQuestion, data);\n };\n MatrixDropdownColumn.prototype.callOnCellQuestionUpdate = function (cellQuestion, data) {\n var qType = cellQuestion.getType();\n var qDefinition = matrixDropdownColumnTypes[qType];\n if (qDefinition && qDefinition[\"onCellQuestionUpdate\"]) {\n qDefinition[\"onCellQuestionUpdate\"](cellQuestion, this, this.colOwner, data);\n }\n };\n MatrixDropdownColumn.prototype.defaultCellTypeChanged = function () {\n this.updateTemplateQuestion();\n };\n MatrixDropdownColumn.prototype.calcCellQuestionType = function () {\n if (this.cellType !== \"default\")\n return this.cellType;\n if (this.colOwner)\n return this.colOwner.getCellType();\n return _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType;\n };\n MatrixDropdownColumn.prototype.updateTemplateQuestion = function () {\n var _this = this;\n var prevCellType = this.templateQuestion\n ? this.templateQuestion.getType()\n : \"\";\n var curCellType = this.calcCellQuestionType();\n if (curCellType === prevCellType)\n return;\n if (this.templateQuestion) {\n this.removeProperties(prevCellType);\n }\n this.templateQuestionValue = this.createNewQuestion(curCellType);\n this.templateQuestion.locOwner = this;\n this.addProperties(curCellType);\n this.templateQuestion.onPropertyChanged.add(function (sender, options) {\n _this.propertyValueChanged(options.name, options.oldValue, options.newValue);\n });\n this.templateQuestion.onItemValuePropertyChanged.add(function (sender, options) {\n _this.doItemValuePropertyChanged(options.propertyName, options.obj, options.name, options.newValue, options.oldValue);\n });\n this.templateQuestion.isContentElement = true;\n if (!this.isLoadingFromJson) {\n this.templateQuestion.onGetSurvey = function () {\n return _this.getSurvey();\n };\n }\n this.templateQuestion.locTitle.strChanged();\n };\n MatrixDropdownColumn.prototype.createNewQuestion = function (cellType) {\n var question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(cellType);\n if (!question) {\n question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"text\");\n }\n question.loadingOwner = this;\n question.isEditableTemplateElement = true;\n this.setQuestionProperties(question);\n return question;\n };\n MatrixDropdownColumn.prototype.setQuestionProperties = function (question, onUpdateJson) {\n if (onUpdateJson === void 0) { onUpdateJson = null; }\n if (this.templateQuestion) {\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toJsonObject(this.templateQuestion, true);\n if (onUpdateJson) {\n onUpdateJson(json);\n }\n json.type = question.getType();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, question);\n }\n };\n MatrixDropdownColumn.prototype.propertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.propertyValueChanged.call(this, name, oldValue, newValue);\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(this, name))\n return;\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onColumnPropertyChanged(this, name, newValue);\n }\n };\n MatrixDropdownColumn.prototype.doItemValuePropertyChanged = function (propertyName, obj, name, newValue, oldValue) {\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(obj, name))\n return;\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onColumnItemValuePropertyChanged(this, propertyName, obj, name, newValue, oldValue);\n }\n };\n MatrixDropdownColumn.prototype.doShowInMultipleColumnsChanged = function () {\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onShowInMultipleColumnsChanged(this);\n }\n };\n MatrixDropdownColumn.prototype.getProperties = function (curCellType) {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].getDynamicPropertiesByObj(this, curCellType);\n };\n MatrixDropdownColumn.prototype.removeProperties = function (curCellType) {\n var properties = this.getProperties(curCellType);\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n delete this[prop.name];\n if (prop.serializationProperty) {\n delete this[prop.serializationProperty];\n }\n }\n };\n MatrixDropdownColumn.prototype.addProperties = function (curCellType) {\n var question = this.templateQuestion;\n var properties = this.getProperties(curCellType);\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n this.addProperty(question, prop.name, false);\n if (prop.serializationProperty) {\n this.addProperty(question, prop.serializationProperty, true);\n }\n }\n };\n MatrixDropdownColumn.prototype.addProperty = function (question, propName, isReadOnly) {\n var desc = {\n configurable: true,\n get: function () {\n return question[propName];\n },\n };\n if (!isReadOnly) {\n desc[\"set\"] = function (v) {\n question[propName] = v;\n };\n }\n Object.defineProperty(this, propName, desc);\n };\n return MatrixDropdownColumn;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"]));\n\nvar MatrixDropdownCell = /** @class */ (function () {\n function MatrixDropdownCell(column, row, data) {\n this.column = column;\n this.row = row;\n this.data = data;\n this.questionValue = this.createQuestion(column, row, data);\n this.questionValue.updateCustomWidget();\n }\n MatrixDropdownCell.prototype.locStrsChanged = function () {\n this.question.locStrsChanged();\n };\n MatrixDropdownCell.prototype.createQuestion = function (column, row, data) {\n var res = data.createQuestion(this.row, this.column);\n res.validateValueCallback = function () {\n return data.validateCell(row, column.name, row.value);\n };\n _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"CustomPropertiesCollection\"].getProperties(column.getType()).forEach(function (property) {\n var propertyName = property.name;\n if (column[propertyName] !== undefined) {\n res[propertyName] = column[propertyName];\n }\n });\n return res;\n };\n Object.defineProperty(MatrixDropdownCell.prototype, \"question\", {\n get: function () {\n return this.questionValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownCell.prototype, \"value\", {\n get: function () {\n return this.question.value;\n },\n set: function (value) {\n this.question.value = value;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownCell.prototype.runCondition = function (values, properties) {\n this.question.runCondition(values, properties);\n };\n return MatrixDropdownCell;\n}());\n\nvar MatrixDropdownTotalCell = /** @class */ (function (_super) {\n __extends(MatrixDropdownTotalCell, _super);\n function MatrixDropdownTotalCell(column, row, data) {\n var _this = _super.call(this, column, row, data) || this;\n _this.column = column;\n _this.row = row;\n _this.data = data;\n _this.updateCellQuestion();\n return _this;\n }\n MatrixDropdownTotalCell.prototype.createQuestion = function (column, row, data) {\n var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"expression\");\n res.setSurveyImpl(row);\n return res;\n };\n MatrixDropdownTotalCell.prototype.locStrsChanged = function () {\n this.updateCellQuestion();\n _super.prototype.locStrsChanged.call(this);\n };\n MatrixDropdownTotalCell.prototype.updateCellQuestion = function () {\n this.question.locCalculation();\n this.column.updateCellQuestion(this.question, null, function (json) {\n delete json[\"defaultValue\"];\n });\n this.question.expression = this.getTotalExpression();\n this.question.format = this.column.totalFormat;\n this.question.currency = this.column.totalCurrency;\n this.question.displayStyle = this.column.totalDisplayStyle;\n this.question.maximumFractionDigits = this.column.totalMaximumFractionDigits;\n this.question.minimumFractionDigits = this.column.totalMinimumFractionDigits;\n this.question.unlocCalculation();\n this.question.runIfReadOnly = true;\n };\n MatrixDropdownTotalCell.prototype.getTotalExpression = function () {\n if (!!this.column.totalExpression)\n return this.column.totalExpression;\n if (this.column.totalType == \"none\")\n return \"\";\n var funName = this.column.totalType + \"InArray\";\n if (!_functionsfactory__WEBPACK_IMPORTED_MODULE_10__[\"FunctionFactory\"].Instance.hasFunction(funName))\n return \"\";\n return funName + \"({self}, '\" + this.column.name + \"')\";\n };\n return MatrixDropdownTotalCell;\n}(MatrixDropdownCell));\n\nvar MatrixDropdownRowTextProcessor = /** @class */ (function (_super) {\n __extends(MatrixDropdownRowTextProcessor, _super);\n function MatrixDropdownRowTextProcessor(row, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.row = row;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(MatrixDropdownRowTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.row.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowTextProcessor.prototype.getValues = function () {\n return this.row.value;\n };\n MatrixDropdownRowTextProcessor.prototype.getQuestionByName = function (name) {\n return this.row.getQuestionByName(name);\n };\n MatrixDropdownRowTextProcessor.prototype.onCustomProcessText = function (textValue) {\n if (textValue.name == MatrixDropdownRowModelBase.IndexVariableName) {\n textValue.isExists = true;\n textValue.value = this.row.rowIndex;\n return true;\n }\n if (textValue.name == MatrixDropdownRowModelBase.RowValueVariableName) {\n textValue.isExists = true;\n textValue.value = this.row.rowName;\n return true;\n }\n return false;\n };\n return MatrixDropdownRowTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_5__[\"QuestionTextProcessor\"]));\nvar MatrixDropdownRowModelBase = /** @class */ (function () {\n function MatrixDropdownRowModelBase(data, value) {\n var _this = this;\n this.isSettingValue = false;\n this.detailPanelValue = null;\n this.cells = [];\n this.isCreatingDetailPanel = false;\n this.data = data;\n this.subscribeToChanges(value);\n this.textPreProcessor = new MatrixDropdownRowTextProcessor(this, MatrixDropdownRowModelBase.RowVariableName);\n this.showHideDetailPanelClick = function () {\n _this.showHideDetailPanel();\n };\n this.idValue = MatrixDropdownRowModelBase.getId();\n }\n MatrixDropdownRowModelBase.getId = function () {\n return \"srow_\" + MatrixDropdownRowModelBase.idCounter++;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowName\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"text\", {\n get: function () {\n return this.rowName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"value\", {\n get: function () {\n var result = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n if (!question.isEmpty()) {\n result[question.getValueName()] = question.value;\n }\n if (!!question.comment &&\n !!this.getSurvey() &&\n this.getSurvey().storeOthersAsComment) {\n result[question.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix] =\n question.comment;\n }\n }\n return result;\n },\n set: function (value) {\n this.isSettingValue = true;\n this.subscribeToChanges(value);\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n var val = this.getCellValue(value, question.getValueName());\n var oldComment = question.comment;\n var comment = !!value\n ? value[question.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix]\n : \"\";\n if (comment == undefined)\n comment = \"\";\n question.updateValueFromSurvey(val);\n if (!!comment || _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(oldComment, question.comment)) {\n question.updateCommentFromSurvey(comment);\n }\n question.onSurveyValueChanged(val);\n }\n this.isSettingValue = false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"locText\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"hasPanel\", {\n get: function () {\n if (!this.data)\n return false;\n return this.data.hasDetailPanel(this);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanel\", {\n get: function () {\n return this.detailPanelValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanelId\", {\n get: function () {\n return !!this.detailPanel ? this.detailPanel.id : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isDetailPanelShowing\", {\n get: function () {\n return !!this.data ? this.data.getIsDetailPanelShowing(this) : false;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.setIsDetailPanelShowing = function (val) {\n if (!!this.data) {\n this.data.setIsDetailPanelShowing(this, val);\n }\n if (!!this.onDetailPanelShowingChanged) {\n this.onDetailPanelShowingChanged();\n }\n };\n MatrixDropdownRowModelBase.prototype.showHideDetailPanel = function () {\n if (this.isDetailPanelShowing) {\n this.hideDetailPanel();\n }\n else {\n this.showDetailPanel();\n }\n };\n MatrixDropdownRowModelBase.prototype.showDetailPanel = function () {\n this.ensureDetailPanel();\n if (!this.detailPanelValue)\n return;\n this.setIsDetailPanelShowing(true);\n };\n MatrixDropdownRowModelBase.prototype.hideDetailPanel = function (destroyPanel) {\n if (destroyPanel === void 0) { destroyPanel = false; }\n this.setIsDetailPanelShowing(false);\n if (destroyPanel) {\n this.detailPanelValue = null;\n }\n };\n MatrixDropdownRowModelBase.prototype.ensureDetailPanel = function () {\n if (this.isCreatingDetailPanel)\n return;\n if (!!this.detailPanelValue || !this.hasPanel || !this.data)\n return;\n this.isCreatingDetailPanel = true;\n this.detailPanelValue = this.data.createRowDetailPanel(this);\n var questions = this.detailPanelValue.questions;\n var value = this.data.getRowValue(this.data.getRowIndex(this));\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value)) {\n for (var i = 0; i < questions.length; i++) {\n var key = questions[i].getValueName();\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[key])) {\n questions[i].value = value[key];\n }\n }\n }\n this.detailPanelValue.setSurveyImpl(this);\n this.isCreatingDetailPanel = false;\n };\n MatrixDropdownRowModelBase.prototype.getAllValues = function () {\n return this.value;\n };\n MatrixDropdownRowModelBase.prototype.getFilteredValues = function () {\n var allValues = this.getAllValues();\n var values = { row: allValues };\n for (var key in allValues) {\n values[key] = allValues[key];\n }\n return values;\n };\n MatrixDropdownRowModelBase.prototype.getFilteredProperties = function () {\n return { survey: this.getSurvey(), row: this };\n };\n MatrixDropdownRowModelBase.prototype.runCondition = function (values, properties) {\n if (!!this.data) {\n values[MatrixDropdownRowModelBase.OwnerVariableName] = this.data.value;\n }\n values[MatrixDropdownRowModelBase.IndexVariableName] = this.rowIndex;\n values[MatrixDropdownRowModelBase.RowValueVariableName] = this.rowName;\n if (!properties)\n properties = {};\n properties[MatrixDropdownRowModelBase.RowVariableName] = this;\n for (var i = 0; i < this.cells.length; i++) {\n values[MatrixDropdownRowModelBase.RowVariableName] = this.value;\n this.cells[i].runCondition(values, properties);\n }\n if (!!this.detailPanel) {\n this.detailPanel.runCondition(values, properties);\n }\n };\n MatrixDropdownRowModelBase.prototype.clearValue = function () {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValue();\n }\n };\n MatrixDropdownRowModelBase.prototype.onAnyValueChanged = function (name) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onAnyValueChanged(name);\n }\n };\n MatrixDropdownRowModelBase.prototype.getDataValueCore = function (valuesHash, key) {\n var survey = this.getSurvey();\n if (!!survey) {\n return survey.getDataValueCore(valuesHash, key);\n }\n else {\n return valuesHash[key];\n }\n };\n MatrixDropdownRowModelBase.prototype.getValue = function (name) {\n var question = this.getQuestionByName(name);\n return !!question ? question.value : null;\n };\n MatrixDropdownRowModelBase.prototype.setValue = function (name, newColumnValue) {\n this.setValueCore(name, newColumnValue, false);\n };\n MatrixDropdownRowModelBase.prototype.getVariable = function (name) {\n return undefined;\n };\n MatrixDropdownRowModelBase.prototype.setVariable = function (name, newValue) { };\n MatrixDropdownRowModelBase.prototype.getComment = function (name) {\n var question = this.getQuestionByName(name);\n return !!question ? question.comment : \"\";\n };\n MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue, locNotification) {\n this.setValueCore(name, newValue, true);\n };\n MatrixDropdownRowModelBase.prototype.setValueCore = function (name, newColumnValue, isComment) {\n if (this.isSettingValue)\n return;\n this.updateQuestionsValue(name, newColumnValue, isComment);\n var newValue = this.value;\n var changedName = isComment ? name + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix : name;\n var changedValue = isComment ? this.getComment(name) : this.getValue(name);\n var changedQuestion = this.getQuestionByName(name);\n var changingValue = this.data.onRowChanging(this, changedName, newValue);\n if (!!changedQuestion &&\n !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(changingValue, changedValue)) {\n if (isComment) {\n changedQuestion.comment = changingValue;\n }\n else {\n changedQuestion.value = changingValue;\n }\n }\n else {\n if (this.data.isValidateOnValueChanging &&\n this.hasQuestonError(changedQuestion))\n return;\n this.data.onRowChanged(this, changedName, newValue, newColumnValue == null && !changedQuestion);\n this.onAnyValueChanged(MatrixDropdownRowModelBase.RowVariableName);\n }\n };\n MatrixDropdownRowModelBase.prototype.updateQuestionsValue = function (name, newColumnValue, isComment) {\n if (!this.detailPanel)\n return;\n var colQuestion = this.getQuestionByColumnName(name);\n var detailQuestion = this.detailPanel.getQuestionByName(name);\n if (!colQuestion || !detailQuestion)\n return;\n var isColQuestion = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(newColumnValue, isComment ? colQuestion.comment : colQuestion.value);\n var question = isColQuestion ? detailQuestion : colQuestion;\n this.isSettingValue = true;\n if (!isComment) {\n question.value = newColumnValue;\n }\n else {\n question.comment = newColumnValue;\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.prototype.hasQuestonError = function (question) {\n if (!question)\n return false;\n if (question.hasErrors(true, {\n isOnValueChanged: !this.data.isValidateOnValueChanging,\n }))\n return true;\n if (question.isEmpty())\n return false;\n var cell = this.getCellByColumnName(question.name);\n if (!cell || !cell.column || !cell.column.isUnique)\n return false;\n return this.data.checkIfValueInRowDuplicated(this, question);\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isEmpty\", {\n get: function () {\n var val = this.value;\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(val))\n return true;\n for (var key in val) {\n if (val[key] !== undefined && val[key] !== null)\n return false;\n }\n return true;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getQuestionByColumn = function (column) {\n var cell = this.getCellByColumn(column);\n return !!cell ? cell.question : null;\n };\n MatrixDropdownRowModelBase.prototype.getCellByColumn = function (column) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column == column)\n return this.cells[i];\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getCellByColumnName = function (columnName) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column.name == columnName)\n return this.cells[i];\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getQuestionByColumnName = function (columnName) {\n var cell = this.getCellByColumnName(columnName);\n return !!cell ? cell.question : null;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"questions\", {\n get: function () {\n var res = [];\n for (var i = 0; i < this.cells.length; i++) {\n res.push(this.cells[i].question);\n }\n var detailQuestions = !!this.detailPanel ? this.detailPanel.questions : [];\n for (var i = 0; i < detailQuestions.length; i++) {\n res.push(detailQuestions[i]);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getQuestionByName = function (name) {\n var res = this.getQuestionByColumnName(name);\n if (!!res)\n return res;\n return !!this.detailPanel ? this.detailPanel.getQuestionByName(name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getQuestionsByName = function (name) {\n var res = [];\n var q = this.getQuestionByColumnName(name);\n if (!!q)\n res.push(q);\n if (!!this.detailPanel) {\n q = this.detailPanel.getQuestionByName(name);\n if (!!q)\n res.push(q);\n }\n return res;\n };\n MatrixDropdownRowModelBase.prototype.getSharedQuestionByName = function (columnName) {\n return !!this.data\n ? this.data.getSharedQuestionByName(columnName, this)\n : null;\n };\n MatrixDropdownRowModelBase.prototype.clearIncorrectValues = function (val) {\n for (var key in val) {\n var question = this.getQuestionByName(key);\n if (question) {\n var qVal = question.value;\n question.clearIncorrectValues();\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(qVal, question.value)) {\n this.setValue(key, question.value);\n }\n }\n else {\n if (!this.getSharedQuestionByName(key) &&\n key.indexOf(_settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixTotalValuePostFix) < 0) {\n this.setValue(key, null);\n }\n }\n }\n };\n MatrixDropdownRowModelBase.prototype.getLocale = function () {\n return this.data ? this.data.getLocale() : \"\";\n };\n MatrixDropdownRowModelBase.prototype.getMarkdownHtml = function (text, name) {\n return this.data ? this.data.getMarkdownHtml(text, name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getRenderer = function (name) {\n return this.data ? this.data.getRenderer(name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getProcessedText = function (text) {\n return this.data ? this.data.getProcessedText(text) : text;\n };\n MatrixDropdownRowModelBase.prototype.locStrsChanged = function () {\n for (var i = 0; i < this.cells.length; i++) {\n this.cells[i].locStrsChanged();\n }\n if (!!this.detailPanel) {\n this.detailPanel.locStrsChanged();\n }\n };\n MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnChanged = function (column, name, newValue) {\n var cell = this.getCellByColumn(column);\n if (!cell)\n return;\n this.updateCellOnColumnChanged(cell, name, newValue);\n };\n MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnItemValueChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n var cell = this.getCellByColumn(column);\n if (!cell)\n return;\n this.updateCellOnColumnItemValueChanged(cell, propertyName, obj, name, newValue, oldValue);\n };\n MatrixDropdownRowModelBase.prototype.onQuestionReadOnlyChanged = function (parentIsReadOnly) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].readOnly = parentIsReadOnly;\n }\n };\n MatrixDropdownRowModelBase.prototype.hasErrors = function (fireCallback, rec, raiseOnCompletedAsyncValidators) {\n var res = false;\n var cells = this.cells;\n if (!cells)\n return res;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (!question || !question.visible)\n continue;\n question.onCompletedAsyncValidators = function (hasErrors) {\n raiseOnCompletedAsyncValidators();\n };\n if (!!rec && rec.isOnValueChanged === true && question.isEmpty())\n continue;\n res = question.hasErrors(fireCallback, rec) || res;\n }\n if (this.hasPanel) {\n this.ensureDetailPanel();\n var panelHasError = this.detailPanel.hasErrors(fireCallback, false, rec);\n if (!rec.hideErroredPanel && panelHasError && fireCallback) {\n if (rec.isSingleDetailPanel) {\n rec.hideErroredPanel = true;\n }\n this.showDetailPanel();\n }\n res = panelHasError || res;\n }\n return res;\n };\n MatrixDropdownRowModelBase.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n cell.question[name] = newValue;\n };\n MatrixDropdownRowModelBase.prototype.updateCellOnColumnItemValueChanged = function (cell, propertyName, obj, name, newValue, oldValue) {\n var items = cell.question[propertyName];\n if (!Array.isArray(items))\n return;\n var val = name === \"value\" ? oldValue : obj[\"value\"];\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_6__[\"ItemValue\"].getItemByValue(items, val);\n if (!item)\n return;\n item[name] = newValue;\n };\n MatrixDropdownRowModelBase.prototype.buildCells = function (value) {\n this.isSettingValue = true;\n var columns = this.data.columns;\n for (var i = 0; i < columns.length; i++) {\n var column = columns[i];\n if (!column.isVisible)\n continue;\n var cell = this.createCell(column);\n this.cells.push(cell);\n var cellValue = this.getCellValue(value, column.name);\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(cellValue)) {\n cell.question.value = cellValue;\n var commentKey = column.name + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix;\n if (!!value && !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[commentKey])) {\n cell.question.comment = value[commentKey];\n }\n }\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.prototype.getCellValue = function (value, name) {\n if (!!this.editingObj)\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].getObjPropertyValue(this.editingObj, name);\n return !!value ? value[name] : undefined;\n };\n MatrixDropdownRowModelBase.prototype.createCell = function (column) {\n return new MatrixDropdownCell(column, this, this.data);\n };\n MatrixDropdownRowModelBase.prototype.getSurveyData = function () {\n return this;\n };\n MatrixDropdownRowModelBase.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n MatrixDropdownRowModelBase.prototype.getTextProcessor = function () {\n return this.textPreProcessor;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowIndex\", {\n get: function () {\n return !!this.data ? this.data.getRowIndex(this) + 1 : -1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"editingObj\", {\n get: function () {\n return this.editingObjValue;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.dispose = function () {\n if (!!this.editingObj) {\n this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n this.editingObjValue = null;\n }\n };\n MatrixDropdownRowModelBase.prototype.subscribeToChanges = function (value) {\n var _this = this;\n if (!value || !value.getType || !value.onPropertyChanged)\n return;\n if (value === this.editingObj)\n return;\n this.editingObjValue = value;\n this.onEditingObjPropertyChanged = function (sender, options) {\n _this.updateOnSetValue(options.name, options.newValue);\n };\n this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n };\n MatrixDropdownRowModelBase.prototype.updateOnSetValue = function (name, newValue) {\n this.isSettingValue = true;\n var questions = this.getQuestionsByName(name);\n for (var i = 0; i < questions.length; i++) {\n questions[i].value = newValue;\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.RowVariableName = \"row\";\n MatrixDropdownRowModelBase.OwnerVariableName = \"self\";\n MatrixDropdownRowModelBase.IndexVariableName = \"rowIndex\";\n MatrixDropdownRowModelBase.RowValueVariableName = \"rowValue\";\n MatrixDropdownRowModelBase.idCounter = 1;\n return MatrixDropdownRowModelBase;\n}());\n\nvar MatrixDropdownTotalRowModel = /** @class */ (function (_super) {\n __extends(MatrixDropdownTotalRowModel, _super);\n function MatrixDropdownTotalRowModel(data) {\n var _this = _super.call(this, data, null) || this;\n _this.buildCells(null);\n return _this;\n }\n MatrixDropdownTotalRowModel.prototype.createCell = function (column) {\n return new MatrixDropdownTotalCell(column, this, this.data);\n };\n MatrixDropdownTotalRowModel.prototype.setValue = function (name, newValue) {\n if (!!this.data && !this.isSettingValue) {\n this.data.onTotalValueChanged();\n }\n };\n MatrixDropdownTotalRowModel.prototype.runCondition = function (values, properties) {\n var counter = 0;\n var prevValue;\n do {\n prevValue = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.value);\n _super.prototype.runCondition.call(this, values, properties);\n counter++;\n } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(prevValue, this.value) && counter < 3);\n };\n MatrixDropdownTotalRowModel.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n cell.updateCellQuestion();\n };\n return MatrixDropdownTotalRowModel;\n}(MatrixDropdownRowModelBase));\n\nvar QuestionMatrixDropdownRenderedCell = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedCell() {\n this.minWidth = \"\";\n this.width = \"\";\n this.colSpans = 1;\n this.isActionsCell = false;\n this.className = \"\";\n this.idValue = QuestionMatrixDropdownRenderedCell.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasQuestion\", {\n get: function () {\n return !!this.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasTitle\", {\n get: function () {\n return !!this.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasPanel\", {\n get: function () {\n return !!this.panel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnTop\", {\n get: function () {\n return this.showErrorOnCore(\"top\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnBottom\", {\n get: function () {\n return this.showErrorOnCore(\"bottom\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedCell.prototype.showErrorOnCore = function (location) {\n return (this.getShowErrorLocation() == location &&\n (!this.isChoice || this.isFirstChoice));\n };\n QuestionMatrixDropdownRenderedCell.prototype.getShowErrorLocation = function () {\n return this.hasQuestion ? this.question.survey.questionErrorLocation : \"\";\n };\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"item\", {\n get: function () {\n return this.itemValue;\n },\n set: function (val) {\n this.itemValue = val;\n if (!!val) {\n val.hideCaption = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isChoice\", {\n get: function () {\n return !!this.item;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"choiceValue\", {\n get: function () {\n return this.isChoice ? this.item.value : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isCheckbox\", {\n get: function () {\n return this.isChoice && this.question.getType() == \"checkbox\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isFirstChoice\", {\n get: function () {\n return this.choiceIndex === 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"css\", {\n get: function () {\n return (this.className +\n (this.question.errors.length > 0 ? \" \" + this.question.cssError : \"\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"headers\", {\n get: function () {\n if (this.cell &&\n this.cell.column &&\n this.cell.column.isShowInMultipleColumns) {\n return this.item.locText.renderedHtml;\n }\n if (this.question && this.question.isVisible) {\n return this.question.locTitle.renderedHtml;\n }\n if (this.hasTitle) {\n return this.locTitle.renderedHtml || \"\";\n }\n return \"\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedCell.prototype.calculateFinalClassName = function (matrixCssClasses) {\n var questionCss = this.cell.question.cssClasses;\n var className = \"\";\n if (!!questionCss) {\n className = \"\";\n if (!!questionCss.itemValue) {\n className += \" \" + questionCss.itemValue;\n }\n if (!!questionCss.asCell) {\n if (!!className)\n className += \"\";\n className += questionCss.asCell;\n }\n }\n if (!className && !!matrixCssClasses) {\n className = matrixCssClasses.cell;\n }\n className +=\n this.question.errors.length > 0 ? \" \" + questionCss.hasError : \"\";\n if (this.isChoice) {\n className += \" \" + matrixCssClasses.choiceCell;\n }\n //'text-align': $data.isChoice ? 'center': ''\n return className;\n };\n QuestionMatrixDropdownRenderedCell.counter = 1;\n return QuestionMatrixDropdownRenderedCell;\n}());\n\nvar QuestionMatrixDropdownRenderedRow = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedRow() {\n this.isDetailRow = false;\n this.cells = [];\n this.className = \"\";\n this.idValue = QuestionMatrixDropdownRenderedRow.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedRow.counter = 1;\n return QuestionMatrixDropdownRenderedRow;\n}());\n\nvar QuestionMatrixDropdownRenderedTable = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownRenderedTable, _super);\n function QuestionMatrixDropdownRenderedTable(matrix) {\n var _this = _super.call(this) || this;\n _this.matrix = matrix;\n _this.hasActionCellInRowsValues = {};\n _this.createNewArray(\"rows\");\n _this.build();\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showTable\", {\n get: function () {\n return this.getPropertyValue(\"showTable\", true);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showHeader\", {\n get: function () {\n return this.getPropertyValue(\"showHeader\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnTop\", {\n get: function () {\n return this.getPropertyValue(\"showAddRowOnTop\", false);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnBottom\", {\n get: function () {\n return this.getPropertyValue(\"showAddRowOnBottom\", false);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showFooter\", {\n get: function () {\n return this.matrix.hasFooter && this.matrix.isColumnLayoutHorizontal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasFooter\", {\n get: function () {\n return !!this.footerRow;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasRemoveRows\", {\n get: function () {\n return this.hasRemoveRowsValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedTable.prototype.isRequireReset = function () {\n return (this.hasRemoveRows != this.matrix.canRemoveRows ||\n !this.matrix.isColumnLayoutHorizontal);\n };\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"headerRow\", {\n get: function () {\n return this.headerRowValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"footerRow\", {\n get: function () {\n return this.footerRowValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"rows\", {\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedTable.prototype.build = function () {\n this.hasRemoveRowsValue = this.matrix.canRemoveRows;\n //build rows now\n var rows = this.matrix.visibleRows;\n this.cssClasses = this.matrix.cssClasses;\n this.buildRowsActions();\n this.buildHeader();\n this.buildRows();\n this.buildFooter();\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.updateShowTableAndAddRow = function () {\n var showTable = this.rows.length > 0 ||\n this.matrix.isDesignMode ||\n !this.matrix.getShowColumnsIfEmpty();\n this.setPropertyValue(\"showTable\", showTable);\n var showAddRow = this.matrix.canAddRow && showTable;\n var showAddRowOnTop = showAddRow;\n var showAddRowOnBottom = showAddRow;\n if (showAddRowOnTop) {\n if (this.matrix.getAddRowLocation() === \"default\") {\n showAddRowOnTop = this.matrix.columnLayout === \"vertical\";\n }\n else {\n showAddRowOnTop = this.matrix.getAddRowLocation() !== \"bottom\";\n }\n }\n if (showAddRowOnBottom && this.matrix.getAddRowLocation() !== \"topBottom\") {\n showAddRowOnBottom = !showAddRowOnTop;\n }\n this.setPropertyValue(\"showAddRowOnTop\", showAddRowOnTop);\n this.setPropertyValue(\"showAddRowOnBottom\", showAddRowOnBottom);\n };\n QuestionMatrixDropdownRenderedTable.prototype.onAddedRow = function () {\n if (this.getRenderedDataRowCount() >= this.matrix.visibleRows.length)\n return;\n var row = this.matrix.visibleRows[this.matrix.visibleRows.length - 1];\n this.rowsActions.push(this.buildRowActions(row));\n this.addHorizontalRow(this.rows, row, this.matrix.visibleRows.length == 1 && !this.matrix.showHeader);\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRenderedDataRowCount = function () {\n var res = 0;\n for (var i = 0; i < this.rows.length; i++) {\n if (!this.rows[i].isDetailRow)\n res++;\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.onRemovedRow = function (row) {\n var rowIndex = this.getRenderedRowIndex(row);\n if (rowIndex < 0)\n return;\n this.rowsActions.splice(rowIndex, 1);\n var removeCount = 1;\n if (rowIndex < this.rows.length - 1 &&\n this.rows[rowIndex + 1].isDetailRow) {\n removeCount++;\n }\n this.rows.splice(rowIndex, removeCount);\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.onDetailPanelChangeVisibility = function (row, isShowing) {\n var rowIndex = this.getRenderedRowIndex(row);\n if (rowIndex < 0)\n return;\n var panelRowIndex = rowIndex < this.rows.length - 1 && this.rows[rowIndex + 1].isDetailRow\n ? rowIndex + 1\n : -1;\n if ((isShowing && panelRowIndex > -1) || (!isShowing && panelRowIndex < 0))\n return;\n if (isShowing) {\n var detailRow = this.createDetailPanelRow(row, this.rows[rowIndex]);\n this.rows.splice(rowIndex + 1, 0, detailRow);\n }\n else {\n this.rows.splice(panelRowIndex, 1);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRenderedRowIndex = function (row) {\n for (var i = 0; i < this.rows.length; i++) {\n if (this.rows[i].row == row)\n return i;\n }\n return -1;\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRowsActions = function () {\n this.rowsActions = [];\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n this.rowsActions.push(this.buildRowActions(rows[i]));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildHeader = function () {\n var colHeaders = this.matrix.isColumnLayoutHorizontal && this.matrix.showHeader;\n var isShown = colHeaders ||\n (this.matrix.hasRowText && !this.matrix.isColumnLayoutHorizontal);\n this.setPropertyValue(\"showHeader\", isShown);\n if (!isShown)\n return;\n this.headerRowValue = new QuestionMatrixDropdownRenderedRow();\n if (this.hasActionCellInRows(\"start\")) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n if (this.matrix.hasRowText && this.matrix.showHeader) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n if (this.matrix.isColumnLayoutHorizontal) {\n for (var i = 0; i < this.matrix.visibleColumns.length; i++) {\n var column = this.matrix.visibleColumns[i];\n if (!column.hasVisibleCell)\n continue;\n if (column.isShowInMultipleColumns) {\n this.createMutlipleColumnsHeader(column);\n }\n else {\n this.headerRow.cells.push(this.createHeaderCell(column));\n }\n }\n }\n else {\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n this.headerRow.cells.push(this.createTextCell(rows[i].locText));\n }\n if (this.matrix.hasFooter) {\n this.headerRow.cells.push(this.createTextCell(this.matrix.getFooterText()));\n }\n }\n if (this.hasActionCellInRows(\"end\")) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildFooter = function () {\n if (!this.showFooter)\n return;\n this.footerRowValue = new QuestionMatrixDropdownRenderedRow();\n if (this.hasActionCellInRows(\"start\")) {\n this.footerRow.cells.push(this.createHeaderCell(null));\n }\n if (this.matrix.hasRowText) {\n this.footerRow.cells.push(this.createTextCell(this.matrix.getFooterText()));\n }\n var cells = this.matrix.visibleTotalRow.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (!cell.column.hasVisibleCell)\n continue;\n if (cell.column.isShowInMultipleColumns) {\n this.createMutlipleColumnsFooter(this.footerRow, cell);\n }\n else {\n this.footerRow.cells.push(this.createEditCell(cell));\n }\n }\n if (this.hasActionCellInRows(\"end\")) {\n this.footerRow.cells.push(this.createHeaderCell(null));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRows = function () {\n var rows = this.matrix.isColumnLayoutHorizontal\n ? this.buildHorizontalRows()\n : this.buildVerticalRows();\n this.setPropertyValue(\"rows\", rows);\n };\n QuestionMatrixDropdownRenderedTable.prototype.hasActionCellInRows = function (location) {\n if (this.hasActionCellInRowsValues[location] === undefined) {\n var rows = this.matrix.visibleRows;\n this.hasActionCellInRowsValues[location] = false;\n for (var i = 0; i < rows.length; i++) {\n if (!this.isValueEmpty(this.getRowActions(i, location))) {\n this.hasActionCellInRowsValues[location] = true;\n break;\n }\n }\n }\n return this.hasActionCellInRowsValues[location];\n };\n QuestionMatrixDropdownRenderedTable.prototype.canRemoveRow = function (row) {\n return this.matrix.canRemoveRow(row);\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildHorizontalRows = function () {\n var rows = this.matrix.visibleRows;\n var renderedRows = [];\n for (var i = 0; i < rows.length; i++) {\n this.addHorizontalRow(renderedRows, rows[i], i == 0 && !this.matrix.showHeader);\n }\n return renderedRows;\n };\n QuestionMatrixDropdownRenderedTable.prototype.addHorizontalRow = function (renderedRows, row, useAsHeader) {\n var renderedRow = this.createHorizontalRow(row, useAsHeader);\n renderedRow.row = row;\n renderedRows.push(renderedRow);\n if (row.isDetailPanelShowing) {\n renderedRows.push(this.createDetailPanelRow(row, renderedRow));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRowActionsCell = function (rowIndex, location) {\n var rowActions = this.getRowActions(rowIndex, location);\n if (!this.isValueEmpty(rowActions)) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n var actionContainer = new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_14__[\"AdaptiveActionContainer\"]();\n actionContainer.setItems(rowActions);\n var itemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_6__[\"ItemValue\"](actionContainer);\n cell.item = itemValue;\n cell.isActionsCell = true;\n cell.className = this.cssClasses.actionsCell;\n cell.row = this.matrix.visibleRows[rowIndex];\n return cell;\n }\n return null;\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRowActions = function (rowIndex, location) {\n var actions = this.rowsActions[rowIndex];\n if (!Array.isArray(actions))\n return [];\n return actions.filter(function (action) {\n if (!action.location) {\n action.location = \"start\";\n }\n return action.location === location;\n });\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRowActions = function (row) {\n var actions = [];\n this.setDefaultRowActions(row, actions);\n if (!!this.matrix.survey) {\n actions = this.matrix.survey.getUpdatedMatrixRowActions(this.matrix, row, actions);\n }\n return actions;\n };\n QuestionMatrixDropdownRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n if (this.hasRemoveRows && this.canRemoveRow(row)) {\n actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_13__[\"Action\"]({\n id: \"remove-row\",\n location: \"end\",\n enabled: !this.matrix.isInputReadOnly,\n component: \"sv-matrix-remove-button\",\n data: { row: row, question: this.matrix },\n }));\n }\n if (row.hasPanel) {\n actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_13__[\"Action\"]({\n id: \"show-detail\",\n location: \"start\",\n component: \"sv-matrix-detail-button\",\n data: { row: row, question: this.matrix },\n }));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createHorizontalRow = function (row, useAsHeader) {\n var res = new QuestionMatrixDropdownRenderedRow();\n this.addRowActionsCell(row, res, \"start\");\n if (this.matrix.hasRowText) {\n var renderedCell = this.createTextCell(row.locText);\n renderedCell.row = row;\n res.cells.push(renderedCell);\n if (useAsHeader) {\n this.setHeaderCellWidth(null, renderedCell);\n }\n if (row.hasPanel && !!this.cssClasses.detailRowText) {\n if (!!renderedCell.className)\n renderedCell.className += \" \";\n renderedCell.className += this.cssClasses.detailRowText;\n }\n }\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n if (!cell.column.hasVisibleCell)\n continue;\n if (cell.column.isShowInMultipleColumns) {\n this.createMutlipleEditCells(res, cell);\n }\n else {\n var renderedCell = this.createEditCell(cell);\n res.cells.push(renderedCell);\n if (useAsHeader) {\n this.setHeaderCellWidth(cell.column, renderedCell);\n }\n }\n }\n this.addRowActionsCell(row, res, \"end\");\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.addRowActionsCell = function (row, renderedRow, location) {\n var rowIndex = this.matrix.visibleRows.indexOf(row);\n if (this.hasActionCellInRows(location)) {\n var actions = this.getRowActionsCell(rowIndex, location);\n if (!!actions) {\n renderedRow.cells.push(actions);\n }\n else {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.isEmpty = true;\n renderedRow.cells.push(cell);\n }\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createDetailPanelRow = function (row, renderedRow) {\n var res = new QuestionMatrixDropdownRenderedRow();\n res.row = row;\n res.className += this.cssClasses.detailRow;\n res.isDetailRow = true;\n var buttonCell = new QuestionMatrixDropdownRenderedCell();\n if (this.matrix.hasRowText) {\n buttonCell.colSpans = 2;\n }\n buttonCell.isEmpty = true;\n res.cells.push(buttonCell);\n var actionsCell = null;\n if (this.hasActionCellInRows(\"end\")) {\n actionsCell = new QuestionMatrixDropdownRenderedCell();\n actionsCell.isEmpty = true;\n }\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.panel = row.detailPanel;\n cell.colSpans =\n renderedRow.cells.length -\n buttonCell.colSpans -\n (!!actionsCell ? actionsCell.colSpans : 0);\n cell.className = this.cssClasses.detailPanelCell;\n res.cells.push(cell);\n if (!!actionsCell) {\n res.cells.push(actionsCell);\n }\n if (typeof this.matrix.onCreateDetailPanelRenderedRowCallback === \"function\") {\n this.matrix.onCreateDetailPanelRenderedRowCallback(res);\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildVerticalRows = function () {\n var columns = this.matrix.columns;\n var renderedRows = [];\n for (var i = 0; i < columns.length; i++) {\n var col = columns[i];\n if (col.isVisible && col.hasVisibleCell) {\n if (col.isShowInMultipleColumns) {\n this.createMutlipleVerticalRows(renderedRows, col, i);\n }\n else {\n renderedRows.push(this.createVerticalRow(col, i));\n }\n }\n }\n if (this.hasActionCellInRows(\"end\")) {\n renderedRows.push(this.createEndVerticalActionRow());\n }\n return renderedRows;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleVerticalRows = function (renderedRows, column, index) {\n var choices = this.getMultipleColumnChoices(column);\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n renderedRows.push(this.createVerticalRow(column, index, choices[i], i));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createVerticalRow = function (column, index, choice, choiceIndex) {\n if (choice === void 0) { choice = null; }\n if (choiceIndex === void 0) { choiceIndex = -1; }\n var res = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.showHeader) {\n var lTitle = !!choice ? choice.locText : column.locTitle;\n var hCell = this.createTextCell(lTitle);\n hCell.column = column;\n if (!choice) {\n this.setRequriedToHeaderCell(column, hCell);\n }\n res.cells.push(hCell);\n }\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n var rChoice = choice;\n var rChoiceIndex = choiceIndex >= 0 ? choiceIndex : i;\n var cell = rows[i].cells[index];\n var visChoices = !!choice ? cell.question.visibleChoices : undefined;\n if (!!visChoices && rChoiceIndex < visChoices.length) {\n rChoice = visChoices[rChoiceIndex];\n }\n var rCell = this.createEditCell(cell, rChoice);\n rCell.item = rChoice;\n rCell.choiceIndex = rChoiceIndex;\n res.cells.push(rCell);\n }\n if (this.matrix.hasTotal) {\n res.cells.push(this.createEditCell(this.matrix.visibleTotalRow.cells[index]));\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createEndVerticalActionRow = function () {\n var res = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.showHeader) {\n res.cells.push(this.createTextCell(null));\n }\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n res.cells.push(this.getRowActionsCell(i, \"end\"));\n }\n if (this.matrix.hasTotal) {\n res.cells.push(this.createTextCell(null));\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleEditCells = function (rRow, cell, isFooter) {\n if (isFooter === void 0) { isFooter = false; }\n var choices = isFooter\n ? this.getMultipleColumnChoices(cell.column)\n : cell.question.visibleChoices;\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n var rCell = this.createEditCell(cell, !isFooter ? choices[i] : undefined);\n if (!isFooter) {\n //rCell.item = choices[i];\n rCell.choiceIndex = i;\n }\n rRow.cells.push(rCell);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createEditCell = function (cell, choiceItem) {\n if (choiceItem === void 0) { choiceItem = undefined; }\n var res = new QuestionMatrixDropdownRenderedCell();\n res.cell = cell;\n res.row = cell.row;\n res.question = cell.question;\n res.matrix = this.matrix;\n res.item = choiceItem;\n res.className = res.calculateFinalClassName(this.cssClasses);\n //res.css = res.calcCss(this.cssClasses.cell);\n // var questionCss = cell.question.cssClasses;\n // var className = \"\";\n // if (!!questionCss) {\n // className = \"\";\n // if (!!questionCss.itemValue) {\n // className += \" \" + questionCss.itemValue;\n // }\n // if (!!questionCss.asCell) {\n // if (!!className) className += \"\";\n // className += questionCss.asCell;\n // }\n // }\n // if (!className && !!this.cssClasses.cell) {\n // className = this.cssClasses.cell;\n // }\n //res.className = className;\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsFooter = function (rRow, cell) {\n this.createMutlipleEditCells(rRow, cell, true);\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsHeader = function (column) {\n var choices = this.getMultipleColumnChoices(column);\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n var cell = this.createTextCell(choices[i].locText);\n this.setHeaderCell(column, cell);\n this.headerRow.cells.push(cell);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getMultipleColumnChoices = function (column) {\n var choices = column.templateQuestion.choices;\n if (!!choices && Array.isArray(choices) && choices.length == 0)\n return this.matrix.choices;\n choices = column.templateQuestion.visibleChoices;\n if (!choices || !Array.isArray(choices))\n return null;\n return choices;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createHeaderCell = function (column) {\n var cell = this.createTextCell(!!column ? column.locTitle : null);\n cell.column = column;\n this.setHeaderCell(column, cell);\n if (this.cssClasses.headerCell) {\n cell.className = this.cssClasses.headerCell;\n }\n return cell;\n };\n QuestionMatrixDropdownRenderedTable.prototype.setHeaderCell = function (column, cell) {\n this.setHeaderCellWidth(column, cell);\n this.setRequriedToHeaderCell(column, cell);\n };\n QuestionMatrixDropdownRenderedTable.prototype.setHeaderCellWidth = function (column, cell) {\n cell.minWidth = column != null ? this.matrix.getColumnWidth(column) : \"\";\n cell.width = column != null ? column.width : this.matrix.getRowTitleWidth();\n };\n QuestionMatrixDropdownRenderedTable.prototype.setRequriedToHeaderCell = function (column, cell) {\n if (!!column && column.isRequired && this.matrix.survey) {\n cell.requiredText = this.matrix.survey.requiredText;\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createRemoveRowCell = function (row) {\n var res = new QuestionMatrixDropdownRenderedCell();\n res.row = row;\n res.isRemoveRow = this.canRemoveRow(row);\n if (!!this.cssClasses.cell) {\n res.className = this.cssClasses.cell;\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createTextCell = function (locTitle) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.locTitle = locTitle;\n if (!!this.cssClasses.cell) {\n cell.className = this.cssClasses.cell;\n }\n return cell;\n };\n return QuestionMatrixDropdownRenderedTable;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"]));\n\n/**\n * A base class for matrix dropdown and matrix dynamic questions.\n */\nvar QuestionMatrixDropdownModelBase = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownModelBase, _super);\n function QuestionMatrixDropdownModelBase(name) {\n var _this = _super.call(this, name) || this;\n _this.isRowChanging = false;\n _this.lockResetRenderedTable = false;\n _this.isDoingonAnyValueChanged = false;\n _this.createItemValues(\"choices\");\n _this.createLocalizableString(\"optionsCaption\", _this);\n _this.createLocalizableString(\"keyDuplicationError\", _this);\n _this.detailPanelValue = _this.createNewDetailPanel();\n _this.detailPanel.selectedElementInDesign = _this;\n _this.detailPanel.renderWidth = \"100%\";\n _this.registerFunctionOnPropertyValueChanged(\"columns\", function (newColumns) {\n _this.updateColumnsIndexes(newColumns);\n _this.generatedTotalRow = null;\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertyValueChanged(\"cellType\", function () {\n _this.updateColumnsCellType();\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"optionsCaption\", \"columnColCount\", \"rowTitleWidth\", \"choices\"], function () {\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertiesValueChanged([\n \"columnLayout\",\n \"addRowLocation\",\n \"hideColumnsIfEmpty\",\n \"showHeader\",\n \"minRowCount\",\n \"isReadOnly\",\n \"rowCount\",\n \"hasFooter\",\n \"detailPanelMode\",\n ], function () {\n _this.resetRenderedTable();\n });\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownModelBase, \"defaultCellType\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType = val;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) {\n var colNames = _questionfactory__WEBPACK_IMPORTED_MODULE_8__[\"QuestionFactory\"].DefaultColums;\n for (var i = 0; i < colNames.length; i++)\n matrix.addColumn(colNames[i]);\n };\n QuestionMatrixDropdownModelBase.prototype.createColumnValues = function () {\n var _this = this;\n return this.createNewArray(\"columns\", function (item) {\n item.colOwner = _this;\n }, function (item) {\n item.colOwner = null;\n });\n };\n QuestionMatrixDropdownModelBase.prototype.getType = function () {\n return \"matrixdropdownbase\";\n };\n QuestionMatrixDropdownModelBase.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.clearGeneratedRows();\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isRowsDynamic\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n if (item.ownerPropertyName === \"choices\") {\n this.clearRowsAndResetRenderedTable();\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnLayout\", {\n /**\n * Set columnLayout to 'vertical' to place columns vertically and rows horizontally. It makes sense when we have many columns and few rows.\n * @see columns\n * @see rowCount\n */\n get: function () {\n return this.getPropertyValue(\"columnLayout\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnLayout\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnsLocation\", {\n get: function () {\n return this.columnLayout;\n },\n set: function (val) {\n this.columnLayout = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isColumnLayoutHorizontal\", {\n /**\n * Returns true if columns are located horizontally\n * @see columnLayout\n */\n get: function () {\n return this.columnLayout != \"vertical\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanelMode\", {\n /**\n * Set the value to \"underRow\" to show the detailPanel under the row.\n */\n get: function () {\n return this.getPropertyValue(\"detailPanelMode\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"detailPanelMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanel\", {\n /**\n * The detail template Panel. This panel is used as a template on creating detail panel for a row.\n * @see detailElements\n * @see detailPanelMode\n */\n get: function () {\n return this.detailPanelValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getPanel = function () {\n return this.detailPanel;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailElements\", {\n /**\n * The template Panel elements, questions and panels.\n * @see detailPanel\n * @see detailPanelMode\n */\n get: function () {\n return this.detailPanel.elements;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.createNewDetailPanel = function () {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasRowText\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getFooterText = function () {\n return null;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canAddRow\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canRemoveRows\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.canRemoveRow = function (row) {\n return true;\n };\n QuestionMatrixDropdownModelBase.prototype.onRowsChanged = function () {\n this.resetRenderedTable();\n _super.prototype.onRowsChanged.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.onStartRowAddingRemoving = function () {\n this.lockResetRenderedTable = true;\n };\n QuestionMatrixDropdownModelBase.prototype.onEndRowAdding = function () {\n this.lockResetRenderedTable = false;\n if (!this.renderedTable)\n return;\n if (this.renderedTable.isRequireReset()) {\n this.resetRenderedTable();\n }\n else {\n this.renderedTable.onAddedRow();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onEndRowRemoving = function (row) {\n this.lockResetRenderedTable = false;\n if (this.renderedTable.isRequireReset()) {\n this.resetRenderedTable();\n }\n else {\n if (!!row) {\n this.renderedTable.onRemovedRow(row);\n }\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTableValue\", {\n get: function () {\n return this.getPropertyValue(\"renderedTable\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"renderedTable\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.clearRowsAndResetRenderedTable = function () {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n this.fireCallback(this.columnsChangedCallback);\n };\n QuestionMatrixDropdownModelBase.prototype.resetRenderedTable = function () {\n if (this.lockResetRenderedTable || this.isLoadingFromJson)\n return;\n this.renderedTableValue = null;\n this.fireCallback(this.onRenderedTableResetCallback);\n };\n QuestionMatrixDropdownModelBase.prototype.clearGeneratedRows = function () {\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].dispose();\n }\n _super.prototype.clearGeneratedRows.call(this);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTable\", {\n get: function () {\n if (!this.renderedTableValue) {\n this.renderedTableValue = this.createRenderedTable();\n if (!!this.onRenderedTableCreatedCallback) {\n this.onRenderedTableCreatedCallback(this.renderedTableValue);\n }\n }\n return this.renderedTableValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.createRenderedTable = function () {\n return new QuestionMatrixDropdownRenderedTable(this);\n };\n QuestionMatrixDropdownModelBase.prototype.onMatrixRowCreated = function (row) {\n if (!this.survey)\n return;\n var options = {\n rowValue: row.value,\n row: row,\n column: null,\n columnName: null,\n cell: null,\n cellQuestion: null,\n value: null,\n };\n for (var i = 0; i < this.visibleColumns.length; i++) {\n options.column = this.visibleColumns[i];\n options.columnName = options.column.name;\n var cell = row.cells[i];\n options.cell = cell;\n options.cellQuestion = cell.question;\n options.value = cell.value;\n if (!!this.onCellCreatedCallback) {\n this.onCellCreatedCallback(options);\n }\n this.survey.matrixCellCreated(this, options);\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"cellType\", {\n /**\n * Use this property to change the default cell type.\n */\n get: function () {\n return this.getPropertyValue(\"cellType\", _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType);\n },\n set: function (val) {\n val = val.toLowerCase();\n this.setPropertyValue(\"cellType\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.updateColumnsCellType = function () {\n for (var i = 0; i < this.columns.length; i++) {\n this.columns[i].defaultCellTypeChanged();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.updateColumnsIndexes = function (cols) {\n for (var i = 0; i < cols.length; i++) {\n cols[i].setIndex(i);\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnColCount\", {\n /**\n * The default column count for radiogroup and checkbox cell types.\n */\n get: function () {\n return this.getPropertyValue(\"columnColCount\", 0);\n },\n set: function (value) {\n if (value < 0 || value > 4)\n return;\n this.setPropertyValue(\"columnColCount\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnMinWidth\", {\n /**\n * Use this property to set the minimum column width.\n */\n get: function () {\n return this.getPropertyValue(\"columnMinWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnMinWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"horizontalScroll\", {\n /**\n * Set this property to true to show the horizontal scroll.\n */\n get: function () {\n return this.getPropertyValue(\"horizontalScroll\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"horizontalScroll\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getRequiredText = function () {\n return this.survey ? this.survey.requiredText : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnPropertyChanged = function (column, name, newValue) {\n this.updateHasFooter();\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].updateCellQuestionOnColumnChanged(column, name, newValue);\n }\n if (!!this.generatedTotalRow) {\n this.generatedTotalRow.updateCellQuestionOnColumnChanged(column, name, newValue);\n }\n this.onColumnsChanged();\n if (name == \"isRequired\") {\n this.resetRenderedTable();\n }\n if (column.isShowInMultipleColumns) {\n this.onShowInMultipleColumnsChanged(column);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnItemValuePropertyChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].updateCellQuestionOnColumnItemValueChanged(column, propertyName, obj, name, newValue, oldValue);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onShowInMultipleColumnsChanged = function (column) {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnCellTypeChanged = function (column) {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n };\n QuestionMatrixDropdownModelBase.prototype.getRowTitleWidth = function () {\n return \"\";\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasFooter\", {\n get: function () {\n return this.getPropertyValue(\"hasFooter\", false);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getAddRowLocation = function () {\n return \"default\";\n };\n QuestionMatrixDropdownModelBase.prototype.getShowColumnsIfEmpty = function () {\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.updateShowTableAndAddRow = function () {\n if (!!this.renderedTable) {\n this.renderedTable.updateShowTableAndAddRow();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.updateHasFooter = function () {\n this.setPropertyValue(\"hasFooter\", this.hasTotal);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasTotal\", {\n get: function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].hasTotal)\n return true;\n }\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getCellType = function () {\n return this.cellType;\n };\n QuestionMatrixDropdownModelBase.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var columnName = \"\";\n for (var i = path.length - 1; i >= 0; i--) {\n if (path[i] == \".\")\n break;\n columnName = path[i] + columnName;\n }\n var column = this.getColumnByName(columnName);\n if (!column)\n return null;\n var question = column.createCellQuestion(null);\n if (!question)\n return null;\n return question.getConditionJson(operator);\n };\n QuestionMatrixDropdownModelBase.prototype.clearIncorrectValues = function () {\n var rows = this.visibleRows;\n if (!rows)\n return;\n for (var i = 0; i < rows.length; i++) {\n rows[i].clearIncorrectValues(this.getRowValue(i));\n }\n };\n QuestionMatrixDropdownModelBase.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n if (!!this.generatedVisibleRows) {\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n for (var j = 0; j < row.cells.length; j++) {\n row.cells[j].question.clearErrors();\n }\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n var counter = 0;\n var prevTotalValue;\n do {\n prevTotalValue = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.totalValue);\n this.runCellsCondition(values, properties);\n this.runTotalsCondition(values, properties);\n counter++;\n } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(prevTotalValue, this.totalValue) &&\n counter < 3);\n };\n QuestionMatrixDropdownModelBase.prototype.shouldRunColumnExpression = function () {\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.runCellsCondition = function (values, properties) {\n if (!this.generatedVisibleRows)\n return;\n var newValues = this.getRowConditionValues(values);\n var rows = this.generatedVisibleRows;\n for (var i = 0; i < rows.length; i++) {\n rows[i].runCondition(newValues, properties);\n }\n this.checkColumnsVisibility();\n };\n QuestionMatrixDropdownModelBase.prototype.checkColumnsVisibility = function () {\n var hasChanged = false;\n for (var i = 0; i < this.visibleColumns.length; i++) {\n if (!this.visibleColumns[i].visibleIf)\n continue;\n hasChanged =\n this.isColumnVisibilityChanged(this.visibleColumns[i]) || hasChanged;\n }\n if (hasChanged) {\n this.resetRenderedTable();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.isColumnVisibilityChanged = function (column) {\n var curVis = column.hasVisibleCell;\n var hasVisCell = false;\n var rows = this.generatedVisibleRows;\n for (var i = 0; i < rows.length; i++) {\n var cell = rows[i].cells[column.index];\n if (!!cell && !!cell.question && cell.question.isVisible) {\n hasVisCell = true;\n break;\n }\n }\n if (curVis != hasVisCell) {\n column.hasVisibleCell = hasVisCell;\n }\n return curVis != hasVisCell;\n };\n QuestionMatrixDropdownModelBase.prototype.runTotalsCondition = function (values, properties) {\n if (!this.generatedTotalRow)\n return;\n this.generatedTotalRow.runCondition(this.getRowConditionValues(values), properties);\n };\n QuestionMatrixDropdownModelBase.prototype.getRowConditionValues = function (values) {\n var newValues = values;\n if (!newValues)\n newValues = {};\n /*\n var newValues: { [index: string]: any } = {};\n if (values && values instanceof Object) {\n newValues = JSON.parse(JSON.stringify(values));\n }\n */\n var totalRow = {};\n if (!this.isValueEmpty(this.totalValue)) {\n totalRow = JSON.parse(JSON.stringify(this.totalValue));\n }\n newValues[\"row\"] = {};\n newValues[\"totalRow\"] = totalRow;\n return newValues;\n };\n QuestionMatrixDropdownModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n var columns = this.columns;\n for (var i = 0; i < columns.length; i++) {\n columns[i].locStrsChanged();\n }\n var rows = this.generatedVisibleRows;\n if (!rows)\n return;\n for (var i = 0; i < rows.length; i++) {\n rows[i].locStrsChanged();\n }\n if (!!this.generatedTotalRow) {\n this.generatedTotalRow.locStrsChanged();\n }\n };\n /**\n * Returns the column by it's name. Returns null if a column with this name doesn't exist.\n * @param column\n */\n QuestionMatrixDropdownModelBase.prototype.getColumnByName = function (columnName) {\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].name == columnName)\n return this.columns[i];\n }\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnName = function (columnName) {\n return this.getColumnByName(columnName);\n };\n /**\n * Returns the column width.\n * @param column\n */\n QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) {\n return column.minWidth ? column.minWidth : this.columnMinWidth;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"choices\", {\n /**\n * The default choices for dropdown, checkbox and radiogroup cell types.\n */\n get: function () {\n return this.getPropertyValue(\"choices\");\n },\n set: function (val) {\n this.setPropertyValue(\"choices\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"optionsCaption\", {\n /**\n * The default options caption for dropdown cell type.\n */\n get: function () {\n return this.getLocalizableStringText(\"optionsCaption\", _surveyStrings__WEBPACK_IMPORTED_MODULE_7__[\"surveyLocalization\"].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"keyDuplicationError\", {\n /**\n * The duplication value error text. Set it to show the text different from the default.\n * @see MatrixDropdownColumn.isUnique\n */\n get: function () {\n return this.getLocalizableStringText(\"keyDuplicationError\", _surveyStrings__WEBPACK_IMPORTED_MODULE_7__[\"surveyLocalization\"].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"storeOthersAsComment\", {\n get: function () {\n return !!this.survey ? this.survey.storeOthersAsComment : false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) {\n if (title === void 0) { title = null; }\n var column = new MatrixDropdownColumn(name, title);\n this.columns.push(column);\n return column;\n };\n QuestionMatrixDropdownModelBase.prototype.getVisibleRows = function () {\n var _this = this;\n if (this.isLoadingFromJson)\n return null;\n if (!this.generatedVisibleRows) {\n this.generatedVisibleRows = this.generateRows();\n this.generatedVisibleRows.forEach(function (row) { return _this.onMatrixRowCreated(row); });\n if (this.data) {\n this.runCellsCondition(this.data.getFilteredValues(), this.data.getFilteredProperties());\n }\n this.updateValueOnRowsGeneration(this.generatedVisibleRows);\n this.updateIsAnswered();\n }\n return this.generatedVisibleRows;\n };\n QuestionMatrixDropdownModelBase.prototype.updateValueOnRowsGeneration = function (rows) {\n var oldValue = this.createNewValue(true);\n var newValue = this.createNewValue();\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (!!row.editingObj)\n continue;\n var rowValue = this.getRowValue(i);\n var rValue = row.value;\n if (this.isTwoValueEquals(rowValue, rValue))\n continue;\n newValue = this.getNewValueOnRowChanged(row, \"\", rValue, false, newValue)\n .value;\n }\n if (this.isTwoValueEquals(oldValue, newValue))\n return;\n this.isRowChanging = true;\n this.setNewValue(newValue);\n this.isRowChanging = false;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"totalValue\", {\n get: function () {\n if (!this.hasTotal || !this.visibleTotalRow)\n return {};\n return this.visibleTotalRow.value;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getVisibleTotalRow = function () {\n if (this.isLoadingFromJson)\n return null;\n if (this.hasTotal) {\n if (!this.generatedTotalRow) {\n this.generatedTotalRow = this.generateTotalRow();\n if (this.data) {\n var properties = { survey: this.survey };\n this.runTotalsCondition(this.data.getAllValues(), properties);\n }\n }\n }\n else {\n this.generatedTotalRow = null;\n }\n return this.generatedTotalRow;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"visibleTotalRow\", {\n get: function () {\n return this.getVisibleTotalRow();\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.updateColumnsIndexes(this.columns);\n this.clearGeneratedRows();\n this.generatedTotalRow = null;\n this.updateHasFooter();\n };\n /**\n * Returns the row value. If the row value is empty, the object is empty: {}.\n * @param rowIndex row index from 0 to visible row count - 1.\n */\n QuestionMatrixDropdownModelBase.prototype.getRowValue = function (rowIndex) {\n if (rowIndex < 0)\n return null;\n var visRows = this.visibleRows;\n if (rowIndex >= visRows.length)\n return null;\n var newValue = this.createNewValue();\n return this.getRowValueCore(visRows[rowIndex], newValue);\n };\n QuestionMatrixDropdownModelBase.prototype.checkIfValueInRowDuplicated = function (checkedRow, cellQuestion) {\n if (!this.generatedVisibleRows)\n return false;\n var res = false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n if (checkedRow === row)\n continue;\n if (row.getValue(cellQuestion.name) == cellQuestion.value) {\n res = true;\n break;\n }\n }\n if (res) {\n this.addDuplicationError(cellQuestion);\n }\n else {\n cellQuestion.clearErrors();\n }\n return res;\n };\n /**\n * Set the row value.\n * @param rowIndex row index from 0 to visible row count - 1.\n * @param rowValue an object {\"column name\": columnValue,... }\n */\n QuestionMatrixDropdownModelBase.prototype.setRowValue = function (rowIndex, rowValue) {\n if (rowIndex < 0)\n return null;\n var visRows = this.visibleRows;\n if (rowIndex >= visRows.length)\n return null;\n visRows[rowIndex].value = rowValue;\n this.onRowChanged(visRows[rowIndex], \"\", rowValue, false);\n };\n QuestionMatrixDropdownModelBase.prototype.generateRows = function () {\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.generateTotalRow = function () {\n return new MatrixDropdownTotalRowModel(this);\n };\n QuestionMatrixDropdownModelBase.prototype.createNewValue = function (nullOnEmpty) {\n if (nullOnEmpty === void 0) { nullOnEmpty = false; }\n var res = !this.value ? {} : this.createValueCopy();\n if (nullOnEmpty && this.isMatrixValueEmpty(res))\n return null;\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowValueCore = function (row, questionValue, create) {\n if (create === void 0) { create = false; }\n var result = !!questionValue && !!questionValue[row.rowName]\n ? questionValue[row.rowName]\n : null;\n if (!result && create) {\n result = {};\n if (!!questionValue) {\n questionValue[row.rowName] = result;\n }\n }\n return result;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowObj = function (row) {\n var obj = this.getRowValueCore(row, this.value);\n return !!obj && !!obj.getType ? obj : null;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowDisplayValue = function (keysAsText, row, rowValue) {\n if (!rowValue)\n return rowValue;\n if (!!row.editingObj)\n return rowValue;\n var keys = Object.keys(rowValue);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var question = row.getQuestionByName(key);\n if (!question) {\n question = this.getSharedQuestionByName(key, row);\n }\n if (!!question) {\n var displayvalue = question.getDisplayValue(keysAsText, rowValue[key]);\n if (keysAsText && !!question.title && question.title !== key) {\n rowValue[question.title] = displayvalue;\n delete rowValue[key];\n }\n else {\n rowValue[key] = displayvalue;\n }\n }\n }\n return rowValue;\n };\n QuestionMatrixDropdownModelBase.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n questionPlainData.isNode = true;\n questionPlainData.data = this.visibleRows.map(function (row) {\n var rowDataItem = {\n name: row.rowName,\n title: row.text,\n value: row.value,\n displayValue: _this.getRowDisplayValue(false, row, row.value),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: true,\n data: row.cells\n .map(function (cell) {\n return cell.question.getPlainData(options);\n })\n .filter(function (d) { return !!d; }),\n };\n (options.calculations || []).forEach(function (calculation) {\n rowDataItem[calculation.propertyName] = row[calculation.propertyName];\n });\n return rowDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionMatrixDropdownModelBase.prototype.getProgressInfo = function () {\n return _survey_element__WEBPACK_IMPORTED_MODULE_4__[\"SurveyElement\"].getProgressInfoByElements(this.getCellQuestions(), this.isRequired);\n };\n QuestionMatrixDropdownModelBase.prototype.getCellQuestions = function () {\n var rows = this.visibleRows;\n if (!rows)\n return [];\n var questions = [];\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n questions.push(row.cells[j].question);\n }\n }\n return questions;\n };\n QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { };\n QuestionMatrixDropdownModelBase.prototype.onSetQuestionValue = function () {\n if (this.isRowChanging)\n return;\n this.onBeforeValueChanged(this.value);\n if (!this.generatedVisibleRows || this.generatedVisibleRows.length == 0)\n return;\n this.isRowChanging = true;\n var val = this.createNewValue();\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n this.generatedVisibleRows[i].value = this.getRowValueCore(row, val);\n }\n this.isRowChanging = false;\n };\n QuestionMatrixDropdownModelBase.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, false);\n this.onSetQuestionValue();\n this.updateIsAnswered();\n };\n QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (!rows)\n return true;\n for (var i = 0; i < rows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n var question = cells[colIndex].question;\n if (question &&\n (!question.supportGoNextPageAutomatic() || !question.value))\n return false;\n }\n }\n return true;\n };\n QuestionMatrixDropdownModelBase.prototype.getContainsErrors = function () {\n return (_super.prototype.getContainsErrors.call(this) ||\n this.checkForAnswersOrErrors(function (question) { return question.containsErrors; }, false));\n };\n QuestionMatrixDropdownModelBase.prototype.getIsAnswered = function () {\n return (_super.prototype.getIsAnswered.call(this) &&\n this.checkForAnswersOrErrors(function (question) { return question.isAnswered; }, true));\n };\n QuestionMatrixDropdownModelBase.prototype.checkForAnswersOrErrors = function (predicate, every) {\n if (every === void 0) { every = false; }\n var rows = this.generatedVisibleRows;\n if (!rows)\n return false;\n for (var i = 0; i < rows.length; i++) {\n var cells = rows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (question && question.isVisible)\n if (predicate(question)) {\n if (!every)\n return true;\n }\n else {\n if (every)\n return false;\n }\n }\n }\n return every ? true : false;\n };\n QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var errosInRows = this.hasErrorInRows(fireCallback, rec);\n var isDuplicated = this.isValueDuplicated();\n return _super.prototype.hasErrors.call(this, fireCallback, rec) || errosInRows || isDuplicated;\n };\n QuestionMatrixDropdownModelBase.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n if (!this.generatedVisibleRows)\n return false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (!!question && question.isRunningValidators)\n return true;\n }\n }\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n var rows = this.generatedVisibleRows;\n if (rows === null)\n return result;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var errors = row.cells[j].question.getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n }\n return result;\n };\n QuestionMatrixDropdownModelBase.prototype.hasErrorInRows = function (fireCallback, rec) {\n var _this = this;\n if (!this.generatedVisibleRows)\n return false;\n var res = false;\n if (!rec)\n rec = {};\n rec.isSingleDetailPanel = this.detailPanelMode === \"underRowSingle\";\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n res =\n this.generatedVisibleRows[i].hasErrors(fireCallback, rec, function () {\n _this.raiseOnCompletedAsyncValidators();\n }) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueDuplicated = function () {\n if (!this.generatedVisibleRows)\n return false;\n var columns = this.getUniqueColumns();\n var res = false;\n for (var i = 0; i < columns.length; i++) {\n res = this.isValueInColumnDuplicated(columns[i]) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueInColumnDuplicated = function (column) {\n var keyValues = [];\n var res = false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n res =\n this.isValueDuplicatedInRow(this.generatedVisibleRows[i], column, keyValues) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.getUniqueColumns = function () {\n var res = new Array();\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].isUnique) {\n res.push(this.columns[i]);\n }\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueDuplicatedInRow = function (row, column, keyValues) {\n var question = row.getQuestionByColumn(column);\n if (!question || question.isEmpty())\n return false;\n var value = question.value;\n for (var i = 0; i < keyValues.length; i++) {\n if (value == keyValues[i]) {\n this.addDuplicationError(question);\n return true;\n }\n }\n keyValues.push(value);\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.addDuplicationError = function (question) {\n question.addError(new _error__WEBPACK_IMPORTED_MODULE_12__[\"KeyDuplicationError\"](this.keyDuplicationError, this));\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () {\n var question = this.getFirstCellQuestion(false);\n return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () {\n var question = this.getFirstCellQuestion(true);\n return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) {\n if (!this.generatedVisibleRows)\n return null;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!onError)\n return cells[colIndex].question;\n if (cells[colIndex].question.currentErrorCount > 0)\n return cells[colIndex].question;\n }\n }\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.onReadOnlyChanged = function () {\n _super.prototype.onReadOnlyChanged.call(this);\n if (!this.generateRows)\n return;\n for (var i = 0; i < this.visibleRows.length; i++) {\n this.visibleRows[i].onQuestionReadOnlyChanged(this.isReadOnly);\n }\n };\n //IMatrixDropdownData\n QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) {\n return this.createQuestionCore(row, column);\n };\n QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) {\n var question = column.createCellQuestion(row);\n if (this.isReadOnly) {\n question.readOnly = true;\n }\n question.setSurveyImpl(row);\n question.setParentQuestion(this);\n return question;\n };\n QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) {\n if (!newValue)\n return newValue;\n delete newValue[row.rowName];\n return this.isObject(newValue) && Object.keys(newValue).length == 0\n ? null\n : newValue;\n };\n QuestionMatrixDropdownModelBase.prototype.onAnyValueChanged = function (name) {\n if (this.isLoadingFromJson ||\n this.isDoingonAnyValueChanged ||\n !this.generatedVisibleRows)\n return;\n this.isDoingonAnyValueChanged = true;\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n rows[i].onAnyValueChanged(name);\n }\n var totalRow = this.visibleTotalRow;\n if (!!totalRow) {\n totalRow.onAnyValueChanged(name);\n }\n this.isDoingonAnyValueChanged = false;\n };\n QuestionMatrixDropdownModelBase.prototype.isObject = function (value) {\n return value !== null && typeof value === \"object\";\n };\n QuestionMatrixDropdownModelBase.prototype.getOnCellValueChangedOptions = function (row, columnName, rowValue) {\n var getQuestion = function (colName) {\n for (var i = 0; i < row.cells.length; i++) {\n var col = row.cells[i].column;\n if (!!col && col.name === colName) {\n return row.cells[i].question;\n }\n }\n return null;\n };\n return {\n row: row,\n columnName: columnName,\n rowValue: rowValue,\n value: !!rowValue ? rowValue[columnName] : null,\n getCellQuestion: getQuestion,\n };\n };\n QuestionMatrixDropdownModelBase.prototype.onCellValueChanged = function (row, columnName, rowValue) {\n if (!this.survey)\n return;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n if (!!this.onCellValueChangedCallback) {\n this.onCellValueChangedCallback(options);\n }\n this.survey.matrixCellValueChanged(this, options);\n };\n QuestionMatrixDropdownModelBase.prototype.validateCell = function (row, columnName, rowValue) {\n if (!this.survey)\n return;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n return this.survey.matrixCellValidate(this, options);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isValidateOnValueChanging\", {\n get: function () {\n return !!this.survey ? this.survey.isValidateOnValueChanging : false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.onRowChanging = function (row, columnName, rowValue) {\n if (!this.survey)\n return !!rowValue ? rowValue[columnName] : null;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n var oldRowValue = this.getRowValueCore(row, this.createNewValue(), true);\n options.oldValue = !!oldRowValue ? oldRowValue[columnName] : null;\n this.survey.matrixCellValueChanging(this, options);\n return options.value;\n };\n QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, columnName, newRowValue, isDeletingValue) {\n var rowObj = !!columnName ? this.getRowObj(row) : null;\n if (!!rowObj) {\n var columnValue = null;\n if (!!newRowValue && !isDeletingValue) {\n columnValue = newRowValue[columnName];\n }\n this.isRowChanging = true;\n rowObj[columnName] = columnValue;\n this.isRowChanging = false;\n this.onCellValueChanged(row, columnName, rowObj);\n }\n else {\n var oldValue = this.createNewValue(true);\n var combine = this.getNewValueOnRowChanged(row, columnName, newRowValue, isDeletingValue, this.createNewValue());\n if (this.isTwoValueEquals(oldValue, combine.value))\n return;\n this.isRowChanging = true;\n this.setNewValue(combine.value);\n this.isRowChanging = false;\n if (columnName) {\n this.onCellValueChanged(row, columnName, combine.rowValue);\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getNewValueOnRowChanged = function (row, columnName, newRowValue, isDeletingValue, newValue) {\n var rowValue = this.getRowValueCore(row, newValue, true);\n if (isDeletingValue) {\n delete rowValue[columnName];\n }\n for (var i = 0; i < row.cells.length; i++) {\n var key = row.cells[i].question.getValueName();\n delete rowValue[key];\n }\n if (newRowValue) {\n newRowValue = JSON.parse(JSON.stringify(newRowValue));\n for (var key in newRowValue) {\n if (!this.isValueEmpty(newRowValue[key])) {\n rowValue[key] = newRowValue[key];\n }\n }\n }\n if (this.isObject(rowValue) && Object.keys(rowValue).length === 0) {\n newValue = this.deleteRowValue(newValue, row);\n }\n return { value: newValue, rowValue: rowValue };\n };\n QuestionMatrixDropdownModelBase.prototype.getRowIndex = function (row) {\n if (!this.generatedVisibleRows)\n return -1;\n return this.visibleRows.indexOf(row);\n };\n QuestionMatrixDropdownModelBase.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n if (this.detailPanelMode == \"none\")\n return _super.prototype.getElementsInDesign.call(this, includeHidden);\n return includeHidden ? [this.detailPanel] : this.detailElements;\n };\n QuestionMatrixDropdownModelBase.prototype.hasDetailPanel = function (row) {\n if (this.detailPanelMode == \"none\")\n return false;\n if (this.isDesignMode)\n return true;\n if (!!this.onHasDetailPanelCallback)\n return this.onHasDetailPanelCallback(row);\n return this.detailElements.length > 0;\n };\n QuestionMatrixDropdownModelBase.prototype.getIsDetailPanelShowing = function (row) {\n if (this.detailPanelMode == \"none\")\n return false;\n if (this.isDesignMode) {\n var res = this.visibleRows.indexOf(row) == 0;\n if (res) {\n if (!row.detailPanel) {\n row.showDetailPanel();\n }\n }\n return res;\n }\n return this.getPropertyValue(\"isRowShowing\" + row.id, false);\n };\n QuestionMatrixDropdownModelBase.prototype.setIsDetailPanelShowing = function (row, val) {\n if (val == this.getIsDetailPanelShowing(row))\n return;\n this.setPropertyValue(\"isRowShowing\" + row.id, val);\n this.updateDetailPanelButtonCss(row);\n if (!!this.renderedTable) {\n this.renderedTable.onDetailPanelChangeVisibility(row, val);\n }\n if (val && this.detailPanelMode === \"underRowSingle\") {\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].id !== row.id && rows[i].isDetailPanelShowing) {\n rows[i].hideDetailPanel();\n }\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getDetailPanelButtonCss = function (row) {\n var res = this.getPropertyValue(\"detailButtonCss\" + row.id);\n if (!!res)\n return res;\n var res = this.cssClasses.detailButton;\n return !!res ? res : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.getDetailPanelIconCss = function (row) {\n var res = this.getPropertyValue(\"detailIconCss\" + row.id);\n if (!!res)\n return res;\n var res = this.cssClasses.detailIcon;\n return !!res ? res : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.updateDetailPanelButtonCss = function (row) {\n var classes = this.cssClasses;\n var icon = classes.detailIcon;\n if (!icon)\n icon = \"\";\n var button = classes.detailButton;\n if (!button)\n button = \"\";\n if (this.getIsDetailPanelShowing(row)) {\n if (!!classes.detailIconExpanded)\n icon += \" \" + classes.detailIconExpanded;\n if (!!classes.detailButtonExpanded)\n button += \" \" + classes.detailButtonExpanded;\n }\n this.setPropertyValue(\"detailIconCss\" + row.id, icon);\n this.setPropertyValue(\"detailButtonCss\" + row.id, button);\n };\n QuestionMatrixDropdownModelBase.prototype.createRowDetailPanel = function (row) {\n if (this.isDesignMode)\n return this.detailPanel;\n var panel = this.createNewDetailPanel();\n var json = this.detailPanel.toJSON();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, panel);\n panel.renderWidth = \"100%\";\n panel.updateCustomWidgets();\n if (!!this.onCreateDetailPanelCallback) {\n this.onCreateDetailPanelCallback(row, panel);\n }\n return panel;\n };\n QuestionMatrixDropdownModelBase.prototype.getSharedQuestionByName = function (columnName, row) {\n if (!this.survey || !this.valueName)\n return null;\n var index = this.getRowIndex(row);\n if (index < 0)\n return null;\n return (this.survey.getQuestionByValueNameFromArray(this.valueName, columnName, index));\n };\n QuestionMatrixDropdownModelBase.prototype.onTotalValueChanged = function () {\n if (!!this.data &&\n !!this.visibleTotalRow &&\n !this.isLoadingFromJson &&\n !this.isSett &&\n !this.isReadOnly) {\n this.data.setValue(this.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixTotalValuePostFix, this.totalValue, false);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getQuestionFromArray = function (name, index) {\n if (index >= this.visibleRows.length)\n return null;\n return this.visibleRows[index].getQuestionByName(name);\n };\n QuestionMatrixDropdownModelBase.prototype.isMatrixValueEmpty = function (val) {\n if (!val)\n return;\n if (Array.isArray(val)) {\n for (var i = 0; i < val.length; i++) {\n if (this.isObject(val[i]) && Object.keys(val[i]).length > 0)\n return false;\n }\n return true;\n }\n return Object.keys(val).length == 0;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"SurveyModel\", {\n get: function () {\n return this.survey;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getCellTemplateData = function (cell) {\n // return cell.cell.column.templateQuestion;\n return this.SurveyModel.getMatrixCellTemplateData(cell);\n };\n QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"cell\");\n };\n QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"cell\");\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"column-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"column-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"row-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"row-header\");\n };\n return QuestionMatrixDropdownModelBase;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_1__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdropdowncolumn\", [\n { name: \"!name\", isUnique: true },\n { name: \"title\", serializationProperty: \"locTitle\" },\n {\n name: \"cellType\",\n default: \"default\",\n choices: function () {\n var res = MatrixDropdownColumn.getColumnTypes();\n res.splice(0, 0, \"default\");\n return res;\n },\n },\n { name: \"colCount\", default: -1, choices: [-1, 0, 1, 2, 3, 4] },\n \"isRequired:boolean\",\n \"isUnique:boolean\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n \"readOnly:boolean\",\n \"minWidth\",\n \"width\",\n \"visibleIf:condition\",\n \"enableIf:condition\",\n \"requiredIf:condition\",\n {\n name: \"showInMultipleColumns:boolean\",\n dependsOn: \"cellType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isSupportMultipleColumns;\n },\n },\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n {\n name: \"totalType\",\n default: \"none\",\n choices: [\"none\", \"sum\", \"count\", \"min\", \"max\", \"avg\"],\n },\n \"totalExpression:expression\",\n { name: \"totalFormat\", serializationProperty: \"locTotalFormat\" },\n {\n name: \"totalDisplayStyle\",\n default: \"none\",\n choices: [\"none\", \"decimal\", \"currency\", \"percent\"],\n },\n {\n name: \"totalCurrency\",\n choices: function () {\n return Object(_question_expression__WEBPACK_IMPORTED_MODULE_9__[\"getCurrecyCodes\"])();\n },\n default: \"USD\",\n },\n { name: \"totalMaximumFractionDigits:number\", default: -1 },\n { name: \"totalMinimumFractionDigits:number\", default: -1 },\n { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n return new MatrixDropdownColumn(\"\");\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdropdownbase\", [\n {\n name: \"columns:matrixdropdowncolumns\",\n className: \"matrixdropdowncolumn\",\n },\n {\n name: \"columnLayout\",\n alternativeName: \"columnsLocation\",\n default: \"horizontal\",\n choices: [\"horizontal\", \"vertical\"],\n },\n {\n name: \"detailElements\",\n visible: false,\n isLightSerializable: false,\n },\n {\n name: \"detailPanelMode\",\n choices: [\"none\", \"underRow\", \"underRowSingle\"],\n default: \"none\",\n },\n \"horizontalScroll:boolean\",\n {\n name: \"choices:itemvalue[]\",\n },\n { name: \"optionsCaption\", serializationProperty: \"locOptionsCaption\" },\n {\n name: \"keyDuplicationError\",\n serializationProperty: \"locKeyDuplicationError\",\n },\n {\n name: \"cellType\",\n default: \"dropdown\",\n choices: function () {\n return MatrixDropdownColumn.getColumnTypes();\n },\n },\n { name: \"columnColCount\", default: 0, choices: [0, 1, 2, 3, 4] },\n \"columnMinWidth\",\n], function () {\n return new QuestionMatrixDropdownModelBase(\"\");\n}, \"matrixbase\");\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdynamic.ts\":\n/*!***************************************!*\\\n !*** ./src/question_matrixdynamic.ts ***!\n \\***************************************/\n/*! exports provided: MatrixDynamicRowModel, QuestionMatrixDynamicModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return MatrixDynamicRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return QuestionMatrixDynamicModel; });\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\nvar Sortable = sortablejs__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\nvar MatrixDynamicRowModel = /** @class */ (function (_super) {\n __extends(MatrixDynamicRowModel, _super);\n function MatrixDynamicRowModel(index, data, value) {\n var _this = _super.call(this, data, value) || this;\n _this.index = index;\n _this.buildCells(value);\n return _this;\n }\n Object.defineProperty(MatrixDynamicRowModel.prototype, \"rowName\", {\n get: function () {\n return this.id;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixDynamicRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]));\n\n/**\n * A Model for a matrix dymanic question. You may use a dropdown, checkbox, radiogroup, text and comment questions as a cell editors.\n * An end-user may dynamically add/remove rows, unlike in matrix dropdown question.\n */\nvar QuestionMatrixDynamicModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixDynamicModel, _super);\n function QuestionMatrixDynamicModel(name) {\n var _this = _super.call(this, name) || this;\n _this.rowCounter = 0;\n _this.initialRowCount = 2;\n _this.setRowCountValueFromData = false;\n _this.moveRowByIndex = function (fromIndex, toIndex) {\n var value = _this.createNewValue();\n if (!value)\n return;\n var movableRow = value[fromIndex];\n if (!movableRow)\n return;\n value.splice(fromIndex, 1);\n value.splice(toIndex, 0, movableRow);\n _this.value = value;\n };\n void (_this.createLocalizableString(\"confirmDeleteText\", _this));\n var locAddRowText = _this.createLocalizableString(\"addRowText\", _this);\n locAddRowText.onGetTextCallback = function (text) {\n return !!text ? text : _this.defaultAddRowText;\n };\n var locRemoveRowText = _this.createLocalizableString(\"removeRowText\", _this);\n locRemoveRowText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"removeRow\");\n };\n var locEmptyRowsText = (_this.createLocalizableString(\"emptyRowsText\", _this));\n locEmptyRowsText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"emptyRowsText\");\n };\n _this.registerFunctionOnPropertiesValueChanged([\"hideColumnsIfEmpty\", \"allowAddRows\"], function () {\n _this.updateShowTableAndAddRow();\n });\n _this.registerFunctionOnPropertyValueChanged(\"allowRowsDragAndDrop\", function () {\n _this.clearRowsAndResetRenderedTable();\n });\n return _this;\n }\n QuestionMatrixDynamicModel.prototype.getType = function () {\n return \"matrixdynamic\";\n };\n //cross framework initialization\n QuestionMatrixDynamicModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el && this.allowRowsDragAndDrop) {\n this.initSortable(el.querySelector(\"tbody\"));\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n //cross framework destroy\n QuestionMatrixDynamicModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (this.sortableInst)\n this.sortableInst.destroy();\n _super.prototype.beforeDestroyQuestionElement.call(this, el);\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isRowsDynamic\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDelete\", {\n /**\n * Set it to true, to show a confirmation dialog on removing a row\n * @see ConfirmDeleteText\n */\n get: function () {\n return this.getPropertyValue(\"confirmDelete\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"confirmDelete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"keyName\", {\n /**\n * Set it to a column name and the library shows duplication error, if there are same values in different rows in the column.\n * @see keyDuplicationError\n */\n get: function () {\n return this.getPropertyValue(\"keyName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"keyName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultRowValue\", {\n /**\n * If it is not empty, then this value is set to every new row, including rows created initially, unless the defaultValue is not empty\n * @see defaultValue\n * @see defaultValueFromLastRow\n */\n get: function () {\n return this.getPropertyValue(\"defaultRowValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultRowValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultValueFromLastRow\", {\n /**\n * Set it to true to copy the value into new added row from the last row. If defaultRowValue is set and this property equals to true,\n * then the value for new added row is merging.\n * @see defaultValue\n * @see defaultRowValue\n */\n get: function () {\n return this.getPropertyValue(\"defaultValueFromLastRow\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueFromLastRow\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.isDefaultValueEmpty = function () {\n return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultRowValue));\n };\n QuestionMatrixDynamicModel.prototype.valueFromData = function (val) {\n if (this.minRowCount < 1)\n return _super.prototype.valueFromData.call(this, val);\n if (!Array.isArray(val))\n val = [];\n for (var i = val.length; i < this.minRowCount; i++)\n val.push({});\n return val;\n };\n QuestionMatrixDynamicModel.prototype.setDefaultValue = function () {\n if (this.isValueEmpty(this.defaultRowValue) ||\n !this.isValueEmpty(this.defaultValue)) {\n _super.prototype.setDefaultValue.call(this);\n return;\n }\n if (!this.isEmpty() || this.rowCount == 0)\n return;\n var newValue = [];\n for (var i = 0; i < this.rowCount; i++) {\n newValue.push(this.defaultRowValue);\n }\n this.value = newValue;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCount\", {\n /**\n * The number of rows in the matrix.\n * @see minRowCount\n * @see maxRowCount\n */\n get: function () {\n return this.rowCountValue;\n },\n set: function (val) {\n if (val < 0 || val > _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount)\n return;\n this.setRowCountValueFromData = false;\n var prevValue = this.rowCountValue;\n this.rowCountValue = val;\n if (this.value && this.value.length > val) {\n var qVal = this.value;\n qVal.splice(val);\n this.value = qVal;\n }\n if (this.isLoadingFromJson) {\n this.initialRowCount = val;\n return;\n }\n if (this.generatedVisibleRows || prevValue == 0) {\n if (!this.generatedVisibleRows) {\n this.generatedVisibleRows = [];\n }\n this.generatedVisibleRows.splice(val);\n for (var i = prevValue; i < val; i++) {\n var newRow = this.createMatrixRow(this.getValueForNewRow());\n this.generatedVisibleRows.push(newRow);\n this.onMatrixRowCreated(newRow);\n }\n }\n this.onRowsChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowRowsDragAndDrop\", {\n /**\n * Set this property to true, to allow rows drag and drop.\n */\n get: function () {\n return this.getPropertyValue(\"allowRowsDragAndDrop\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowRowsDragAndDrop\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.initSortable = function (domNode) {\n if (!domNode)\n return;\n if (this.isReadOnly)\n return;\n var self = this;\n self.domNode = domNode;\n self.sortableInst = new Sortable(domNode, {\n animation: 100,\n forceFallback: true,\n delay: 200,\n delayOnTouchOnly: true,\n handle: \"tr\",\n onEnd: function (evt) {\n self.moveRowByIndex(evt.oldDraggableIndex, evt.newDraggableIndex);\n },\n });\n };\n QuestionMatrixDynamicModel.prototype.createRenderedTable = function () {\n return new QuestionMatrixDynamicRenderedTable(this);\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCountValue\", {\n get: function () {\n return this.getPropertyValue(\"rowCount\", 2);\n },\n set: function (val) {\n this.setPropertyValue(\"rowCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getValueForNewRow = function () {\n var res = null;\n if (!!this.onGetValueForNewRowCallBack) {\n res = this.onGetValueForNewRowCallBack(this);\n }\n return res;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"minRowCount\", {\n /**\n * The minimum row count. A user could not delete a row if the rowCount equals to minRowCount\n * @see rowCount\n * @see maxRowCount\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"minRowCount\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n this.setPropertyValue(\"minRowCount\", val);\n if (val > this.maxRowCount)\n this.maxRowCount = val;\n if (this.rowCount < val)\n this.rowCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"maxRowCount\", {\n /**\n * The maximum row count. A user could not add a row if the rowCount equals to maxRowCount\n * @see rowCount\n * @see minRowCount\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"maxRowCount\", _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount)\n val = _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount;\n if (val == this.maxRowCount)\n return;\n this.setPropertyValue(\"maxRowCount\", val);\n if (val < this.minRowCount)\n this.minRowCount = val;\n if (this.rowCount > val)\n this.rowCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowAddRows\", {\n /**\n * Set this property to false to disable ability to add new rows. \"Add new Row\" button becomes invsible in UI\n * @see canAddRow\n * @see allowRemoveRows\n */\n get: function () {\n return this.getPropertyValue(\"allowAddRows\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowAddRows\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowRemoveRows\", {\n /**\n * Set this property to false to disable ability to remove rows. \"Remove\" row buttons become invsible in UI\n * @see canRemoveRows\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"allowRemoveRows\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowRemoveRows\", val);\n if (!this.isLoadingFromJson) {\n this.resetRenderedTable();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canAddRow\", {\n /**\n * Returns true, if a new row can be added.\n * @see allowAddRows\n * @see maxRowCount\n * @see canRemoveRows\n * @see rowCount\n */\n get: function () {\n return (this.allowAddRows && !this.isReadOnly && this.rowCount < this.maxRowCount);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canRemoveRows\", {\n /**\n * Returns true, if row can be removed.\n * @see minRowCount\n * @see canAddRow\n * @see rowCount\n */\n get: function () {\n var res = this.allowRemoveRows &&\n !this.isReadOnly &&\n this.rowCount > this.minRowCount;\n return !!this.canRemoveRowsCallback ? this.canRemoveRowsCallback(res) : res;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.canRemoveRow = function (row) {\n if (!this.survey)\n return true;\n return this.survey.matrixAllowRemoveRow(this, row.index, row);\n };\n /**\n * Creates and add a new row and focus the cell in the first column.\n */\n QuestionMatrixDynamicModel.prototype.addRowUI = function () {\n var oldRowCount = this.rowCount;\n this.addRow();\n if (oldRowCount === this.rowCount)\n return;\n var q = this.getQuestionToFocusOnAddingRow();\n if (!!q) {\n q.focus();\n }\n };\n QuestionMatrixDynamicModel.prototype.getQuestionToFocusOnAddingRow = function () {\n var row = this.visibleRows[this.visibleRows.length - 1];\n for (var i = 0; i < row.cells.length; i++) {\n var q = row.cells[i].question;\n if (!!q && q.isVisible && !q.isReadOnly) {\n return q;\n }\n }\n return null;\n };\n /**\n * Creates and add a new row.\n */\n QuestionMatrixDynamicModel.prototype.addRow = function () {\n var options = { question: this, canAddRow: this.canAddRow };\n if (!!this.survey) {\n this.survey.matrixBeforeRowAdded(options);\n }\n if (!options.canAddRow)\n return;\n this.onStartRowAddingRemoving();\n this.addRowCore();\n this.onEndRowAdding();\n if (this.detailPanelShowOnAdding && this.visibleRows.length > 0) {\n this.visibleRows[this.visibleRows.length - 1].showDetailPanel();\n }\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"detailPanelShowOnAdding\", {\n /**\n * Set this property to true to show detail panel immediately on adding a new row.\n * @see detailPanelMode\n */\n get: function () {\n return this.getPropertyValue(\"detailPanelShowOnAdding\");\n },\n set: function (val) {\n this.setPropertyValue(\"detailPanelShowOnAdding\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.hasRowsAsItems = function () {\n return false;\n };\n QuestionMatrixDynamicModel.prototype.unbindValue = function () {\n this.clearGeneratedRows();\n this.clearPropertyValue(\"value\");\n this.rowCountValue = 0;\n _super.prototype.unbindValue.call(this);\n };\n QuestionMatrixDynamicModel.prototype.isValueSurveyElement = function (val) {\n return this.isEditingSurveyElement || _super.prototype.isValueSurveyElement.call(this, val);\n };\n QuestionMatrixDynamicModel.prototype.addRowCore = function () {\n var prevRowCount = this.rowCount;\n this.rowCount = this.rowCount + 1;\n var defaultValue = this.getDefaultRowValue(true);\n var newValue = null;\n if (!this.isValueEmpty(defaultValue)) {\n newValue = this.createNewValue();\n if (newValue.length == this.rowCount) {\n newValue[newValue.length - 1] = defaultValue;\n this.value = newValue;\n }\n }\n if (this.data) {\n this.runCellsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n var row = this.visibleRows[this.rowCount - 1];\n if (!this.isValueEmpty(row.value)) {\n if (!newValue) {\n newValue = this.createNewValue();\n }\n if (!this.isValueSurveyElement(newValue) &&\n !_helpers__WEBPACK_IMPORTED_MODULE_5__[\"Helpers\"].isTwoValueEquals(newValue[newValue.length - 1], row.value)) {\n newValue[newValue.length - 1] = row.value;\n this.value = newValue;\n }\n }\n }\n if (this.survey) {\n if (prevRowCount + 1 == this.rowCount) {\n this.survey.matrixRowAdded(this, this.visibleRows[this.visibleRows.length - 1]);\n this.onRowsChanged();\n }\n }\n };\n QuestionMatrixDynamicModel.prototype.getDefaultRowValue = function (isRowAdded) {\n var res = null;\n for (var i = 0; i < this.columns.length; i++) {\n var q = this.columns[i].templateQuestion;\n if (!!q && !this.isValueEmpty(q.getDefaultValue())) {\n res = res || {};\n res[this.columns[i].name] = q.getDefaultValue();\n }\n }\n if (!this.isValueEmpty(this.defaultRowValue)) {\n for (var key in this.defaultRowValue) {\n res = res || {};\n res[key] = this.defaultRowValue[key];\n }\n }\n if (isRowAdded && this.defaultValueFromLastRow) {\n var val = this.value;\n if (!!val && Array.isArray(val) && val.length >= this.rowCount - 1) {\n var rowValue = val[this.rowCount - 2];\n for (var key in rowValue) {\n res = res || {};\n res[key] = rowValue[key];\n }\n }\n }\n return res;\n };\n /**\n * Removes a row by it's index. If confirmDelete is true, show a confirmation dialog\n * @param index a row index, from 0 to rowCount - 1\n * @see removeRow\n * @see confirmDelete\n */\n QuestionMatrixDynamicModel.prototype.removeRowUI = function (value) {\n if (!!value && !!value.rowName) {\n var index = this.visibleRows.indexOf(value);\n if (index < 0)\n return;\n value = index;\n }\n if (!this.isRequireConfirmOnRowDelete(value) ||\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_7__[\"confirmAction\"])(this.confirmDeleteText)) {\n this.removeRow(value);\n }\n };\n QuestionMatrixDynamicModel.prototype.isRequireConfirmOnRowDelete = function (index) {\n if (!this.confirmDelete)\n return false;\n if (index < 0 || index >= this.rowCount)\n return false;\n var value = this.createNewValue();\n if (this.isValueEmpty(value) || !Array.isArray(value))\n return false;\n if (index >= value.length)\n return false;\n return !this.isValueEmpty(value[index]);\n };\n /**\n * Removes a row by it's index.\n * @param index a row index, from 0 to rowCount - 1\n */\n QuestionMatrixDynamicModel.prototype.removeRow = function (index) {\n if (!this.canRemoveRows)\n return;\n if (index < 0 || index >= this.rowCount)\n return;\n var row = !!this.visibleRows && index < this.visibleRows.length\n ? this.visibleRows[index]\n : null;\n if (!!row &&\n !!this.survey &&\n !this.survey.matrixRowRemoving(this, index, row))\n return;\n this.onStartRowAddingRemoving();\n this.removeRowCore(index);\n this.onEndRowRemoving(row);\n };\n QuestionMatrixDynamicModel.prototype.removeRowCore = function (index) {\n var row = this.generatedVisibleRows\n ? this.generatedVisibleRows[index]\n : null;\n if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) {\n this.generatedVisibleRows.splice(index, 1);\n }\n this.rowCountValue--;\n if (this.value) {\n var val = [];\n if (Array.isArray(this.value) && index < this.value.length) {\n val = this.createValueCopy();\n }\n else {\n val = this.createNewValue();\n }\n val.splice(index, 1);\n val = this.deleteRowValue(val, null);\n this.isRowChanging = true;\n this.value = val;\n this.isRowChanging = false;\n }\n this.onRowsChanged();\n if (this.survey) {\n this.survey.matrixRowRemoved(this, index, row);\n }\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDeleteText\", {\n /**\n * Use this property to change the default text showing in the confirmation delete dialog on removing a row.\n */\n get: function () {\n return this.getLocalizableStringText(\"confirmDeleteText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowText\", {\n /**\n * Use this property to change the default value of add row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"addRowText\", this.defaultAddRowText);\n },\n set: function (val) {\n this.setLocalizableStringText(\"addRowText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locAddRowText\", {\n get: function () {\n return this.getLocalizableString(\"addRowText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultAddRowText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(this.isColumnLayoutHorizontal ? \"addRow\" : \"addColumn\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowLocation\", {\n /**\n * By default the 'Add Row' button is shown on bottom if columnLayout is horizontal and on top if columnLayout is vertical.
\n * You may set it to \"top\", \"bottom\" or \"topBottom\" (to show on top and bottom).\n * @see columnLayout\n */\n get: function () {\n return this.getPropertyValue(\"addRowLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"addRowLocation\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getAddRowLocation = function () {\n return this.addRowLocation;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hideColumnsIfEmpty\", {\n /**\n * Set this property to true to hide matrix columns when there is no any row.\n */\n get: function () {\n return this.getPropertyValue(\"hideColumnsIfEmpty\");\n },\n set: function (val) {\n this.setPropertyValue(\"hideColumnsIfEmpty\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getShowColumnsIfEmpty = function () {\n return this.hideColumnsIfEmpty;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"removeRowText\", {\n /**\n * Use this property to change the default value of remove row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"removeRowText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"removeRow\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"removeRowText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locRemoveRowText\", {\n get: function () {\n return this.getLocalizableString(\"removeRowText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"emptyRowsText\", {\n /**\n * Use this property to change the default value of remove row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"emptyRowsText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"emptyRowsText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"emptyRowsText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locEmptyRowsText\", {\n get: function () {\n return this.getLocalizableString(\"emptyRowsText\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value || !Array.isArray(value))\n return value;\n var values = this.getUnbindValue(value);\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length && i < values.length; i++) {\n var val = values[i];\n if (!val)\n continue;\n values[i] = this.getRowDisplayValue(keysAsText, rows[i], val);\n }\n return values;\n };\n QuestionMatrixDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context ? this.columns.indexOf(context) > -1 : false;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n this.addColumnIntoaddConditionObjectsByContext(objects, 0, column);\n if (hasContext && column != context) {\n this.addColumnIntoaddConditionObjectsByContext(objects, -1, column);\n }\n for (var j = 1; j < Math.min(_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaxRowCountInCondition, this.rowCount); j++) {\n this.addColumnIntoaddConditionObjectsByContext(objects, j, column);\n }\n }\n };\n QuestionMatrixDynamicModel.prototype.addColumnIntoaddConditionObjectsByContext = function (objects, rowIndex, column) {\n var rowName = rowIndex > -1 ? \"[\" + rowIndex.toString() + \"].\" : \"row.\";\n objects.push({\n name: (rowIndex > -1 ? this.getValueName() + rowName : rowName) + column.name,\n text: (rowIndex > -1 ? this.processedTitle + rowName : rowName) +\n column.fullTitle,\n question: this,\n });\n };\n QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hasRowText\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (!isOnValueChanged && this.hasErrorInMinRows()) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_4__[\"MinRowCountError\"](this.minRowCount, this));\n }\n };\n QuestionMatrixDynamicModel.prototype.hasErrorInMinRows = function () {\n if (this.minRowCount <= 0 || !this.isRequired || !this.generatedVisibleRows)\n return false;\n var setRowCount = 0;\n for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) {\n var row = this.generatedVisibleRows[rowIndex];\n if (!row.isEmpty)\n setRowCount++;\n }\n return setRowCount < this.minRowCount;\n };\n QuestionMatrixDynamicModel.prototype.getUniqueColumns = function () {\n var res = _super.prototype.getUniqueColumns.call(this);\n if (!!this.keyName) {\n var column = this.getColumnByName(this.keyName);\n if (!!column && res.indexOf(column) < 0) {\n res.push(column);\n }\n }\n return res;\n };\n QuestionMatrixDynamicModel.prototype.generateRows = function () {\n var result = new Array();\n if (this.rowCount === 0)\n return result;\n var val = this.createNewValue();\n for (var i = 0; i < this.rowCount; i++) {\n result.push(this.createMatrixRow(this.getRowValueByIndex(val, i)));\n }\n if (!this.isValueEmpty(this.getDefaultRowValue(false))) {\n this.value = val;\n }\n return result;\n };\n QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) {\n return new MatrixDynamicRowModel(this.rowCounter++, this, value);\n };\n QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) {\n if (!val || !Array.isArray(val))\n return;\n var newRowCount = val.length;\n if (newRowCount == this.rowCount)\n return;\n if (!this.setRowCountValueFromData && newRowCount < this.initialRowCount)\n return;\n this.setRowCountValueFromData = true;\n this.rowCountValue = newRowCount;\n if (this.generatedVisibleRows) {\n this.clearGeneratedRows();\n this.generatedVisibleRows = this.visibleRows;\n this.onRowsChanged();\n }\n };\n QuestionMatrixDynamicModel.prototype.createNewValue = function () {\n var result = this.createValueCopy();\n if (!result || !Array.isArray(result))\n result = [];\n if (result.length > this.rowCount)\n result.splice(this.rowCount);\n var rowValue = this.getDefaultRowValue(false);\n rowValue = rowValue || {};\n for (var i = result.length; i < this.rowCount; i++) {\n result.push(this.getUnbindValue(rowValue));\n }\n return result;\n };\n QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) {\n var isEmpty = true;\n for (var i = 0; i < newValue.length; i++) {\n if (this.isObject(newValue[i]) && Object.keys(newValue[i]).length > 0) {\n isEmpty = false;\n break;\n }\n }\n return isEmpty ? null : newValue;\n };\n QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) {\n return Array.isArray(questionValue) &&\n index >= 0 &&\n index < questionValue.length\n ? questionValue[index]\n : null;\n };\n QuestionMatrixDynamicModel.prototype.getRowValueCore = function (row, questionValue, create) {\n if (create === void 0) { create = false; }\n if (!this.generatedVisibleRows)\n return {};\n var res = this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row));\n if (!res && create)\n res = {};\n return res;\n };\n return QuestionMatrixDynamicModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]));\n\nvar QuestionMatrixDynamicRenderedTable = /** @class */ (function (_super) {\n __extends(QuestionMatrixDynamicRenderedTable, _super);\n function QuestionMatrixDynamicRenderedTable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionMatrixDynamicRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n _super.prototype.setDefaultRowActions.call(this, row, actions);\n if (this.matrix.allowRowsDragAndDrop) {\n actions.push(new _actions_action__WEBPACK_IMPORTED_MODULE_9__[\"Action\"]({\n id: \"drag-row\",\n location: \"start\",\n component: \"sv-matrix-drag-drop-icon\",\n data: { row: row, question: this.matrix },\n }));\n }\n };\n return QuestionMatrixDynamicRenderedTable;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]));\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"matrixdynamic\", [\n { name: \"rowsVisibleIf:condition\", visible: false },\n { name: \"allowAddRows:boolean\", default: true },\n { name: \"allowRemoveRows:boolean\", default: true },\n { name: \"rowCount:number\", default: 2, minValue: 0, isBindable: true },\n { name: \"minRowCount:number\", default: 0, minValue: 0 },\n {\n name: \"maxRowCount:number\",\n default: _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount,\n },\n { name: \"keyName\" },\n \"defaultRowValue:rowvalue\",\n \"defaultValueFromLastRow:boolean\",\n { name: \"confirmDelete:boolean\" },\n {\n name: \"confirmDeleteText\",\n dependsOn: \"confirmDelete\",\n visibleIf: function (obj) {\n return !obj || obj.confirmDelete;\n },\n serializationProperty: \"locConfirmDeleteText\",\n },\n {\n name: \"addRowLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"topBottom\"],\n },\n { name: \"addRowText\", serializationProperty: \"locAddRowText\" },\n { name: \"removeRowText\", serializationProperty: \"locRemoveRowText\" },\n \"hideColumnsIfEmpty:boolean\",\n {\n name: \"emptyRowsText:text\",\n serializationProperty: \"locEmptyRowsText\",\n dependsOn: \"hideColumnsIfEmpty\",\n visibleIf: function (obj) {\n return !obj || obj.hideColumnsIfEmpty;\n },\n },\n {\n name: \"detailPanelShowOnAdding:boolean\",\n dependsOn: \"detailPanelMode\",\n visibleIf: function (obj) {\n return obj.detailPanelMode !== \"none\";\n },\n },\n {\n name: \"allowRowsDragAndDrop\",\n default: false,\n visible: true,\n isSerializable: false,\n },\n], function () {\n return new QuestionMatrixDynamicModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdynamic\", function (name) {\n var q = new QuestionMatrixDynamicModel(name);\n q.choices = [1, 2, 3, 4, 5];\n _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_multipletext.ts\":\n/*!**************************************!*\\\n !*** ./src/question_multipletext.ts ***!\n \\**************************************/\n/*! exports provided: MultipleTextItemModel, QuestionMultipleTextModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return MultipleTextItemModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return QuestionMultipleTextModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question_text */ \"./src/question_text.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\nvar MultipleTextItemModel = /** @class */ (function (_super) {\n __extends(MultipleTextItemModel, _super);\n function MultipleTextItemModel(name, title) {\n if (name === void 0) { name = null; }\n if (title === void 0) { title = null; }\n var _this = _super.call(this) || this;\n _this.editorValue = _this.createEditor(name);\n _this.editor.questionTitleTemplateCallback = function () {\n return \"\";\n };\n _this.editor.titleLocation = \"left\";\n if (title) {\n _this.title = title;\n }\n return _this;\n }\n MultipleTextItemModel.prototype.getType = function () {\n return \"multipletextitem\";\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"id\", {\n get: function () {\n return this.editor.id;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getOriginalObj = function () {\n return this.editor;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"name\", {\n /**\n * The item name.\n */\n get: function () {\n return this.editor.name;\n },\n set: function (val) {\n this.editor.name = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"question\", {\n get: function () {\n return this.data;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"editor\", {\n get: function () {\n return this.editorValue;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.createEditor = function (name) {\n return new _question_text__WEBPACK_IMPORTED_MODULE_3__[\"QuestionTextModel\"](name);\n };\n MultipleTextItemModel.prototype.addUsedLocales = function (locales) {\n _super.prototype.addUsedLocales.call(this, locales);\n this.editor.addUsedLocales(locales);\n };\n MultipleTextItemModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n this.editor.locStrsChanged();\n };\n MultipleTextItemModel.prototype.setData = function (data) {\n this.data = data;\n if (!!data) {\n this.editor.defaultValue = data.getItemDefaultValue(this.name);\n this.editor.setSurveyImpl(this);\n this.editor.parent = data;\n }\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"isRequired\", {\n /**\n * Set this property to true, to make the item a required. If a user doesn't fill the item then a validation error will be generated.\n */\n get: function () {\n return this.editor.isRequired;\n },\n set: function (val) {\n this.editor.isRequired = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"inputType\", {\n /**\n * Use this property to change the default input type.\n */\n get: function () {\n return this.editor.inputType;\n },\n set: function (val) {\n this.editor.inputType = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"title\", {\n /**\n * Item title. If it is empty, the item name is rendered as title. This property supports markdown.\n * @see name\n */\n get: function () {\n return this.editor.title;\n },\n set: function (val) {\n this.editor.title = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locTitle\", {\n get: function () {\n return this.editor.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"fullTitle\", {\n /**\n * Returns the text or html for rendering the title.\n */\n get: function () {\n return this.editor.fullTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.editor.maxLength;\n },\n set: function (val) {\n this.editor.maxLength = val;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getMaxLength = function () {\n var survey = this.getSurvey();\n return _helpers__WEBPACK_IMPORTED_MODULE_6__[\"Helpers\"].getMaxLength(this.maxLength, survey ? survey.maxTextLength : -1);\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"placeHolder\", {\n /**\n * The input place holder.\n */\n get: function () {\n return this.editor.placeHolder;\n },\n set: function (val) {\n this.editor.placeHolder = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.editor.locPlaceHolder;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n */\n get: function () {\n return this.editor.requiredErrorText;\n },\n set: function (val) {\n this.editor.requiredErrorText = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.editor.locRequiredErrorText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"size\", {\n /**\n * The input size.\n */\n get: function () {\n return this.editor.size;\n },\n set: function (val) {\n this.editor.size = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"validators\", {\n /**\n * The list of question validators.\n */\n get: function () {\n return this.editor.validators;\n },\n set: function (val) {\n this.editor.validators = val;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getValidators = function () {\n return this.validators;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"value\", {\n /**\n * The item value.\n */\n get: function () {\n return this.data ? this.data.getMultipleTextValue(this.name) : null;\n },\n set: function (value) {\n if (this.data != null) {\n this.data.setMultipleTextValue(this.name, value);\n }\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.isEmpty = function () {\n return this.editor.isEmpty();\n };\n MultipleTextItemModel.prototype.onValueChanged = function (newValue) {\n if (this.valueChangedCallback)\n this.valueChangedCallback(newValue);\n };\n //ISurveyImpl\n MultipleTextItemModel.prototype.getSurveyData = function () {\n return this;\n };\n MultipleTextItemModel.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n MultipleTextItemModel.prototype.getTextProcessor = function () {\n return this.data ? this.data.getTextProcessor() : null;\n };\n //ISurveyData\n MultipleTextItemModel.prototype.getValue = function (name) {\n if (!this.data)\n return null;\n return this.data.getMultipleTextValue(name);\n };\n MultipleTextItemModel.prototype.setValue = function (name, value) {\n if (this.data) {\n this.data.setMultipleTextValue(name, value);\n }\n };\n MultipleTextItemModel.prototype.getVariable = function (name) {\n return undefined;\n };\n MultipleTextItemModel.prototype.setVariable = function (name, newValue) { };\n MultipleTextItemModel.prototype.getComment = function (name) {\n return null;\n };\n MultipleTextItemModel.prototype.setComment = function (name, newValue) { };\n MultipleTextItemModel.prototype.getAllValues = function () {\n if (this.data)\n return this.data.getAllValues();\n return this.value;\n };\n MultipleTextItemModel.prototype.getFilteredValues = function () {\n return this.getAllValues();\n };\n MultipleTextItemModel.prototype.getFilteredProperties = function () {\n return { survey: this.getSurvey() };\n };\n //IValidatorOwner\n MultipleTextItemModel.prototype.getValidatorTitle = function () {\n return this.title;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"validatedValue\", {\n get: function () {\n return this.value;\n },\n set: function (val) {\n this.value = val;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getDataFilteredValues = function () {\n return this.getFilteredValues();\n };\n MultipleTextItemModel.prototype.getDataFilteredProperties = function () {\n return this.getFilteredProperties();\n };\n return MultipleTextItemModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * A Model for a multiple text question.\n */\nvar QuestionMultipleTextModel = /** @class */ (function (_super) {\n __extends(QuestionMultipleTextModel, _super);\n function QuestionMultipleTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isMultipleItemValueChanging = false;\n _this.createNewArray(\"items\", function (item) {\n item.setData(_this);\n });\n _this.registerFunctionOnPropertyValueChanged(\"items\", function () {\n _this.fireCallback(_this.colCountChangedCallback);\n });\n _this.registerFunctionOnPropertyValueChanged(\"colCount\", function () {\n _this.fireCallback(_this.colCountChangedCallback);\n });\n _this.registerFunctionOnPropertyValueChanged(\"itemSize\", function () {\n _this.updateItemsSize();\n });\n return _this;\n }\n QuestionMultipleTextModel.addDefaultItems = function (question) {\n var names = _questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].DefaultMutlipleTextItems;\n for (var i = 0; i < names.length; i++)\n question.addItem(names[i]);\n };\n QuestionMultipleTextModel.prototype.getType = function () {\n return \"multipletext\";\n };\n QuestionMultipleTextModel.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].setData(this);\n }\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"isAllowTitleLeft\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMultipleTextModel.prototype.onSurveyLoad = function () {\n this.editorsOnSurveyLoad();\n _super.prototype.onSurveyLoad.call(this);\n this.fireCallback(this.colCountChangedCallback);\n };\n QuestionMultipleTextModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.performForEveryEditor(function (item) {\n item.editor.updateValueFromSurvey(item.value);\n });\n this.updateIsAnswered();\n };\n QuestionMultipleTextModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n this.performForEveryEditor(function (item) {\n item.editor.onSurveyValueChanged(item.value);\n });\n };\n QuestionMultipleTextModel.prototype.updateItemsSize = function () {\n this.performForEveryEditor(function (item) {\n item.editor.updateInputSize();\n });\n };\n QuestionMultipleTextModel.prototype.editorsOnSurveyLoad = function () {\n this.performForEveryEditor(function (item) {\n item.editor.onSurveyLoad();\n });\n };\n QuestionMultipleTextModel.prototype.performForEveryEditor = function (func) {\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.editor) {\n func(item);\n }\n }\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"items\", {\n /**\n * The list of input items.\n */\n get: function () {\n return this.getPropertyValue(\"items\");\n },\n set: function (val) {\n this.setPropertyValue(\"items\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add a new text item.\n * @param name a item name\n * @param title a item title (optional)\n */\n QuestionMultipleTextModel.prototype.addItem = function (name, title) {\n if (title === void 0) { title = null; }\n var item = this.createTextItem(name, title);\n this.items.push(item);\n return item;\n };\n QuestionMultipleTextModel.prototype.getItemByName = function (name) {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].name == name)\n return this.items[i];\n }\n return null;\n };\n QuestionMultipleTextModel.prototype.addConditionObjectsByContext = function (objects, context) {\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n objects.push({\n name: this.getValueName() + \".\" + item.name,\n text: this.processedTitle + \".\" + item.fullTitle,\n question: this,\n });\n }\n };\n QuestionMultipleTextModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var item = this.getItemByName(path);\n if (!item)\n return null;\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"JsonObject\"]().toJsonObject(item);\n json[\"type\"] = \"text\";\n return json;\n };\n QuestionMultipleTextModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].locStrsChanged();\n }\n };\n QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEmpty())\n return false;\n }\n return true;\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"colCount\", {\n /**\n * The number of columns. Items are rendred in one line if the value is 0.\n */\n get: function () {\n return this.getPropertyValue(\"colCount\");\n },\n set: function (val) {\n if (val < 1 || val > 5)\n return;\n this.setPropertyValue(\"colCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"itemSize\", {\n /**\n * The default text input size.\n */\n get: function () {\n return this.getPropertyValue(\"itemSize\");\n },\n set: function (val) {\n this.setPropertyValue(\"itemSize\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns the list of rendered rows.\n */\n QuestionMultipleTextModel.prototype.getRows = function () {\n var colCount = this.colCount;\n var items = this.items;\n var rows = [];\n var index = 0;\n for (var i = 0; i < items.length; i++) {\n if (index == 0) {\n rows.push([]);\n }\n rows[rows.length - 1].push(items[i]);\n index++;\n if (index >= colCount) {\n index = 0;\n }\n }\n return rows;\n };\n QuestionMultipleTextModel.prototype.onValueChanged = function () {\n _super.prototype.onValueChanged.call(this);\n this.onItemValueChanged();\n };\n QuestionMultipleTextModel.prototype.createTextItem = function (name, title) {\n return new MultipleTextItemModel(name, title);\n };\n QuestionMultipleTextModel.prototype.onItemValueChanged = function () {\n if (this.isMultipleItemValueChanging)\n return;\n for (var i = 0; i < this.items.length; i++) {\n var itemValue = null;\n if (this.value && this.items[i].name in this.value) {\n itemValue = this.value[this.items[i].name];\n }\n this.items[i].onValueChanged(itemValue);\n }\n };\n QuestionMultipleTextModel.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].editor.isRunningValidators)\n return true;\n }\n return false;\n };\n QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback, rec) {\n var _this = this;\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var res = false;\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].editor.onCompletedAsyncValidators = function (hasErrors) {\n _this.raiseOnCompletedAsyncValidators();\n };\n if (!!rec &&\n rec.isOnValueChanged === true &&\n this.items[i].editor.isEmpty())\n continue;\n res = this.items[i].editor.hasErrors(fireCallback, rec) || res;\n }\n return _super.prototype.hasErrors.call(this, fireCallback) || res;\n };\n QuestionMultipleTextModel.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n for (var i = 0; i < this.items.length; i++) {\n var errors = this.items[i].editor.getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n return result;\n };\n QuestionMultipleTextModel.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].editor.clearErrors();\n }\n };\n QuestionMultipleTextModel.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n if (items[i].editor.containsErrors)\n return true;\n }\n return false;\n };\n QuestionMultipleTextModel.prototype.getIsAnswered = function () {\n if (!_super.prototype.getIsAnswered.call(this))\n return false;\n for (var i = 0; i < this.items.length; i++) {\n var editor = this.items[i].editor;\n if (editor.isVisible && !editor.isAnswered)\n return false;\n }\n return true;\n };\n QuestionMultipleTextModel.prototype.getProgressInfo = function () {\n var elements = [];\n for (var i = 0; i < this.items.length; i++) {\n elements.push(this.items[i].editor);\n }\n return _survey_element__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElement\"].getProgressInfoByElements(elements, this.isRequired);\n };\n QuestionMultipleTextModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value)\n return value;\n var res = {};\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var val = value[item.name];\n if (_helpers__WEBPACK_IMPORTED_MODULE_6__[\"Helpers\"].isValueEmpty(val))\n continue;\n var itemName = item.name;\n if (keysAsText && !!item.title) {\n itemName = item.title;\n }\n res[itemName] = item.editor.getDisplayValue(keysAsText, val);\n }\n return res;\n };\n //IMultipleTextData\n QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) {\n if (!this.value)\n return null;\n return this.value[name];\n };\n QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) {\n this.isMultipleItemValueChanging = true;\n if (this.isValueEmpty(value)) {\n value = undefined;\n }\n var newValue = this.value;\n if (!newValue) {\n newValue = {};\n }\n newValue[name] = value;\n this.setNewValue(newValue);\n this.isMultipleItemValueChanging = false;\n };\n QuestionMultipleTextModel.prototype.getItemDefaultValue = function (name) {\n return !!this.defaultValue ? this.defaultValue[name] : null;\n };\n QuestionMultipleTextModel.prototype.getTextProcessor = function () {\n return this.textProcessor;\n };\n QuestionMultipleTextModel.prototype.getAllValues = function () {\n return this.data ? this.data.getAllValues() : null;\n };\n QuestionMultipleTextModel.prototype.getIsRequiredText = function () {\n return this.survey ? this.survey.requiredText : \"\";\n };\n //IPanel\n QuestionMultipleTextModel.prototype.addElement = function (element, index) { };\n QuestionMultipleTextModel.prototype.removeElement = function (element) {\n return false;\n };\n QuestionMultipleTextModel.prototype.getQuestionTitleLocation = function () {\n return \"left\";\n };\n QuestionMultipleTextModel.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n QuestionMultipleTextModel.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n QuestionMultipleTextModel.prototype.elementWidthChanged = function (el) { };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"elements\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n QuestionMultipleTextModel.prototype.indexOf = function (el) {\n return -1;\n };\n QuestionMultipleTextModel.prototype.ensureRowsVisibility = function () {\n // do nothing\n };\n return QuestionMultipleTextModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"Serializer\"].addClass(\"multipletextitem\", [\n \"name\",\n \"isRequired:boolean\",\n { name: \"placeHolder\", serializationProperty: \"locPlaceHolder\" },\n {\n name: \"inputType\",\n default: \"text\",\n choices: [\n \"color\",\n \"date\",\n \"datetime\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"range\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n ],\n },\n { name: \"title\", serializationProperty: \"locTitle\" },\n { name: \"maxLength:number\", default: -1 },\n { name: \"size:number\", minValue: 0 },\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n], function () {\n return new MultipleTextItemModel(\"\");\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"Serializer\"].addClass(\"multipletext\", [\n { name: \"!items:textitems\", className: \"multipletextitem\" },\n { name: \"itemSize:number\", minValue: 0 },\n { name: \"colCount:number\", default: 1, choices: [1, 2, 3, 4, 5] },\n], function () {\n return new QuestionMultipleTextModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].Instance.registerQuestion(\"multipletext\", function (name) {\n var q = new QuestionMultipleTextModel(name);\n QuestionMultipleTextModel.addDefaultItems(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_paneldynamic.ts\":\n/*!**************************************!*\\\n !*** ./src/question_paneldynamic.ts ***!\n \\**************************************/\n/*! exports provided: QuestionPanelDynamicItem, QuestionPanelDynamicTemplateSurveyImpl, QuestionPanelDynamicModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return QuestionPanelDynamicItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicTemplateSurveyImpl\", function() { return QuestionPanelDynamicTemplateSurveyImpl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return QuestionPanelDynamicModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\n\n\n\n\n\n\nvar QuestionPanelDynamicItemTextProcessor = /** @class */ (function (_super) {\n __extends(QuestionPanelDynamicItemTextProcessor, _super);\n function QuestionPanelDynamicItemTextProcessor(data, panelItem, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.data = data;\n _this.panelItem = panelItem;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.panelItem.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panel\", {\n get: function () {\n return this.panelItem.panel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panelIndex\", {\n get: function () {\n return !!this.data ? this.data.getItemIndex(this.panelItem) : -1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicItemTextProcessor.prototype.getValues = function () {\n return this.panelItem.getAllValues();\n };\n QuestionPanelDynamicItemTextProcessor.prototype.getQuestionByName = function (name) {\n var res = _super.prototype.getQuestionByName.call(this, name);\n if (!!res)\n return res;\n var index = this.panelIndex;\n return index > -1\n ? this.data.getSharedQuestionFromArray(name, index)\n : null;\n };\n QuestionPanelDynamicItemTextProcessor.prototype.onCustomProcessText = function (textValue) {\n if (textValue.name == QuestionPanelDynamicItem.IndexVariableName) {\n var index = this.panelIndex;\n if (index > -1) {\n textValue.isExists = true;\n textValue.value = index + 1;\n return true;\n }\n }\n if (textValue.name.indexOf(QuestionPanelDynamicItem.ParentItemVariableName + \".\") == 0) {\n var q = this.data;\n if (!!q && !!q.parentQuestion && !!q.parent) {\n var data = q.parent.data;\n var processor = new QuestionPanelDynamicItemTextProcessor(q.parentQuestion, data, QuestionPanelDynamicItem.ItemVariableName);\n var text = textValue.name.replace(QuestionPanelDynamicItem.ParentItemVariableName, QuestionPanelDynamicItem.ItemVariableName);\n var res = processor.processValue(text, textValue.returnDisplayValue);\n textValue.isExists = res.isExists;\n textValue.value = res.value;\n }\n return true;\n }\n return false;\n };\n return QuestionPanelDynamicItemTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__[\"QuestionTextProcessor\"]));\nvar QuestionPanelDynamicItem = /** @class */ (function () {\n function QuestionPanelDynamicItem(data, panel) {\n this.data = data;\n this.panelValue = panel;\n this.textPreProcessor = new QuestionPanelDynamicItemTextProcessor(data, this, QuestionPanelDynamicItem.ItemVariableName);\n this.setSurveyImpl();\n }\n Object.defineProperty(QuestionPanelDynamicItem.prototype, \"panel\", {\n get: function () {\n return this.panelValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicItem.prototype.setSurveyImpl = function () {\n this.panel.setSurveyImpl(this);\n };\n QuestionPanelDynamicItem.prototype.getValue = function (name) {\n var values = this.getAllValues();\n return values[name];\n };\n QuestionPanelDynamicItem.prototype.setValue = function (name, newValue) {\n this.data.setPanelItemData(this, name, newValue);\n };\n QuestionPanelDynamicItem.prototype.getVariable = function (name) {\n return undefined;\n };\n QuestionPanelDynamicItem.prototype.setVariable = function (name, newValue) { };\n QuestionPanelDynamicItem.prototype.getComment = function (name) {\n var result = this.getValue(name + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix);\n return result ? result : \"\";\n };\n QuestionPanelDynamicItem.prototype.setComment = function (name, newValue, locNotification) {\n this.setValue(name + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix, newValue);\n };\n QuestionPanelDynamicItem.prototype.getAllValues = function () {\n return this.data.getPanelItemData(this);\n };\n QuestionPanelDynamicItem.prototype.getFilteredValues = function () {\n var values = {};\n var surveyValues = !!this.data && !!this.data.getRootData()\n ? this.data.getRootData().getFilteredValues()\n : {};\n for (var key in surveyValues) {\n values[key] = surveyValues[key];\n }\n values[QuestionPanelDynamicItem.ItemVariableName] = this.getAllValues();\n if (!!this.data) {\n values[QuestionPanelDynamicItem.IndexVariableName.toLowerCase()] = this.data.getItemIndex(this);\n }\n return values;\n };\n QuestionPanelDynamicItem.prototype.getFilteredProperties = function () {\n if (!!this.data && !!this.data.getRootData())\n return this.data.getRootData().getFilteredProperties();\n return { survey: this.getSurvey() };\n };\n QuestionPanelDynamicItem.prototype.getSurveyData = function () {\n return this;\n };\n QuestionPanelDynamicItem.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n QuestionPanelDynamicItem.prototype.getTextProcessor = function () {\n return this.textPreProcessor;\n };\n QuestionPanelDynamicItem.ItemVariableName = \"panel\";\n QuestionPanelDynamicItem.ParentItemVariableName = \"parentPanel\";\n QuestionPanelDynamicItem.IndexVariableName = \"panelIndex\";\n return QuestionPanelDynamicItem;\n}());\n\nvar QuestionPanelDynamicTemplateSurveyImpl = /** @class */ (function () {\n function QuestionPanelDynamicTemplateSurveyImpl(data) {\n this.data = data;\n }\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getSurveyData = function () {\n return null;\n };\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getSurvey = function () {\n return this.data.getSurvey();\n };\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getTextProcessor = function () {\n return null;\n };\n return QuestionPanelDynamicTemplateSurveyImpl;\n}());\n\n/**\n * A Model for a panel dymanic question. You setup the template panel, but adding elements (any question or a panel) and assign a text to it's title, and this panel will be used as a template on creating dynamic panels. The number of panels is defined by panelCount property.\n * An end-user may dynamically add/remove panels, unless you forbidden this.\n */\nvar QuestionPanelDynamicModel = /** @class */ (function (_super) {\n __extends(QuestionPanelDynamicModel, _super);\n function QuestionPanelDynamicModel(name) {\n var _this = _super.call(this, name) || this;\n _this.loadingPanelCount = 0;\n _this.currentIndexValue = -1;\n _this.isAddingNewPanels = false;\n _this.createNewArray(\"panels\");\n _this.templateValue = _this.createAndSetupNewPanelObject();\n _this.template.renderWidth = \"100%\";\n _this.template.selectedElementInDesign = _this;\n var self = _this;\n _this.template.addElementCallback = function (element) {\n self.addOnPropertyChangedCallback(element);\n self.rebuildPanels();\n };\n _this.template.removeElementCallback = function (element) {\n self.rebuildPanels();\n };\n _this.createLocalizableString(\"confirmDeleteText\", _this);\n _this.createLocalizableString(\"keyDuplicationError\", _this);\n _this.createLocalizableString(\"panelAddText\", _this);\n _this.createLocalizableString(\"panelRemoveText\", _this);\n _this.createLocalizableString(\"panelPrevText\", _this);\n _this.createLocalizableString(\"panelNextText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"panelsState\", function () {\n self.setPanelsState();\n });\n return _this;\n }\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.setTemplatePanelSurveyImpl();\n this.setPanelsSurveyImpl();\n };\n QuestionPanelDynamicModel.prototype.assignOnPropertyChangedToTemplate = function () {\n var elements = this.template.elements;\n for (var i = 0; i < elements.length; i++) {\n this.addOnPropertyChangedCallback(elements[i]);\n }\n };\n QuestionPanelDynamicModel.prototype.addOnPropertyChangedCallback = function (element) {\n var self = this;\n element.onPropertyChanged.add(function (element, options) {\n self.onTemplateElementPropertyChanged(element, options);\n });\n if (element.isPanel) {\n element.addElementCallback = function (element) {\n self.addOnPropertyChangedCallback(element);\n };\n }\n };\n QuestionPanelDynamicModel.prototype.onTemplateElementPropertyChanged = function (element, options) {\n if (this.isLoadingFromJson || this.isDesignMode || this.panels.length == 0)\n return;\n var property = _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].findProperty(element.getType(), options.name);\n if (!property)\n return;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n var question = panels[i].getQuestionByName(element.name);\n if (!!question && question[options.name] !== options.newValue) {\n question[options.name] = options.newValue;\n }\n }\n };\n QuestionPanelDynamicModel.prototype.getType = function () {\n return \"paneldynamic\";\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.clearOnDeletingContainer = function () {\n this.panels.forEach(function (panel) {\n panel.clearOnDeletingContainer();\n });\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isAllowTitleLeft\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.removeElement = function (element) {\n return this.template.removeElement(element);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"template\", {\n /**\n * The template Panel. This panel is used as a template on creatign dynamic panels\n * @see templateElements\n * @see templateTitle\n * @see panelCount\n */\n get: function () {\n return this.templateValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getPanel = function () {\n return this.template;\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateElements\", {\n /**\n * The template Panel elements, questions and panels.\n * @see templateElements\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.template.elements;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitle\", {\n /**\n * The template Panel title property.\n * @see templateElements\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.template.title;\n },\n set: function (newValue) {\n this.template.title = newValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateTitle\", {\n get: function () {\n return this.template.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateDescription\", {\n /**\n * The template Panel description property.\n * @see templateElements\n * @see template\n * @see panelCount\n * @see templateTitle\n */\n get: function () {\n return this.template.description;\n },\n set: function (newValue) {\n this.template.description = newValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateDescription\", {\n get: function () {\n return this.template.locDescription;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"items\", {\n get: function () {\n var res = [];\n for (var i = 0; i < this.panels.length; i++) {\n res.push(this.panels[i].data);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panels\", {\n /**\n * The array of dynamic panels created based on panel template\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.getPropertyValue(\"panels\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentIndex\", {\n /**\n * The index of current active dynamical panel when the renderMode is not \"list\". If there is no dymamic panel (panelCount = 0) or renderMode equals \"list\" it returns -1, otherwise it returns a value from 0 to panelCount - 1.\n * @see currentPanel\n * @see panels\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n if (this.isRenderModeList)\n return -1;\n if (this.isDesignMode)\n return 0;\n if (this.currentIndexValue < 0 && this.panelCount > 0) {\n this.currentIndexValue = 0;\n }\n if (this.currentIndexValue >= this.panelCount) {\n this.currentIndexValue = this.panelCount - 1;\n }\n return this.currentIndexValue;\n },\n set: function (val) {\n if (this.currentIndexValue !== val) {\n if (val >= this.panelCount)\n val = this.panelCount - 1;\n this.currentIndexValue = val;\n this.fireCallback(this.currentIndexChangedCallback);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentPanel\", {\n /**\n * The current active dynamical panel when the renderMode is not \"list\". If there is no dymamic panel (panelCount = 0) or renderMode equals \"list\" it returns null.\n * @see currenIndex\n * @see panels\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n var index = this.currentIndex;\n if (index < 0 || index >= this.panels.length)\n return null;\n return this.panels[index];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDelete\", {\n /**\n * Set it to true, to show a confirmation dialog on removing a panel\n * @see ConfirmDeleteText\n */\n get: function () {\n return this.getPropertyValue(\"confirmDelete\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"confirmDelete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyName\", {\n /**\n * Set it to a question name used in the template panel and the library shows duplication error, if there are same values in different panels of this question.\n * @see keyDuplicationError\n */\n get: function () {\n return this.getPropertyValue(\"keyName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"keyName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDeleteText\", {\n /**\n * Use this property to change the default text showing in the confirmation delete dialog on removing a panel.\n */\n get: function () {\n return this.getLocalizableStringText(\"confirmDeleteText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyDuplicationError\", {\n /**\n * The duplication value error text. Set it to show the text different from the default.\n * @see keyName\n */\n get: function () {\n return this.getLocalizableStringText(\"keyDuplicationError\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelPrevText\", {\n /**\n * Use this property to change the default previous button text. Previous button shows the previous panel, change the currentPanel, when the renderMode doesn't equal to \"list\".\n * @see currentPanel\n * @see currentIndex\n * @see renderMode\n */\n get: function () {\n return this.getLocalizableStringText(\"panelPrevText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"pagePrevText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelPrevText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelPrevText\", {\n get: function () {\n return this.getLocalizableString(\"panelPrevText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelNextText\", {\n /**\n * Use this property to change the default next button text. Next button shows the next panel, change the currentPanel, when the renderMode doesn't equal to \"list\".\n * @see currentPanel\n * @see currentIndex\n * @see renderMode\n */\n get: function () {\n return this.getLocalizableStringText(\"panelNextText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"pageNextText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelNextText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelNextText\", {\n get: function () {\n return this.getLocalizableString(\"panelNextText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelAddText\", {\n /**\n * Use this property to change the default value of add panel button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"panelAddText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"addPanel\"));\n },\n set: function (value) {\n this.setLocalizableStringText(\"panelAddText\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelAddText\", {\n get: function () {\n return this.getLocalizableString(\"panelAddText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveText\", {\n /**\n * Use this property to change the default value of remove panel button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"panelRemoveText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"removePanel\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelRemoveText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelRemoveText\", {\n get: function () {\n return this.getLocalizableString(\"panelRemoveText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressTopShowing\", {\n /**\n * Returns true when the renderMode equals to \"progressTop\" or \"progressTopBottom\"\n */\n get: function () {\n return (this.renderMode == \"progressTop\" || this.renderMode == \"progressTopBottom\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressBottomShowing\", {\n /**\n * Returns true when the renderMode equals to \"progressBottom\" or \"progressTopBottom\"\n */\n get: function () {\n return (this.renderMode == \"progressBottom\" ||\n this.renderMode == \"progressTopBottom\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isPrevButtonShowing\", {\n /**\n * Returns true when currentIndex is more than 0.\n * @see currenIndex\n * @see currenPanel\n */\n get: function () {\n return this.currentIndex > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isNextButtonShowing\", {\n /**\n * Returns true when currentIndex is more than or equal 0 and less than panelCount - 1.\n * @see currenIndex\n * @see currenPanel\n * @see panelCount\n */\n get: function () {\n return this.currentIndex >= 0 && this.currentIndex < this.panelCount - 1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRangeShowing\", {\n /**\n * Returns true when showRangeInProgress equals to true, renderMode doesn't equal to \"list\" and panelCount is >= 2.\n */\n get: function () {\n return (this.showRangeInProgress && this.currentIndex >= 0 && this.panelCount > 1);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return includeHidden ? [this.template] : this.templateElements;\n };\n QuestionPanelDynamicModel.prototype.prepareValueForPanelCreating = function () {\n this.addingNewPanelsValue = this.value;\n this.isAddingNewPanels = true;\n this.isNewPanelsValueChanged = false;\n };\n QuestionPanelDynamicModel.prototype.setValueAfterPanelsCreating = function () {\n this.isAddingNewPanels = false;\n if (this.isNewPanelsValueChanged) {\n this.isValueChangingInternally = true;\n this.value = this.addingNewPanelsValue;\n this.isValueChangingInternally = false;\n }\n };\n QuestionPanelDynamicModel.prototype.getValueCore = function () {\n return this.isAddingNewPanels\n ? this.addingNewPanelsValue\n : _super.prototype.getValueCore.call(this);\n };\n QuestionPanelDynamicModel.prototype.setValueCore = function (newValue) {\n if (this.isAddingNewPanels) {\n this.isNewPanelsValueChanged = true;\n this.addingNewPanelsValue = newValue;\n }\n else {\n _super.prototype.setValueCore.call(this, newValue);\n }\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelCount\", {\n /**\n * Use this property to get/set the number of dynamic panels.\n * @see template\n * @see minPanelCount\n * @see maxPanelCount\n * @see addPanel\n * @see removePanel\n * @see removePanelUI\n */\n get: function () {\n return this.isLoadingFromJson || this.isDesignMode\n ? this.loadingPanelCount\n : this.panels.length;\n },\n set: function (val) {\n if (val < 0)\n return;\n if (this.isLoadingFromJson || this.isDesignMode) {\n this.loadingPanelCount = val;\n return;\n }\n if (val == this.panels.length || this.isDesignMode)\n return;\n this.updateBindings(\"panelCount\", val);\n this.prepareValueForPanelCreating();\n for (var i = this.panelCount; i < val; i++) {\n var panel = this.createNewPanel();\n this.panels.push(panel);\n if (this.renderMode == \"list\" && this.panelsState != \"default\") {\n if (this.panelsState === \"expand\") {\n panel.expand();\n }\n else {\n if (!!panel.title) {\n panel.collapse();\n }\n }\n }\n }\n if (val < this.panelCount)\n this.panels.splice(val, this.panelCount - val);\n this.setValueAfterPanelsCreating();\n this.setValueBasedOnPanelCount();\n this.reRunCondition();\n this.fireCallback(this.panelCountChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelsState\", {\n /**\n * Use this property to allow the end-user to collapse/expand the panels. It works only if the renderMode property equals to \"list\" and templateTitle property is not empty. The following values are available:\n *
default - the default value. User can't collapse/expand panels\n *
expanded - User can collapse/expand panels and all panels are expanded by default\n *
collapsed - User can collapse/expand panels and all panels are collapsed by default\n *
firstExpanded - User can collapse/expand panels. The first panel is expanded and others are collapsed\n * @see renderMode\n * @see templateTitle\n */\n get: function () {\n return this.getPropertyValue(\"panelsState\");\n },\n set: function (val) {\n this.setPropertyValue(\"panelsState\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setTemplatePanelSurveyImpl = function () {\n this.template.setSurveyImpl(this.isDesignMode\n ? this.surveyImpl\n : new QuestionPanelDynamicTemplateSurveyImpl(this));\n };\n QuestionPanelDynamicModel.prototype.setPanelsSurveyImpl = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var panel = this.panels[i];\n if (panel == this.template)\n continue;\n panel.setSurveyImpl(panel.data);\n }\n };\n QuestionPanelDynamicModel.prototype.setPanelsState = function () {\n if (this.isDesignMode || this.renderMode != \"list\" || !this.templateTitle)\n return;\n for (var i = 0; i < this.panels.length; i++) {\n var state = this.panelsState;\n if (state === \"firstExpanded\") {\n state = i === 0 ? \"expanded\" : \"collapsed\";\n }\n this.panels[i].state = state;\n }\n };\n QuestionPanelDynamicModel.prototype.setValueBasedOnPanelCount = function () {\n var value = this.value;\n if (!value || !Array.isArray(value))\n value = [];\n if (value.length == this.panelCount)\n return;\n for (var i = value.length; i < this.panelCount; i++)\n value.push({});\n if (value.length > this.panelCount) {\n value.splice(this.panelCount, value.length - this.panelCount);\n }\n this.isValueChangingInternally = true;\n this.value = value;\n this.isValueChangingInternally = false;\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"minPanelCount\", {\n /**\n * The minimum panel count. A user could not delete a panel if the panelCount equals to minPanelCount\n * @see panelCount\n * @see maxPanelCount\n */\n get: function () {\n return this.getPropertyValue(\"minPanelCount\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n if (val == this.minPanelCount)\n return;\n this.setPropertyValue(\"minPanelCount\", val);\n if (val > this.maxPanelCount)\n this.maxPanelCount = val;\n if (this.panelCount < val)\n this.panelCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"maxPanelCount\", {\n /**\n * The maximum panel count. A user could not add a panel if the panelCount equals to maxPanelCount\n * @see panelCount\n * @see minPanelCount\n */\n get: function () {\n return this.getPropertyValue(\"maxPanelCount\", _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount)\n val = _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount;\n if (val == this.maxPanelCount)\n return;\n this.setPropertyValue(\"maxPanelCount\", val);\n if (val < this.minPanelCount)\n this.minPanelCount = val;\n if (this.panelCount > val)\n this.panelCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowAddPanel\", {\n /**\n * Set this property to false to hide the 'Add New' button\n * @see allowRemovePanel\n */\n get: function () {\n return this.getPropertyValue(\"allowAddPanel\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowAddPanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowRemovePanel\", {\n /**\n * Set this property to false to hide the 'Remove' button\n * @see allowAddPanel\n */\n get: function () {\n return this.getPropertyValue(\"allowRemovePanel\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowRemovePanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for the template questions.\n * @see SurveyModel.questionTitleLocation\n * @see PanelModelBase.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"templateTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"templateTitleLocation\", value.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showQuestionNumbers\", {\n /**\n * Use this property to show/hide the numbers in titles in questions inside a dynamic panel.\n * By default the value is \"off\". You may set it to \"onPanel\" and the first question inside a dynamic panel will start with 1 or \"onSurvey\" to include nested questions in dymamic panels into global survey question numbering.\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\");\n },\n set: function (val) {\n this.setPropertyValue(\"showQuestionNumbers\", val);\n if (!this.isLoadingFromJson && this.survey) {\n this.survey.questionVisibilityChanged(this, this.visible);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveButtonLocation\", {\n /**\n * Use this property to change the location of the remove button relative to the panel.\n * By default the value is \"bottom\". You may set it to \"right\" and remove button will appear to the right of the panel.\n */\n get: function () {\n return this.getPropertyValue(\"panelRemoveButtonLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"panelRemoveButtonLocation\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showRangeInProgress\", {\n /**\n * Shows the range from 1 to panelCount when renderMode doesn't equal to \"list\". Set to false to hide this element.\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n return this.getPropertyValue(\"showRangeInProgress\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showRangeInProgress\", val);\n this.fireCallback(this.currentIndexChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"renderMode\", {\n /**\n * By default the property equals to \"list\" and all dynamic panels are rendered one by one on the page. You may change it to: \"progressTop\", \"progressBottom\" or \"progressTopBottom\" to render only one dynamic panel at once. The progress and navigation elements can be rendred on top, bottom or both.\n */\n get: function () {\n return this.getPropertyValue(\"renderMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderMode\", val);\n this.fireCallback(this.renderModeChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRenderModeList\", {\n /**\n * Returns true when renderMode equals to \"list\".\n * @see renderMode\n */\n get: function () {\n return this.renderMode == \"list\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setVisibleIndex = function (value) {\n if (!this.isVisible)\n return 0;\n var startIndex = this.showQuestionNumbers == \"onSurvey\" ? value : 0;\n for (var i = 0; i < this.panels.length; i++) {\n var counter = this.setPanelVisibleIndex(this.panels[i], startIndex, this.showQuestionNumbers != \"off\");\n if (this.showQuestionNumbers == \"onSurvey\") {\n startIndex += counter;\n }\n }\n _super.prototype.setVisibleIndex.call(this, this.showQuestionNumbers != \"onSurvey\" ? value : -1);\n return this.showQuestionNumbers != \"onSurvey\" ? 1 : startIndex - value;\n };\n QuestionPanelDynamicModel.prototype.setPanelVisibleIndex = function (panel, index, showIndex) {\n if (!showIndex) {\n panel.setVisibleIndex(-1);\n return 0;\n }\n return panel.setVisibleIndex(index);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canAddPanel\", {\n /**\n * Returns true when an end user may add a new panel. The question is not read only and panelCount less than maxPanelCount\n * @see isReadOnly\n * @see panelCount\n * @see maxPanelCount\n */\n get: function () {\n if (this.survey && this.survey.isDesignMode)\n return false;\n return (this.allowAddPanel &&\n !this.isReadOnly &&\n this.panelCount < this.maxPanelCount);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canRemovePanel\", {\n /**\n * Returns true when an end user may remove a panel. The question is not read only and panelCount is more than minPanelCount\n * @see isReadOnly\n * @see panelCount\n * @see minPanelCount\n */\n get: function () {\n if (this.survey && this.survey.isDesignMode)\n return false;\n return (this.allowRemovePanel &&\n !this.isReadOnly &&\n this.panelCount > this.minPanelCount);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.rebuildPanels = function () {\n var _a;\n if (this.isLoadingFromJson)\n return;\n this.prepareValueForPanelCreating();\n var panels = [];\n if (this.isDesignMode) {\n new QuestionPanelDynamicItem(this, this.template);\n panels.push(this.template);\n }\n else {\n for (var i = 0; i < this.panelCount; i++) {\n panels.push(this.createNewPanel());\n }\n }\n (_a = this.panels).splice.apply(_a, __spreadArray([0, this.panels.length], panels));\n this.setValueAfterPanelsCreating();\n this.setPanelsState();\n this.reRunCondition();\n this.fireCallback(this.panelCountChangedCallback);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultPanelValue\", {\n /**\n * If it is not empty, then this value is set to every new panel, including panels created initially, unless the defaultValue is not empty\n * @see defaultValue\n * @see defaultValueFromLastRow\n */\n get: function () {\n return this.getPropertyValue(\"defaultPanelValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultPanelValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultValueFromLastPanel\", {\n /**\n * Set it to true to copy the value into new added panel from the last panel. If defaultPanelValue is set and this property equals to true,\n * then the value for new added panel is merging.\n * @see defaultValue\n * @see defaultPanelValue\n */\n get: function () {\n return this.getPropertyValue(\"defaultValueFromLastPanel\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueFromLastPanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.isDefaultValueEmpty = function () {\n return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultPanelValue));\n };\n QuestionPanelDynamicModel.prototype.setDefaultValue = function () {\n if (this.isValueEmpty(this.defaultPanelValue) ||\n !this.isValueEmpty(this.defaultValue)) {\n _super.prototype.setDefaultValue.call(this);\n return;\n }\n if (!this.isEmpty() || this.panelCount == 0)\n return;\n var newValue = [];\n for (var i = 0; i < this.panelCount; i++) {\n newValue.push(this.defaultPanelValue);\n }\n this.value = newValue;\n };\n QuestionPanelDynamicModel.prototype.isEmpty = function () {\n var val = this.value;\n if (!val || !Array.isArray(val))\n return true;\n for (var i = 0; i < val.length; i++) {\n if (!this.isRowEmpty(val[i]))\n return false;\n }\n return true;\n };\n QuestionPanelDynamicModel.prototype.getProgressInfo = function () {\n return _survey_element__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElement\"].getProgressInfoByElements(this.panels, this.isRequired);\n };\n QuestionPanelDynamicModel.prototype.isRowEmpty = function (val) {\n for (var prop in val) {\n if (val.hasOwnProperty(prop))\n return false;\n }\n return true;\n };\n /**\n * Add a new dynamic panel based on the template Panel. It checks if canAddPanel returns true and then calls addPanel method.\n * @see template\n * @see panelCount\n * @see panels\n * @see canAddPanel\n */\n QuestionPanelDynamicModel.prototype.addPanelUI = function () {\n if (!this.canAddPanel)\n return null;\n var newPanel = this.addPanel();\n if (this.renderMode === \"list\" && this.panelsState !== \"default\") {\n newPanel.expand();\n }\n return newPanel;\n };\n /**\n * Add a new dynamic panel based on the template Panel.\n * @see template\n * @see panelCount\n * @see panels\n */\n QuestionPanelDynamicModel.prototype.addPanel = function () {\n this.panelCount++;\n if (!this.isRenderModeList) {\n this.currentIndex = this.panelCount - 1;\n }\n var newValue = this.value;\n var hasModified = false;\n if (!this.isValueEmpty(this.defaultPanelValue)) {\n if (!!newValue &&\n Array.isArray(newValue) &&\n newValue.length == this.panelCount) {\n hasModified = true;\n this.copyValue(newValue[newValue.length - 1], this.defaultPanelValue);\n }\n }\n if (this.defaultValueFromLastPanel &&\n !!newValue &&\n Array.isArray(newValue) &&\n newValue.length > 1 &&\n newValue.length == this.panelCount) {\n hasModified = true;\n this.copyValue(newValue[newValue.length - 1], newValue[newValue.length - 2]);\n }\n if (hasModified) {\n this.value = newValue;\n }\n if (this.survey)\n this.survey.dynamicPanelAdded(this);\n return this.panels[this.panelCount - 1];\n };\n QuestionPanelDynamicModel.prototype.copyValue = function (src, dest) {\n for (var key in dest) {\n src[key] = dest[key];\n }\n };\n /**\n * Call removePanel function. Do nothing is canRemovePanel returns false. If confirmDelete set to true, it shows the confirmation dialog first.\n * @param value a panel or panel index\n * @see removePanel\n * @see confirmDelete\n * @see confirmDeleteText\n * @see canRemovePanel\n *\n */\n QuestionPanelDynamicModel.prototype.removePanelUI = function (value) {\n if (!this.canRemovePanel)\n return;\n if (!this.confirmDelete || Object(_utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"confirmAction\"])(this.confirmDeleteText)) {\n this.removePanel(value);\n }\n };\n /**\n * Goes to the next panel in the PanelDynamic\n *\n */\n QuestionPanelDynamicModel.prototype.goToNextPanel = function () {\n if (this.renderMode !== \"list\" && this.currentPanel.hasErrors())\n return;\n this.currentIndex++;\n };\n /**\n * Goes to the previous panel in the PanelDynamic\n *\n */\n QuestionPanelDynamicModel.prototype.goToPrevPanel = function () {\n this.currentIndex--;\n };\n /**\n * Removes a dynamic panel from the panels array.\n * @param value a panel or panel index\n * @see panels\n * @see template\n */\n QuestionPanelDynamicModel.prototype.removePanel = function (value) {\n var index = this.getPanelIndex(value);\n if (index < 0 || index >= this.panelCount)\n return;\n var panel = this.panels[index];\n this.panels.splice(index, 1);\n this.updateBindings(\"panelCount\", this.panelCount);\n var value = this.value;\n if (!value || !Array.isArray(value) || index >= value.length)\n return;\n this.isValueChangingInternally = true;\n value.splice(index, 1);\n this.value = value;\n this.fireCallback(this.panelCountChangedCallback);\n if (this.survey)\n this.survey.dynamicPanelRemoved(this, index, panel);\n this.isValueChangingInternally = false;\n };\n QuestionPanelDynamicModel.prototype.getPanelIndex = function (val) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val))\n return val;\n var items = this.items;\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i] === val || items[i] === val)\n return i;\n }\n return -1;\n };\n QuestionPanelDynamicModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n panels[i].locStrsChanged();\n }\n };\n QuestionPanelDynamicModel.prototype.clearIncorrectValues = function () {\n for (var i = 0; i < this.panels.length; i++) {\n this.clearIncorrectValuesInPanel(i);\n }\n };\n QuestionPanelDynamicModel.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].clearErrors();\n }\n };\n QuestionPanelDynamicModel.prototype.getQuestionFromArray = function (name, index) {\n if (index >= this.panelCount)\n return null;\n return this.panels[index].getQuestionByName(name);\n };\n QuestionPanelDynamicModel.prototype.clearIncorrectValuesInPanel = function (index) {\n var panel = this.panels[index];\n panel.clearIncorrectValues();\n var val = this.value;\n var values = !!val && index < val.length ? val[index] : null;\n if (!values)\n return;\n var isChanged = false;\n for (var key in values) {\n if (this.getSharedQuestionFromArray(key, index))\n continue;\n var q = panel.getQuestionByName(key);\n if (!!q)\n continue;\n if (this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix) ||\n this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].matrixTotalValuePostFix))\n continue;\n delete values[key];\n isChanged = true;\n }\n if (isChanged) {\n val[index] = values;\n this.value = val;\n }\n };\n QuestionPanelDynamicModel.prototype.iscorrectValueWithPostPrefix = function (panel, key, postPrefix) {\n if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n return false;\n return !!panel.getQuestionByName(key.substr(0, key.indexOf(postPrefix)));\n };\n QuestionPanelDynamicModel.prototype.getSharedQuestionFromArray = function (name, panelIndex) {\n return !!this.survey && !!this.valueName\n ? (this.survey.getQuestionByValueNameFromArray(this.valueName, name, panelIndex))\n : null;\n };\n QuestionPanelDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context\n ? this.template.questions.indexOf(context) > -1\n : false;\n var prefixName = this.getValueName() + \"[0].\";\n var prefixText = this.processedTitle + \"[0].\";\n var panelObjs = new Array();\n var questions = this.template.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].addConditionObjectsByContext(panelObjs, context);\n }\n for (var i = 0; i < panelObjs.length; i++) {\n objects.push({\n name: prefixName + panelObjs[i].name,\n text: prefixText + panelObjs[i].text,\n question: panelObjs[i].question,\n });\n }\n if (hasContext) {\n for (var i = 0; i < panelObjs.length; i++) {\n if (panelObjs[i].question == context)\n continue;\n objects.push({\n name: \"panel.\" + panelObjs[i].name,\n text: \"panel.\" + panelObjs[i].text,\n question: panelObjs[i].question,\n });\n }\n }\n };\n QuestionPanelDynamicModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this, operator, path);\n var questionName = path;\n var pos = path.indexOf(\".\");\n if (pos > -1) {\n questionName = path.substr(0, pos);\n path = path.substr(pos + 1);\n }\n var question = this.template.getQuestionByName(questionName);\n if (!question)\n return null;\n return question.getConditionJson(operator, path);\n };\n QuestionPanelDynamicModel.prototype.onReadOnlyChanged = function () {\n var readOnly = this.isReadOnly;\n this.template.readOnly = readOnly;\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].readOnly = readOnly;\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n QuestionPanelDynamicModel.prototype.onSurveyLoad = function () {\n this.template.readOnly = this.isReadOnly;\n this.template.onSurveyLoad();\n if (this.loadingPanelCount > 0) {\n this.panelCount = this.loadingPanelCount;\n }\n if (this.isDesignMode) {\n this.rebuildPanels();\n }\n this.setPanelsSurveyImpl();\n this.setPanelsState();\n this.assignOnPropertyChangedToTemplate();\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionPanelDynamicModel.prototype.onFirstRendering = function () {\n this.template.onFirstRendering();\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].onFirstRendering();\n }\n _super.prototype.onFirstRendering.call(this);\n };\n QuestionPanelDynamicModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runPanelsCondition(values, properties);\n };\n QuestionPanelDynamicModel.prototype.reRunCondition = function () {\n if (!this.data)\n return;\n this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n };\n QuestionPanelDynamicModel.prototype.runPanelsCondition = function (values, properties) {\n var cachedValues = {};\n if (values && values instanceof Object) {\n cachedValues = JSON.parse(JSON.stringify(values));\n }\n for (var i = 0; i < this.panels.length; i++) {\n var panelValues = this.getPanelItemData(this.panels[i].data);\n //Should be unique for every panel due async expression support\n var newValues = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(cachedValues);\n newValues[QuestionPanelDynamicItem.ItemVariableName.toLowerCase()] = panelValues;\n newValues[QuestionPanelDynamicItem.IndexVariableName.toLowerCase()] = i;\n this.panels[i].runCondition(newValues, properties);\n }\n };\n QuestionPanelDynamicModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].onAnyValueChanged(name);\n this.panels[i].onAnyValueChanged(QuestionPanelDynamicItem.ItemVariableName);\n }\n };\n QuestionPanelDynamicModel.prototype.hasKeysDuplicated = function (fireCallback, rec) {\n if (rec === void 0) { rec = null; }\n var keyValues = [];\n var res;\n for (var i = 0; i < this.panels.length; i++) {\n res =\n this.isValueDuplicated(this.panels[i], keyValues, rec, fireCallback) ||\n res;\n }\n return res;\n };\n QuestionPanelDynamicModel.prototype.updatePanelsContainsErrors = function () {\n var question = this.changingValueQuestion;\n var parent = question.parent;\n while (!!parent) {\n parent.updateContainsErrors();\n parent = parent.parent;\n }\n this.updateContainsErrors();\n };\n QuestionPanelDynamicModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n if (this.isValueChangingInternally)\n return false;\n var res = false;\n if (!!this.changingValueQuestion) {\n var res = this.changingValueQuestion.hasErrors(fireCallback, rec);\n res = this.hasKeysDuplicated(fireCallback, rec) || res;\n this.updatePanelsContainsErrors();\n return res;\n }\n else {\n var errosInPanels = this.hasErrorInPanels(fireCallback, rec);\n return _super.prototype.hasErrors.call(this, fireCallback) || errosInPanels;\n }\n };\n QuestionPanelDynamicModel.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n if (panels[i].containsErrors)\n return true;\n }\n return false;\n };\n QuestionPanelDynamicModel.prototype.getIsAnswered = function () {\n if (!_super.prototype.getIsAnswered.call(this))\n return false;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n var visibleQuestions = [];\n panels[i].addQuestionsToList(visibleQuestions, true);\n for (var j = 0; j < visibleQuestions.length; j++) {\n if (!visibleQuestions[j].isAnswered)\n return false;\n }\n }\n return true;\n };\n QuestionPanelDynamicModel.prototype.clearValueIfInvisible = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n questions[j].clearValueIfInvisible();\n }\n }\n _super.prototype.clearValueIfInvisible.call(this);\n };\n QuestionPanelDynamicModel.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n if (questions[j].isRunningValidators)\n return true;\n }\n }\n return false;\n };\n QuestionPanelDynamicModel.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n var errors = questions[j].getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n }\n return result;\n };\n QuestionPanelDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var values = this.getUnbindValue(value);\n if (!values || !Array.isArray(values))\n return values;\n for (var i = 0; i < this.panels.length && i < values.length; i++) {\n var val = values[i];\n if (!val)\n continue;\n values[i] = this.getPanelDisplayValue(i, val, keysAsText);\n }\n return values;\n };\n QuestionPanelDynamicModel.prototype.getPanelDisplayValue = function (panelIndex, val, keysAsText) {\n if (!val)\n return val;\n var panel = this.panels[panelIndex];\n var keys = Object.keys(val);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var question = panel.getQuestionByValueName(key);\n if (!question) {\n question = this.getSharedQuestionFromArray(key, panelIndex);\n }\n if (!!question) {\n var qValue = question.getDisplayValue(keysAsText, val[key]);\n val[key] = qValue;\n if (keysAsText && !!question.title && question.title !== key) {\n val[question.title] = qValue;\n delete val[key];\n }\n }\n }\n return val;\n };\n QuestionPanelDynamicModel.prototype.hasErrorInPanels = function (fireCallback, rec) {\n var res = false;\n var panels = this.panels;\n var keyValues = [];\n for (var i = 0; i < panels.length; i++) {\n this.setOnCompleteAsyncInPanel(panels[i]);\n }\n for (var i = 0; i < panels.length; i++) {\n var pnlError = panels[i].hasErrors(fireCallback, !!rec && rec.focuseOnFirstError, rec);\n pnlError = this.isValueDuplicated(panels[i], keyValues, rec) || pnlError;\n if (!this.isRenderModeList && pnlError && !res) {\n this.currentIndex = i;\n }\n res = pnlError || res;\n }\n return res;\n };\n QuestionPanelDynamicModel.prototype.setOnCompleteAsyncInPanel = function (panel) {\n var _this = this;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onCompletedAsyncValidators = function (hasErrors) {\n _this.raiseOnCompletedAsyncValidators();\n };\n }\n };\n QuestionPanelDynamicModel.prototype.isValueDuplicated = function (panel, keyValues, rec, fireCallback) {\n if (!this.keyName)\n return false;\n var question = panel.getQuestionByValueName(this.keyName);\n if (!question || question.isEmpty())\n return false;\n var value = question.value;\n if (!!this.changingValueQuestion &&\n question != this.changingValueQuestion) {\n question.hasErrors(fireCallback, rec);\n }\n for (var i = 0; i < keyValues.length; i++) {\n if (value == keyValues[i]) {\n question.addError(new _error__WEBPACK_IMPORTED_MODULE_7__[\"KeyDuplicationError\"](this.keyDuplicationError, this));\n if (!!rec && !rec.firstErrorQuestion) {\n rec.firstErrorQuestion = question;\n }\n return true;\n }\n }\n keyValues.push(value);\n return false;\n };\n QuestionPanelDynamicModel.prototype.createNewPanel = function () {\n var panel = this.createAndSetupNewPanelObject();\n var json = this.template.toJSON();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"JsonObject\"]().toObject(json, panel);\n panel.renderWidth = \"100%\";\n panel.updateCustomWidgets();\n new QuestionPanelDynamicItem(this, panel);\n panel.onFirstRendering();\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].setParentQuestion(this);\n }\n return panel;\n };\n QuestionPanelDynamicModel.prototype.createAndSetupNewPanelObject = function () {\n var panel = this.createNewPanelObject();\n panel.isInteractiveDesignElement = false;\n var self = this;\n panel.onGetQuestionTitleLocation = function () {\n return self.getTemplateQuestionTitleLocation();\n };\n return panel;\n };\n QuestionPanelDynamicModel.prototype.getTemplateQuestionTitleLocation = function () {\n return this.templateTitleLocation != \"default\"\n ? this.templateTitleLocation\n : this.getTitleLocationCore();\n };\n QuestionPanelDynamicModel.prototype.createNewPanelObject = function () {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].createClass(\"panel\");\n };\n QuestionPanelDynamicModel.prototype.setPanelCountBasedOnValue = function () {\n if (this.isValueChangingInternally || this.isDesignMode)\n return;\n var val = this.value;\n var newPanelCount = val && Array.isArray(val) ? val.length : 0;\n if (newPanelCount == 0 && this.loadingPanelCount > 0) {\n newPanelCount = this.loadingPanelCount;\n }\n this.panelCount = newPanelCount;\n };\n QuestionPanelDynamicModel.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, false);\n this.setPanelCountBasedOnValue();\n for (var i = 0; i < this.panels.length; i++) {\n this.panelUpdateValueFromSurvey(this.panels[i]);\n }\n this.updateIsAnswered();\n };\n QuestionPanelDynamicModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n for (var i = 0; i < this.panels.length; i++) {\n this.panelSurveyValueChanged(this.panels[i]);\n }\n if (newValue === undefined) {\n this.setValueBasedOnPanelCount();\n }\n };\n QuestionPanelDynamicModel.prototype.panelUpdateValueFromSurvey = function (panel) {\n var questions = panel.questions;\n var values = this.getPanelItemData(panel.data);\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n q.updateValueFromSurvey(values[q.getValueName()]);\n q.updateCommentFromSurvey(values[q.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix]);\n }\n };\n QuestionPanelDynamicModel.prototype.panelSurveyValueChanged = function (panel) {\n var questions = panel.questions;\n var values = this.getPanelItemData(panel.data);\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n q.onSurveyValueChanged(values[q.getValueName()]);\n }\n };\n QuestionPanelDynamicModel.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n if (this.isDesignMode) {\n this.setTemplatePanelSurveyImpl();\n this.rebuildPanels();\n }\n };\n //IQuestionPanelDynamicData\n QuestionPanelDynamicModel.prototype.getItemIndex = function (item) {\n var res = this.items.indexOf(item);\n return res > -1 ? res : this.items.length;\n };\n QuestionPanelDynamicModel.prototype.getPanelItemData = function (item) {\n var items = this.items;\n var index = items.indexOf(item);\n var qValue = this.value;\n if (index < 0 && Array.isArray(qValue) && qValue.length > items.length) {\n index = items.length;\n }\n if (index < 0)\n return {};\n if (!qValue || !Array.isArray(qValue) || qValue.length <= index)\n return {};\n return qValue[index];\n };\n QuestionPanelDynamicModel.prototype.setPanelItemData = function (item, name, val) {\n if (this.isSetPanelItemData && this.isSetPanelItemData.indexOf(name) > -1)\n return;\n if (!this.isSetPanelItemData)\n this.isSetPanelItemData = [];\n this.isSetPanelItemData.push(name);\n var items = this.items;\n var index = items.indexOf(item);\n if (index < 0)\n index = items.length;\n var qValue = this.getUnbindValue(this.value);\n if (!qValue || !Array.isArray(qValue)) {\n qValue = [];\n }\n if (qValue.length <= index) {\n for (var i = qValue.length; i <= index; i++) {\n qValue.push({});\n }\n }\n if (!qValue[index])\n qValue[index] = {};\n if (!this.isValueEmpty(val)) {\n qValue[index][name] = val;\n }\n else {\n delete qValue[index][name];\n }\n if (index >= 0 && index < this.panels.length) {\n this.changingValueQuestion = this.panels[index].getQuestionByValueName(name);\n }\n this.value = qValue;\n this.changingValueQuestion = null;\n if (this.survey) {\n var options = {\n question: this,\n panel: item.panel,\n name: name,\n itemIndex: index,\n itemValue: qValue[index],\n value: val,\n };\n this.survey.dynamicPanelItemValueChanged(this, options);\n }\n var index = this.isSetPanelItemData.indexOf(name);\n if (index > -1) {\n this.isSetPanelItemData.splice(index, 1);\n }\n };\n QuestionPanelDynamicModel.prototype.getRootData = function () {\n return this.data;\n };\n QuestionPanelDynamicModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n questionPlainData.isNode = true;\n questionPlainData.data = this.panels.map(function (panel, index) {\n var panelDataItem = {\n name: panel.name || index,\n title: panel.title || \"Panel\",\n value: panel.getValue(),\n displayValue: panel.getValue(),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: true,\n data: panel.questions\n .map(function (question) { return question.getPlainData(options); })\n .filter(function (d) { return !!d; }),\n };\n (options.calculations || []).forEach(function (calculation) {\n panelDataItem[calculation.propertyName] = panel[calculation.propertyName];\n });\n return panelDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionPanelDynamicModel.prototype.updateElementCss = function (reNew) {\n _super.prototype.updateElementCss.call(this, reNew);\n for (var i = 0; i < this.panels.length; i++) {\n var el = this.panels[i];\n el.updateElementCss(reNew);\n }\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"progressText\", {\n get: function () {\n var rangeMax = this.panelCount;\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"panelDynamicProgressText\")[\"format\"](this.currentIndex + 1, rangeMax);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getPanelWrapperCss = function () {\n var cssClasses = this.cssClasses.panelWrapper;\n if (this.panelRemoveButtonLocation === \"right\") {\n cssClasses += \" \" + this.cssClasses.panelWrapperInRow;\n }\n return cssClasses;\n };\n QuestionPanelDynamicModel.prototype.getPanelRemoveButtonCss = function () {\n var cssClasses = this.cssClasses.button + \" \" + this.cssClasses.buttonRemove;\n if (this.panelRemoveButtonLocation === \"right\") {\n cssClasses += \" \" + this.cssClasses.buttonRemoveRight;\n }\n return cssClasses;\n };\n return QuestionPanelDynamicModel;\n}(_question__WEBPACK_IMPORTED_MODULE_4__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].addClass(\"paneldynamic\", [\n {\n name: \"templateElements\",\n alternativeName: \"questions\",\n visible: false,\n isLightSerializable: false,\n },\n { name: \"templateTitle:text\", serializationProperty: \"locTemplateTitle\" },\n {\n name: \"templateDescription:text\",\n serializationProperty: \"locTemplateDescription\",\n },\n { name: \"allowAddPanel:boolean\", default: true },\n { name: \"allowRemovePanel:boolean\", default: true },\n {\n name: \"panelCount:number\",\n isBindable: true,\n default: 0,\n choices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n },\n { name: \"minPanelCount:number\", default: 0, minValue: 0 },\n {\n name: \"maxPanelCount:number\",\n default: _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount,\n },\n \"defaultPanelValue:panelvalue\",\n \"defaultValueFromLastPanel:boolean\",\n {\n name: \"panelsState\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\", \"firstExpanded\"],\n },\n { name: \"keyName\" },\n {\n name: \"keyDuplicationError\",\n serializationProperty: \"locKeyDuplicationError\",\n },\n { name: \"confirmDelete:boolean\" },\n {\n name: \"confirmDeleteText\",\n serializationProperty: \"locConfirmDeleteText\",\n },\n { name: \"panelAddText\", serializationProperty: \"locPanelAddText\" },\n { name: \"panelRemoveText\", serializationProperty: \"locPanelRemoveText\" },\n { name: \"panelPrevText\", serializationProperty: \"locPanelPrevText\" },\n { name: \"panelNextText\", serializationProperty: \"locPanelNextText\" },\n {\n name: \"showQuestionNumbers\",\n default: \"off\",\n choices: [\"off\", \"onPanel\", \"onSurvey\"],\n },\n { name: \"showRangeInProgress:boolean\", default: true },\n {\n name: \"renderMode\",\n default: \"list\",\n choices: [\"list\", \"progressTop\", \"progressBottom\", \"progressTopBottom\"],\n },\n {\n name: \"templateTitleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\"],\n },\n {\n name: \"panelRemoveButtonLocation\",\n default: \"bottom\",\n choices: [\"bottom\", \"right\"],\n },\n], function () {\n return new QuestionPanelDynamicModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"QuestionFactory\"].Instance.registerQuestion(\"paneldynamic\", function (name) {\n return new QuestionPanelDynamicModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_radiogroup.ts\":\n/*!************************************!*\\\n !*** ./src/question_radiogroup.ts ***!\n \\************************************/\n/*! exports provided: QuestionRadiogroupModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return QuestionRadiogroupModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a radiogroup question.\n */\nvar QuestionRadiogroupModel = /** @class */ (function (_super) {\n __extends(QuestionRadiogroupModel, _super);\n function QuestionRadiogroupModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionRadiogroupModel.prototype.getType = function () {\n return \"radiogroup\";\n };\n QuestionRadiogroupModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"selectedItem\", {\n /**\n * Return the selected item in the radio group. Returns null if the value is empty\n */\n get: function () {\n if (this.isEmpty())\n return null;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"showClearButton\", {\n /**\n * Show \"clear button\" flag.\n */\n get: function () {\n return this.getPropertyValue(\"showClearButton\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showClearButton\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"canShowClearButton\", {\n get: function () {\n return this.showClearButton && !this.isReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"clearButtonCaption\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"clearCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n return QuestionRadiogroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"radiogroup\", [{ name: \"showClearButton:boolean\", default: false }], function () {\n return new QuestionRadiogroupModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"radiogroup\", function (name) {\n var q = new QuestionRadiogroupModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_ranking.ts\":\n/*!*********************************!*\\\n !*** ./src/question_ranking.ts ***!\n \\*********************************/\n/*! exports provided: QuestionRankingModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return QuestionRankingModel; });\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/is-mobile */ \"./src/utils/is-mobile.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar Sortable = sortablejs__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/**\n * A Model for a ranking question\n */\nvar QuestionRankingModel = /** @class */ (function (_super) {\n __extends(QuestionRankingModel, _super);\n function QuestionRankingModel(name) {\n var _this = _super.call(this, name) || this;\n _this.domNode = null;\n _this.sortableInst = null;\n _this.handleKeydown = function (event) {\n var key = event.key;\n var array = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n var index = [].indexOf.call(array, event.target);\n if (key === \"ArrowUp\" && index) {\n _this.handleArrowUp(index);\n }\n if (key === \"ArrowDown\" && index !== array.length - 1) {\n _this.handleArrowDown(index);\n }\n };\n _this.handleArrowUp = function (index) {\n var array = _this.sortableInst.toArray();\n _this.moveArrayItemBack(array, index);\n _this.sortableInst.sort(array);\n _this.syncNumbers();\n _this.setValueFromUI();\n _this.focusItem(index - 1);\n };\n _this.handleArrowDown = function (index) {\n var array = _this.sortableInst.toArray();\n _this.moveArrayItemForward(array, index);\n _this.sortableInst.sort(array);\n _this.syncNumbers();\n _this.setValueFromUI();\n _this.focusItem(index + 1);\n };\n _this.moveArrayItemBack = function (array, index) {\n var _a;\n _a = [array[index - 1], array[index]], array[index] = _a[0], array[index - 1] = _a[1];\n };\n _this.moveArrayItemForward = function (array, index) {\n var _a;\n _a = [array[index + 1], array[index]], array[index] = _a[0], array[index + 1] = _a[1];\n };\n _this.focusItem = function (index) {\n var itemsNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n itemsNodes[index].focus();\n };\n _this.setValueFromUI = function () {\n var value = [];\n var textNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.controlLabel);\n textNodes.forEach(function (textNode, index) {\n var innerText = textNode.innerText;\n _this.visibleChoices.forEach(function (visibleChoice) {\n if (innerText === visibleChoice.text) {\n value.push(visibleChoice.value);\n }\n });\n });\n _this.value = value;\n };\n _this.syncNumbers = function () {\n if (!_this.domNode)\n return;\n var selector = \".\" +\n _this.cssClasses.item +\n \":not(.\" +\n _this.cssClasses.itemDragMod +\n \")\" +\n \" .\" +\n _this.cssClasses.itemIndex;\n var indexNodes = _this.domNode.querySelectorAll(selector);\n indexNodes.forEach(function (indexNode, index) {\n indexNode.innerText = _this.getNumberByIndex(index);\n });\n };\n _this.setGhostText = function (text) {\n var indexNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.itemIndex);\n var ghostNode = indexNodes[indexNodes.length - 1];\n ghostNode.innerText = text;\n };\n return _this;\n }\n QuestionRankingModel.prototype.getType = function () {\n return \"ranking\";\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"isIndeterminate\", {\n get: function () {\n return !this.value || this.value.length === 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRankingModel.prototype, \"rootClass\", {\n get: function () {\n var css = this.cssClasses;\n if (_utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"IsMobile\"])\n return css.root + \" \" + css.rootMobileMod;\n return css.root;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.getNumberByIndex = function (index) {\n return this.isIndeterminate ? \"\\u2013\" : index + 1 + \"\";\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"rankingChoices\", {\n get: function () {\n var result = [];\n var value = this.value;\n var visibleChoices = this.removeOtherChoiceFromChoices(this.visibleChoices);\n if (this.isIndeterminate) {\n result = visibleChoices;\n }\n else {\n result = this.mergeValueAndVisibleChoices(value, visibleChoices);\n }\n // ranking question with only one choice doesn't make sense\n if (result.length === 1)\n result = [];\n return result;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.removeOtherChoiceFromChoices = function (choices) {\n var result = choices;\n choices.forEach(function (choice, index) {\n if (choice.value === \"other\") {\n result.splice(index, 1); // remove other choice\n }\n });\n return result;\n };\n //cross framework initialization\n QuestionRankingModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el) {\n this.initSortable(el);\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n //cross framework destroy\n QuestionRankingModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (this.sortableInst)\n this.sortableInst.destroy();\n _super.prototype.beforeDestroyQuestionElement.call(this, el);\n };\n QuestionRankingModel.prototype.supportSelectAll = function () {\n return false;\n };\n QuestionRankingModel.prototype.supportOther = function () {\n return false;\n };\n QuestionRankingModel.prototype.supportNone = function () {\n return false;\n };\n // to make \"carry forward\" feature work properly with ranking\n QuestionRankingModel.prototype.onVisibleChoicesChanged = function () {\n _super.prototype.onVisibleChoicesChanged.call(this);\n if (this.isIndeterminate)\n return;\n this.value = this.rankingChoices.map(function (choice) { return choice.value; });\n };\n QuestionRankingModel.prototype.mergeValueAndVisibleChoices = function (value, visibleChoices) {\n var length = visibleChoices.length;\n var result = [];\n result.length = length;\n for (var i = 0; i < length; i++) {\n var choice = visibleChoices[i];\n var index = value.indexOf(choice.value);\n if (index !== -1) {\n result.splice(index, 1, choice);\n }\n else {\n result.splice(result.length - 1, 0, choice);\n }\n }\n result = result.filter(function (choice) { return !!choice; });\n return result;\n };\n QuestionRankingModel.prototype.initSortable = function (domNode) {\n if (!domNode)\n return;\n var self = this;\n self.domNode = domNode;\n if (this.isReadOnly)\n return;\n if (this.isDesignMode)\n return;\n self.sortableInst = new Sortable(domNode, {\n animation: 100,\n forceFallback: true,\n delay: 200,\n delayOnTouchOnly: true,\n handle: _utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"IsMobile\"]\n ? \".\" + self.cssClasses.itemIconContainer\n : \".\" + self.cssClasses.itemContent,\n ghostClass: self.cssClasses.itemGhostMod,\n dragClass: self.cssClasses.itemDragMod,\n onStart: function (evt) {\n Sortable.ghost.style.opacity = 1;\n domNode.className += \" \" + self.cssClasses.rootDragMod;\n if (self.isIndeterminate) {\n self.setGhostText(evt.oldIndex + 1);\n }\n },\n onEnd: function () {\n domNode.className = domNode.className.replace(\" \" + self.cssClasses.rootDragMod, \"\");\n self.setValueFromUI();\n },\n onChange: function (evt) {\n if (!self.isIndeterminate)\n self.syncNumbers();\n self.setGhostText(evt.newIndex + 1);\n },\n });\n };\n return QuestionRankingModel;\n}(_question_checkbox__WEBPACK_IMPORTED_MODULE_3__[\"QuestionCheckboxModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"ranking\", [\n { name: \"hasOther\", visible: false, isSerializable: false },\n { name: \"otherText\", visible: false, isSerializable: false },\n { name: \"otherErrorText\", visible: false, isSerializable: false },\n { name: \"storeOthersAsComment\", visible: false, isSerializable: false },\n { name: \"hasNone\", visible: false, isSerializable: false },\n { name: \"noneText\", visible: false, isSerializable: false },\n { name: \"hasSelectAll\", visible: false, isSerializable: false },\n { name: \"selectAllText\", visible: false, isSerializable: false },\n { name: \"colCount:number\", visible: false, isSerializable: false },\n { name: \"maxSelectedChoices\", visible: false, isSerializable: false },\n], function () {\n return new QuestionRankingModel(\"\");\n}, \"checkbox\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"ranking\", function (name) {\n var q = new QuestionRankingModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_rating.ts\":\n/*!********************************!*\\\n !*** ./src/question_rating.ts ***!\n \\********************************/\n/*! exports provided: QuestionRatingModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return QuestionRatingModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n/**\n * A Model for a rating question.\n */\nvar QuestionRatingModel = /** @class */ (function (_super) {\n __extends(QuestionRatingModel, _super);\n function QuestionRatingModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createItemValues(\"rateValues\");\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rateValues\", function () {\n self.fireCallback(self.rateValuesChangedCallback);\n });\n _this.onPropertyChanged.add(function (sender, options) {\n if (options.name == \"rateMin\" ||\n options.name == \"rateMax\" ||\n options.name == \"rateStep\") {\n self.fireCallback(self.rateValuesChangedCallback);\n }\n });\n var locMinRateDescriptionValue = _this.createLocalizableString(\"minRateDescription\", _this, true);\n var locMaxRateDescriptionValue = _this.createLocalizableString(\"maxRateDescription\", _this, true);\n locMinRateDescriptionValue.onGetTextCallback = function (text) {\n return text ? text + \" \" : text;\n };\n locMaxRateDescriptionValue.onGetTextCallback = function (text) {\n return text ? \" \" + text : text;\n };\n return _this;\n }\n QuestionRatingModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.fireCallback(this.rateValuesChangedCallback);\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"rateValues\", {\n /**\n * The list of rate items. Every item has value and text. If text is empty, the value is rendered. The item text supports markdown. If it is empty the array is generated by using rateMin, rateMax and rateStep properties.\n * @see rateMin\n * @see rateMax\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateValues\");\n },\n set: function (val) {\n this.setPropertyValue(\"rateValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateMin\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the first value in the rating. The default value is 1.\n * @see rateValues\n * @see rateMax\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateMin\");\n },\n set: function (val) {\n if (!this.isLoadingFromJson && val > this.rateMax - this.rateStep)\n val = this.rateMax - this.rateStep;\n this.setPropertyValue(\"rateMin\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateMax\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the last value in the rating. The default value is 5.\n * @see rateValues\n * @see rateMin\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateMax\");\n },\n set: function (val) {\n if (!this.isLoadingFromJson && val < this.rateMin + this.rateStep)\n val = this.rateMin + this.rateStep;\n this.setPropertyValue(\"rateMax\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateStep\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the step value. The number of rate values are (rateMax - rateMin) / rateStep. The default value is 1.\n * @see rateValues\n * @see rateMin\n * @see rateMax\n */\n get: function () {\n return this.getPropertyValue(\"rateStep\");\n },\n set: function (val) {\n if (val <= 0)\n val = 1;\n if (!this.isLoadingFromJson && val > this.rateMax - this.rateMin)\n val = this.rateMax - this.rateMin;\n this.setPropertyValue(\"rateStep\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionRatingModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var res = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getTextOrHtmlByValue(this.visibleRateValues, value);\n return !!res ? res : value;\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"visibleRateValues\", {\n get: function () {\n if (this.rateValues.length > 0)\n return this.rateValues;\n var res = [];\n var value = this.rateMin;\n var step = this.rateStep;\n while (value <= this.rateMax &&\n res.length < _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].ratingMaximumRateValueCount) {\n res.push(new _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"](value));\n value = this.correctValue(value + step, step);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRatingModel.prototype.correctValue = function (value, step) {\n if (!value)\n return value;\n if (Math.round(value) == value)\n return value;\n var fr = 0;\n while (Math.round(step) != step) {\n step *= 10;\n fr++;\n }\n return parseFloat(value.toFixed(fr));\n };\n QuestionRatingModel.prototype.getType = function () {\n return \"rating\";\n };\n QuestionRatingModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n QuestionRatingModel.prototype.supportComment = function () {\n return true;\n };\n QuestionRatingModel.prototype.supportOther = function () {\n return true;\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"minRateDescription\", {\n /**\n * The description of minimum (first) item.\n */\n get: function () {\n return this.getLocalizableStringText(\"minRateDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"minRateDescription\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMinRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"minRateDescription\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"maxRateDescription\", {\n /**\n * The description of maximum (last) item.\n */\n get: function () {\n return this.getLocalizableStringText(\"maxRateDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"maxRateDescription\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMaxRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"maxRateDescription\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionRatingModel.prototype.valueToData = function (val) {\n if (this.rateValues.length > 0) {\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(this.rateValues, val);\n return !!item ? item.value : val;\n }\n return !isNaN(val) ? parseFloat(val) : val;\n };\n /**\n * Click value again to clear.\n */\n QuestionRatingModel.prototype.setValueFromClick = function (value) {\n if (this.value === parseFloat(value)) {\n this.clearValue();\n }\n else {\n this.value = value;\n }\n };\n QuestionRatingModel.prototype.getItemClass = function (item) {\n var itemCss = this.cssClasses.item;\n var selected = this.cssClasses.selected;\n var disabled = this.cssClasses.itemDisabled;\n var isSelected = this.value == item.value;\n var isDisabled = this.isReadOnly && !item.isEnabled;\n var allowHover = !isDisabled &&\n !isSelected &&\n !(!!this.survey && this.survey.isDesignMode);\n var result = itemCss;\n if (this.value == item.value) {\n result += \" \" + selected;\n }\n if (this.isReadOnly) {\n result += \" \" + disabled;\n }\n if (allowHover) {\n result += \" \" + this.cssClasses.itemHover;\n }\n return result;\n };\n return QuestionRatingModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"rating\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n {\n name: \"rateValues:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"choices_Item\");\n },\n },\n { name: \"rateMin:number\", default: 1 },\n { name: \"rateMax:number\", default: 5 },\n { name: \"rateStep:number\", default: 1, minValue: 0.1 },\n {\n name: \"minRateDescription\",\n alternativeName: \"mininumRateDescription\",\n serializationProperty: \"locMinRateDescription\",\n },\n {\n name: \"maxRateDescription\",\n alternativeName: \"maximumRateDescription\",\n serializationProperty: \"locMaxRateDescription\",\n },\n], function () {\n return new QuestionRatingModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"rating\", function (name) {\n return new QuestionRatingModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_signaturepad.ts\":\n/*!**************************************!*\\\n !*** ./src/question_signaturepad.ts ***!\n \\**************************************/\n/*! exports provided: QuestionSignaturePadModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return QuestionSignaturePadModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var signature_pad__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! signature_pad */ \"./node_modules/signature_pad/dist/signature_pad.mjs\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar defaultWidth = 300;\nvar defaultHeight = 200;\nfunction resizeCanvas(canvas) {\n var context = canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio ||\n 1;\n var ratio = devicePixelRatio / backingStoreRatio;\n var oldWidth = canvas.width;\n var oldHeight = canvas.height;\n canvas.width = oldWidth * ratio;\n canvas.height = oldHeight * ratio;\n canvas.style.width = oldWidth + \"px\";\n canvas.style.height = oldHeight + \"px\";\n context.scale(ratio, ratio);\n}\n/**\n * A Model for signature pad question.\n */\nvar QuestionSignaturePadModel = /** @class */ (function (_super) {\n __extends(QuestionSignaturePadModel, _super);\n function QuestionSignaturePadModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionSignaturePadModel.prototype.getCssRoot = function (cssClasses) {\n var classes = _super.prototype.getCssRoot.call(this, cssClasses);\n if (\"\" + this.width === \"300\") {\n classes += \" \" + cssClasses.small;\n }\n return classes;\n };\n QuestionSignaturePadModel.prototype.updateValue = function () {\n if (this.signaturePad) {\n var data = this.signaturePad.toDataURL(this.dataFormat);\n this.value = data;\n }\n };\n QuestionSignaturePadModel.prototype.getType = function () {\n return \"signaturepad\";\n };\n QuestionSignaturePadModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el) {\n this.initSignaturePad(el);\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n QuestionSignaturePadModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (!!el) {\n this.destroySignaturePad(el);\n }\n };\n QuestionSignaturePadModel.prototype.initSignaturePad = function (el) {\n var _this = this;\n var canvas = el.getElementsByTagName(\"canvas\")[0];\n var buttonEl = el.getElementsByTagName(\"button\")[0];\n var signaturePad = new signature_pad__WEBPACK_IMPORTED_MODULE_3__[\"default\"](canvas, { backgroundColor: \"#ffffff\" });\n if (this.isInputReadOnly) {\n signaturePad.off();\n }\n buttonEl.onclick = function () {\n _this.value = undefined;\n };\n this.readOnlyChangedCallback = function () {\n if (!_this.allowClear || _this.isInputReadOnly) {\n signaturePad.off();\n buttonEl.style.display = \"none\";\n }\n else {\n signaturePad.on();\n buttonEl.style.display = \"block\";\n }\n };\n signaturePad.penColor = this.penColor;\n signaturePad.backgroundColor = this.backgroundColor;\n signaturePad.onBegin = function () {\n _this.isDrawingValue = true;\n canvas.focus();\n };\n signaturePad.onEnd = function () {\n _this.isDrawingValue = false;\n _this.updateValue();\n };\n var updateValueHandler = function () {\n var data = _this.value;\n canvas.width = _this.width || defaultWidth;\n canvas.height = _this.height || defaultHeight;\n resizeCanvas(canvas);\n if (!data) {\n signaturePad.clear();\n }\n else {\n signaturePad.fromDataURL(data);\n }\n };\n this.valueChangedCallback = updateValueHandler;\n updateValueHandler();\n this.readOnlyChangedCallback();\n this.signaturePad = signaturePad;\n var propertyChangedHandler = function (sender, options) {\n if (options.name === \"width\" || options.name === \"height\") {\n updateValueHandler();\n }\n };\n this.onPropertyChanged.add(propertyChangedHandler);\n this.signaturePad.propertyChangedHandler = propertyChangedHandler;\n };\n QuestionSignaturePadModel.prototype.destroySignaturePad = function (el) {\n if (this.signaturePad) {\n this.onPropertyChanged.remove(this.signaturePad.propertyChangedHandler);\n this.signaturePad.off();\n }\n this.readOnlyChangedCallback = null;\n this.signaturePad = null;\n };\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"width\", {\n /**\n * Use it to set the specific width for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"width\", 300);\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"height\", {\n /**\n * Use it to set the specific height for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"height\", 200);\n },\n set: function (val) {\n this.setPropertyValue(\"height\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"allowClear\", {\n /**\n * Use it to clear content of the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"allowClear\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowClear\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"penColor\", {\n /**\n * Use it to set pen color for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"penColor\", \"#1ab394\");\n },\n set: function (val) {\n this.setPropertyValue(\"penColor\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"backgroundColor\", {\n /**\n * Use it to set background color for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"backgroundColor\", \"#ffffff\");\n },\n set: function (val) {\n this.setPropertyValue(\"backgroundColor\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"clearButtonCaption\", {\n /**\n * The clear signature button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"clearCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionSignaturePadModel.prototype.needShowPlaceholder = function () {\n return !this.isDrawingValue && this.isEmpty();\n };\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"placeHolderText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"signaturePlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n ], QuestionSignaturePadModel.prototype, \"isDrawingValue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: \"\" })\n ], QuestionSignaturePadModel.prototype, \"dataFormat\", void 0);\n return QuestionSignaturePadModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"signaturepad\", [\n {\n name: \"width:number\",\n category: \"general\",\n default: 300,\n },\n {\n name: \"height:number\",\n category: \"general\",\n default: 200,\n },\n {\n name: \"allowClear:boolean\",\n category: \"general\",\n default: true,\n },\n {\n name: \"penColor:color\",\n category: \"general\",\n default: \"#1ab394\",\n },\n {\n name: \"backgroundColor:color\",\n category: \"general\",\n default: \"#ffffff\",\n },\n {\n name: \"dataFormat\",\n category: \"general\",\n default: \"\",\n choices: [\n { value: \"\", text: \"PNG\" },\n { value: \"image/jpeg\", text: \"JPEG\" },\n { value: \"image/svg+xml\", text: \"SVG\" },\n ],\n },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n], function () {\n return new QuestionSignaturePadModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_4__[\"QuestionFactory\"].Instance.registerQuestion(\"signaturepad\", function (name) {\n return new QuestionSignaturePadModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_text.ts\":\n/*!******************************!*\\\n !*** ./src/question_text.ts ***!\n \\******************************/\n/*! exports provided: QuestionTextModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return QuestionTextModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./question_textbase */ \"./src/question_textbase.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n/**\n * A Model for an input text question.\n */\nvar QuestionTextModel = /** @class */ (function (_super) {\n __extends(QuestionTextModel, _super);\n function QuestionTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"minErrorText\", _this, true);\n _this.createLocalizableString(\"maxErrorText\", _this, true);\n _this.locDataListValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableStrings\"](_this);\n _this.registerFunctionOnPropertiesValueChanged([\"min\", \"max\", \"inputType\", \"minValueExpression\", \"maxValueExpression\"], function () {\n _this.setRenderedMinMax();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"inputType\", \"size\"], function () {\n _this.updateInputSize();\n _this.calcRenderedPlaceHolder();\n });\n return _this;\n }\n QuestionTextModel.prototype.isTextValue = function () {\n return [\"text\", \"number\", \"password\"].indexOf(this.inputType) > -1;\n };\n QuestionTextModel.prototype.getType = function () {\n return \"text\";\n };\n QuestionTextModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.setRenderedMinMax();\n this.updateInputSize();\n };\n Object.defineProperty(QuestionTextModel.prototype, \"inputType\", {\n /**\n * Use this property to change the default input type.\n */\n get: function () {\n return this.getPropertyValue(\"inputType\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == \"datetime_local\")\n val = \"datetime-local\";\n this.setPropertyValue(\"inputType\", val.toLowerCase());\n if (!this.isLoadingFromJson) {\n this.min = undefined;\n this.max = undefined;\n this.step = undefined;\n }\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.minValueExpression || !!this.maxValueExpression) {\n this.setRenderedMinMax(values, properties);\n }\n };\n QuestionTextModel.prototype.getValidators = function () {\n var validators = _super.prototype.getValidators.call(this);\n if (this.inputType === \"email\" &&\n !this.validators.some(function (v) { return v.getType() === \"emailvalidator\"; })) {\n validators.push(new _validator__WEBPACK_IMPORTED_MODULE_4__[\"EmailValidator\"]());\n }\n return validators;\n };\n QuestionTextModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n Object.defineProperty(QuestionTextModel.prototype, \"size\", {\n /**\n * The text input size\n */\n get: function () {\n return this.getPropertyValue(\"size\");\n },\n set: function (val) {\n this.setPropertyValue(\"size\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isTextInput\", {\n get: function () {\n return ([\"text\", \"search\", \"tel\", \"url\", \"email\", \"password\"].indexOf(this.inputType) > -1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"inputSize\", {\n get: function () {\n return this.getPropertyValue(\"inputSize\", 0);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"inputWidth\", {\n get: function () {\n return this.getPropertyValue(\"inputWidth\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.updateInputSize = function () {\n var size = this.isTextInput && this.size > 0 ? this.size : 0;\n if (this.isTextInput &&\n size < 1 &&\n this.parent &&\n !!this.parent[\"itemSize\"]) {\n size = this.parent[\"itemSize\"];\n }\n this.setPropertyValue(\"inputSize\", size);\n this.setPropertyValue(\"inputWidth\", size > 0 ? \"auto\" : \"\");\n };\n Object.defineProperty(QuestionTextModel.prototype, \"autoComplete\", {\n /**\n * Text auto complete\n */\n get: function () {\n return this.getPropertyValue(\"autoComplete\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"autoComplete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"min\", {\n /**\n * The minimum value\n */\n get: function () {\n return this.getPropertyValue(\"min\");\n },\n set: function (val) {\n if (this.isValueExpression(val)) {\n this.minValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"min\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"max\", {\n /**\n * The maximum value\n */\n get: function () {\n return this.getPropertyValue(\"max\");\n },\n set: function (val) {\n if (this.isValueExpression(val)) {\n this.maxValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"max\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"minValueExpression\", {\n /**\n * The minimum value that you can setup as expression, for example today(-1) = yesterday;\n */\n get: function () {\n return this.getPropertyValue(\"minValueExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"minValueExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"maxValueExpression\", {\n /**\n * The maximum value that you can setup as expression, for example today(1) = tomorrow;\n */\n get: function () {\n return this.getPropertyValue(\"maxValueExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxValueExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedMin\", {\n get: function () {\n return this.getPropertyValue(\"renderedMin\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedMax\", {\n get: function () {\n return this.getPropertyValue(\"renderedMax\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"minErrorText\", {\n /**\n * The text that shows when value is less than min property.\n * @see min\n * @see maxErrorText\n */\n get: function () {\n return this.getLocalizableStringText(\"minErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"minError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"minErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locMinErrorText\", {\n get: function () {\n return this.getLocalizableString(\"minErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"maxErrorText\", {\n /**\n * The text that shows when value is greater than man property.\n * @see max\n * @see minErrorText\n */\n get: function () {\n return this.getLocalizableStringText(\"maxErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"maxError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"maxErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locMaxErrorText\", {\n get: function () {\n return this.getLocalizableString(\"maxErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isMinMaxType\", {\n /**\n * Readonly property that returns true if the current inputType allows to set min and max properties\n * @see inputType\n * @see min\n * @see max\n */\n get: function () {\n return minMaxTypes.indexOf(this.inputType) > -1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (isOnValueChanged || this.canSetValueToSurvey())\n return;\n if (this.isValueLessMin) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"CustomError\"](this.getMinMaxErrorText(this.minErrorText, this.getCalculatedMinMax(this.renderedMin)), this));\n }\n if (this.isValueGreaterMax) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"CustomError\"](this.getMinMaxErrorText(this.maxErrorText, this.getCalculatedMinMax(this.renderedMax)), this));\n }\n };\n QuestionTextModel.prototype.canSetValueToSurvey = function () {\n if (!this.isMinMaxType)\n return true;\n if (this.isValueLessMin)\n return false;\n if (this.isValueGreaterMax)\n return false;\n return true;\n };\n QuestionTextModel.prototype.getMinMaxErrorText = function (errorText, value) {\n if (!value)\n return errorText;\n return errorText.replace(\"{0}\", value.toString());\n };\n Object.defineProperty(QuestionTextModel.prototype, \"isValueLessMin\", {\n get: function () {\n return (!this.isValueEmpty(this.renderedMin) &&\n this.getCalculatedMinMax(this.value) <\n this.getCalculatedMinMax(this.renderedMin));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isValueGreaterMax\", {\n get: function () {\n return (!this.isValueEmpty(this.renderedMax) &&\n this.getCalculatedMinMax(this.value) >\n this.getCalculatedMinMax(this.renderedMax));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isDateInputType\", {\n get: function () {\n return this.inputType === \"date\" || this.inputType === \"datetime-local\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.getCalculatedMinMax = function (minMax) {\n if (this.isValueEmpty(minMax))\n return minMax;\n return this.isDateInputType ? new Date(minMax) : minMax;\n };\n QuestionTextModel.prototype.setRenderedMinMax = function (values, properties) {\n var _this = this;\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n this.setValueAndRunExpression(this.minValueExpression, this.min, function (val) {\n if (!val && _this.isDateInputType && !!_settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].minDate) {\n val = _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].minDate;\n }\n _this.setPropertyValue(\"renderedMin\", val);\n }, values, properties);\n this.setValueAndRunExpression(this.maxValueExpression, this.max, function (val) {\n if (!val && _this.isDateInputType) {\n val = !!_settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].maxDate ? _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].maxDate : \"2999-12-31\";\n }\n _this.setPropertyValue(\"renderedMax\", val);\n }, values, properties);\n };\n Object.defineProperty(QuestionTextModel.prototype, \"step\", {\n /**\n * The step value\n */\n get: function () {\n return this.getPropertyValue(\"step\");\n },\n set: function (val) {\n this.setPropertyValue(\"step\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedStep\", {\n get: function () {\n return this.isValueEmpty(this.step) ? \"any\" : this.step;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.supportGoNextPageAutomatic = function () {\n return [\"date\", \"datetime\", \"datetime-local\"].indexOf(this.inputType) < 0;\n };\n QuestionTextModel.prototype.supportGoNextPageError = function () {\n return [\"date\", \"datetime\", \"datetime-local\"].indexOf(this.inputType) < 0;\n };\n Object.defineProperty(QuestionTextModel.prototype, \"dataList\", {\n /**\n * The list of recommended options available to choose.\n */\n get: function () {\n return this.locDataList.value;\n },\n set: function (val) {\n this.locDataList.value = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locDataList\", {\n get: function () {\n return this.locDataListValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"dataListId\", {\n get: function () {\n return !this.locDataList.isEmpty ? this.id + \"_datalist\" : \"\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.canRunValidators = function (isOnValueChanged) {\n return (this.errors.length > 0 ||\n !isOnValueChanged ||\n this.supportGoNextPageError());\n };\n QuestionTextModel.prototype.setNewValue = function (newValue) {\n newValue = this.correctValueType(newValue);\n _super.prototype.setNewValue.call(this, newValue);\n };\n QuestionTextModel.prototype.correctValueType = function (newValue) {\n if (!newValue)\n return newValue;\n if (this.inputType == \"number\" || this.inputType == \"range\") {\n return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isNumber(newValue) ? parseFloat(newValue) : \"\";\n }\n return newValue;\n };\n QuestionTextModel.prototype.getControlClass = function () {\n var cssClasses = this.cssClasses;\n var result = cssClasses.root +\n (this.errors.length > 0 ? \" \" + cssClasses.onError : \"\");\n if (this.isReadOnly) {\n result += \" \" + cssClasses.controlDisabled;\n }\n return result;\n };\n QuestionTextModel.prototype.hasPlaceHolder = function () {\n return !this.isReadOnly && this.inputType !== \"range\";\n };\n return QuestionTextModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_8__[\"QuestionTextBase\"]));\n\nvar minMaxTypes = [\n \"number\",\n \"range\",\n \"date\",\n \"datetime-local\",\n \"month\",\n \"time\",\n \"week\",\n];\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"text\", [\n {\n name: \"inputType\",\n default: \"text\",\n choices: [\n \"color\",\n \"date\",\n \"datetime\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"range\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n ],\n },\n {\n name: \"size:number\",\n minValue: 0,\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"textUpdateMode\",\n default: \"default\",\n choices: [\"default\", \"onBlur\", \"onTyping\"],\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"autoComplete\",\n dataList: [\n \"name\",\n \"honorific-prefix\",\n \"given-name\",\n \"additional-name\",\n \"family-name\",\n \"honorific-suffix\",\n \"nickname\",\n \"organization-title\",\n \"username\",\n \"new-password\",\n \"current-password\",\n \"organization\",\n \"street-address\",\n \"address-line1\",\n \"address-line2\",\n \"address-line3\",\n \"address-level4\",\n \"address-level3\",\n \"address-level2\",\n \"address-level1\",\n \"country\",\n \"country-name\",\n \"postal-code\",\n \"cc-name\",\n \"cc-given-name\",\n \"cc-additional-name\",\n \"cc-family-name\",\n \"cc-number\",\n \"cc-exp\",\n \"cc-exp-month\",\n \"cc-exp-year\",\n \"cc-csc\",\n \"cc-type\",\n \"transaction-currency\",\n \"transaction-amount\",\n \"language\",\n \"bday\",\n \"bday-day\",\n \"bday-month\",\n \"bday-year\",\n \"sex\",\n \"url\",\n \"photo\",\n \"tel\",\n \"tel-country-code\",\n \"tel-national\",\n \"tel-area-code\",\n \"tel-local\",\n \"tel-local-prefix\",\n \"tel-local-suffix\",\n \"tel-extension\",\n \"email\",\n \"impp\",\n ],\n },\n {\n name: \"min\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n onPropertyEditorUpdate: function (obj, propertyEditor) {\n propertyEditor.inputType = obj.inputType;\n },\n },\n {\n name: \"max\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n onPropertyEditorUpdate: function (obj, propertyEditor) {\n propertyEditor.inputType = obj.inputType;\n },\n },\n {\n name: \"minValueExpression:expression\",\n category: \"logic\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"maxValueExpression:expression\",\n category: \"logic\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"minErrorText\",\n serializationProperty: \"locMinErrorText\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"maxErrorText\",\n serializationProperty: \"locMaxErrorText\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"step:number\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.inputType === \"number\";\n },\n },\n {\n name: \"maxLength:number\",\n default: -1,\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"placeHolder\",\n serializationProperty: \"locPlaceHolder\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"dataList:string[]\",\n serializationProperty: \"locDataList\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.inputType === \"text\";\n },\n },\n], function () {\n return new QuestionTextModel(\"\");\n}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"text\", function (name) {\n return new QuestionTextModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_textbase.ts\":\n/*!**********************************!*\\\n !*** ./src/question_textbase.ts ***!\n \\**********************************/\n/*! exports provided: QuestionTextBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextBase\", function() { return QuestionTextBase; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Base Model for a comment and text questions\n */\nvar QuestionTextBase = /** @class */ (function (_super) {\n __extends(QuestionTextBase, _super);\n function QuestionTextBase(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"placeHolder\", _this);\n return _this;\n }\n QuestionTextBase.prototype.isTextValue = function () {\n return true;\n };\n Object.defineProperty(QuestionTextBase.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextBase.prototype.getMaxLength = function () {\n return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n };\n Object.defineProperty(QuestionTextBase.prototype, \"placeHolder\", {\n /**\n * Use this property to set the input place holder.\n */\n get: function () {\n return this.getLocalizableStringText(\"placeHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"placeHolder\", val);\n this.calcRenderedPlaceHolder();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextBase.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"placeHolder\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextBase.prototype.getType = function () {\n return \"textbase\";\n };\n QuestionTextBase.prototype.isEmpty = function () {\n return _super.prototype.isEmpty.call(this) || this.value === \"\";\n };\n Object.defineProperty(QuestionTextBase.prototype, \"textUpdateMode\", {\n /**\n * Gets or sets a value that specifies how the question updates it's value.\n *\n * The following options are available:\n * - `default` - get the value from survey.textUpdateMode\n * - `onBlur` - the value is updated after an input loses the focus.\n * - `onTyping` - update the value of text questions, \"text\" and \"comment\", on every key press.\n *\n * Note, that setting to \"onTyping\" may lead to a performance degradation, in case you have many expressions in the survey.\n * @see survey.textUpdateMode\n */\n get: function () {\n return this.getPropertyValue(\"textUpdateMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"textUpdateMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextBase.prototype, \"isSurveyInputTextUpdate\", {\n get: function () {\n if (this.textUpdateMode == \"default\")\n return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextBase.prototype, \"renderedPlaceHolder\", {\n get: function () {\n return this.getPropertyValue(\"renderedPlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextBase.prototype.setRenderedPlaceHolder = function (val) {\n this.setPropertyValue(\"renderedPlaceHolder\", val);\n };\n QuestionTextBase.prototype.onReadOnlyChanged = function () {\n _super.prototype.onReadOnlyChanged.call(this);\n this.calcRenderedPlaceHolder();\n };\n QuestionTextBase.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.calcRenderedPlaceHolder();\n };\n QuestionTextBase.prototype.calcRenderedPlaceHolder = function () {\n this.setRenderedPlaceHolder(this.hasPlaceHolder() ? this.placeHolder : undefined);\n };\n QuestionTextBase.prototype.hasPlaceHolder = function () {\n return !this.isReadOnly;\n };\n return QuestionTextBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"textbase\", [], function () {\n return new QuestionTextBase(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/questionfactory.ts\":\n/*!********************************!*\\\n !*** ./src/questionfactory.ts ***!\n \\********************************/\n/*! exports provided: QuestionFactory, ElementFactory */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return QuestionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return ElementFactory; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n\n\n//TODO replace completely with ElementFactory\nvar QuestionFactory = /** @class */ (function () {\n function QuestionFactory() {\n this.creatorHash = {};\n }\n Object.defineProperty(QuestionFactory, \"DefaultChoices\", {\n get: function () {\n return [\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"1\",\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"2\",\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"3\",\n ];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultColums\", {\n get: function () {\n var colName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_column\") + \" \";\n return [colName + \"1\", colName + \"2\", colName + \"3\"];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultRows\", {\n get: function () {\n var rowName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_row\") + \" \";\n return [rowName + \"1\", rowName + \"2\"];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultMutlipleTextItems\", {\n get: function () {\n var itemName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"multipletext_itemname\");\n return [itemName + \"1\", itemName + \"2\"];\n },\n enumerable: false,\n configurable: true\n });\n QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) {\n this.creatorHash[questionType] = questionCreator;\n };\n QuestionFactory.prototype.unregisterElement = function (elementType) {\n delete this.creatorHash[elementType];\n };\n QuestionFactory.prototype.clear = function () {\n this.creatorHash = {};\n };\n QuestionFactory.prototype.getAllTypes = function () {\n var result = new Array();\n for (var key in this.creatorHash) {\n result.push(key);\n }\n return result.sort();\n };\n QuestionFactory.prototype.createQuestion = function (questionType, name) {\n var creator = this.creatorHash[questionType];\n if (creator == null)\n return null;\n return creator(name);\n };\n QuestionFactory.Instance = new QuestionFactory();\n return QuestionFactory;\n}());\n\nvar ElementFactory = /** @class */ (function () {\n function ElementFactory() {\n this.creatorHash = {};\n }\n ElementFactory.prototype.registerElement = function (elementType, elementCreator) {\n this.creatorHash[elementType] = elementCreator;\n };\n ElementFactory.prototype.clear = function () {\n this.creatorHash = {};\n };\n ElementFactory.prototype.unregisterElement = function (elementType, removeFromSerializer) {\n if (removeFromSerializer === void 0) { removeFromSerializer = false; }\n delete this.creatorHash[elementType];\n QuestionFactory.Instance.unregisterElement(elementType);\n if (removeFromSerializer) {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].removeClass(elementType);\n }\n };\n ElementFactory.prototype.getAllTypes = function () {\n var result = QuestionFactory.Instance.getAllTypes();\n for (var key in this.creatorHash) {\n result.push(key);\n }\n return result.sort();\n };\n ElementFactory.prototype.createElement = function (elementType, name) {\n var creator = this.creatorHash[elementType];\n if (creator == null)\n return QuestionFactory.Instance.createQuestion(elementType, name);\n return creator(name);\n };\n ElementFactory.Instance = new ElementFactory();\n return ElementFactory;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/questionnonvalue.ts\":\n/*!*********************************!*\\\n !*** ./src/questionnonvalue.ts ***!\n \\*********************************/\n/*! exports provided: QuestionNonValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return QuestionNonValue; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A Model for non value question. This question doesn't add any new functionality. It hides some properties, including the value.\n */\nvar QuestionNonValue = /** @class */ (function (_super) {\n __extends(QuestionNonValue, _super);\n function QuestionNonValue(name) {\n return _super.call(this, name) || this;\n }\n QuestionNonValue.prototype.getType = function () {\n return \"nonvalue\";\n };\n Object.defineProperty(QuestionNonValue.prototype, \"hasInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionNonValue.prototype, \"hasTitle\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionNonValue.prototype.getTitleLocation = function () {\n return \"\";\n };\n Object.defineProperty(QuestionNonValue.prototype, \"hasComment\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionNonValue.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n return false;\n };\n QuestionNonValue.prototype.getAllErrors = function () {\n return [];\n };\n QuestionNonValue.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n QuestionNonValue.prototype.addConditionObjectsByContext = function (objects, context) { };\n QuestionNonValue.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n return null;\n };\n return QuestionNonValue;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"nonvalue\", [\n { name: \"title\", visible: false },\n { name: \"description\", visible: false },\n { name: \"valueName\", visible: false },\n { name: \"enableIf\", visible: false },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"isRequired\", visible: false, isSerializable: false },\n { name: \"requiredErrorText\", visible: false },\n { name: \"readOnly\", visible: false },\n { name: \"requiredIf\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"titleLocation\", visible: false },\n { name: \"useDisplayValuesInTitle\", visible: false },\n], function () {\n return new QuestionNonValue(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/rendererFactory.ts\":\n/*!********************************!*\\\n !*** ./src/rendererFactory.ts ***!\n \\********************************/\n/*! exports provided: RendererFactory */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return RendererFactory; });\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.renderersHash = {};\n }\n RendererFactory.prototype.unregisterRenderer = function (questionType, rendererAs) {\n delete this.renderersHash[questionType][rendererAs];\n };\n RendererFactory.prototype.registerRenderer = function (questionType, renderAs, renderer) {\n if (!this.renderersHash[questionType]) {\n this.renderersHash[questionType] = {};\n }\n this.renderersHash[questionType][renderAs] = renderer;\n };\n RendererFactory.prototype.getRenderer = function (questionType, renderAs) {\n return ((this.renderersHash[questionType] &&\n this.renderersHash[questionType][renderAs]) ||\n \"default\");\n };\n RendererFactory.prototype.getRendererByQuestion = function (question) {\n return this.getRenderer(question.getType(), question.renderAs);\n };\n RendererFactory.prototype.clear = function () {\n this.renderersHash = {};\n };\n RendererFactory.Instance = new RendererFactory();\n return RendererFactory;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/settings.ts\":\n/*!*************************!*\\\n !*** ./src/settings.ts ***!\n \\*************************/\n/*! exports provided: settings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return settings; });\n/**\n * Global survey settings\n */\nvar settings = {\n /**\n * The prefix that uses to store the question comment, as {questionName} + {commentPrefix}.\n * The default\n */\n commentPrefix: \"-Comment\",\n /**\n * Encode parameter on calling restful web API\n */\n webserviceEncodeParameters: true,\n /**\n * Cache the result for choices getting from web services. Set this property to false, to disable the caching.\n */\n useCachingForChoicesRestful: true,\n get useCachingForChoicesRestfull() {\n return settings.useCachingForChoicesRestful;\n },\n set useCachingForChoicesRestfull(val) {\n settings.useCachingForChoicesRestful = val;\n },\n /**\n * SurveyJS web service API url\n */\n surveyServiceUrl: \"https://api.surveyjs.io/public/v1/Survey\",\n /**\n * separator that can allow to set value and text of ItemValue object in one string as: \"value|text\"\n */\n itemValueSeparator: \"|\",\n /**\n * default locale name for localizable strings that uses during serialization, {\"default\": \"My text\", \"de\": \"Mein Text\"}\n */\n defaultLocaleName: \"default\",\n /**\n * Default row name for matrix (single choice)\n */\n matrixDefaultRowName: \"default\",\n /**\n * Default cell type for dropdown and dynamic matrices\n */\n matrixDefaultCellType: \"dropdown\",\n /**\n * Total value postfix for dropdown and dynamic matrices. The total value stores as: {matrixName} + {postfix}\n */\n matrixTotalValuePostFix: \"-total\",\n /**\n * Maximum row count in dynamic matrix\n */\n matrixMaximumRowCount: 1000,\n /**\n * Maximum rowCount that returns in addConditionObjectsByContext function\n */\n matrixMaxRowCountInCondition: 1,\n /**\n * Maximum panel count in dynamic panel\n */\n panelMaximumPanelCount: 100,\n /**\n * Maximum rate value count in rating question\n */\n ratingMaximumRateValueCount: 20,\n /**\n * Disable the question while choices are getting from the web service\n */\n disableOnGettingChoicesFromWeb: false,\n /**\n * Set to true to always serialize the localization string as object even if there is only one value for default locale. Instead of string \"MyStr\" serialize as {default: \"MyStr\"}\n */\n serializeLocalizableStringAsObject: false,\n /**\n * Set to false to hide empty page title and description in design mode\n */\n allowShowEmptyTitleInDesignMode: true,\n /**\n * Set to false to hide empty page description in design mode\n */\n allowShowEmptyDescriptionInDesignMode: true,\n /**\n * Set this property to true to execute the complete trigger on value change instead of on next page.\n */\n executeCompleteTriggerOnValueChanged: false,\n /**\n * Set this property to false to execute the skip trigger on next page instead of on value change.\n */\n executeSkipTriggerOnValueChanged: true,\n /**\n * Set this property to change readOnlyCommentRenderMode: \"textarea\" (default) or (div)\n */\n readOnlyCommentRenderMode: \"textarea\",\n /**\n * Override this function, set your function, if you want to show your own dialog confirm window instead of standard browser window.\n * @param message\n */\n confirmActionFunc: function (message) {\n return confirm(message);\n },\n /**\n * Set this property to change the default value of the minWidth constraint\n */\n minWidth: \"300px\",\n /**\n * Set this property to change the default value of the minWidth constraint\n */\n maxWidth: \"initial\",\n /**\n * This property tells how many times survey re-run expressions on value changes during condition running. We need it to avoid recursions in the expressions\n */\n maximumConditionRunCountOnValueChanged: 10,\n /**\n * By default visibleIndex for question with titleLocation = \"hidden\" is -1, and survey doesn't count these questions when set questions numbers.\n * Set it true, and a question next to a question with hidden title will increase it's number.\n */\n setQuestionVisibleIndexForHiddenTitle: false,\n /**\n * By default visibleIndex for question with hideNumber = true is -1, and survey doesn't count these questions when set questions numbers.\n * Set it true, and a question next to a question with hidden title number will increase it's number.\n */\n setQuestionVisibleIndexForHiddenNumber: false,\n /**\n * By default all rows are rendered no matters whwther they are visible.\n * Set it true, and survey markup rows will be rendered only if they are visible in viewport.\n * This feature is experimantal and might do not support all the use cases.\n */\n lazyRowsRendering: false,\n lazyRowsRenderingStartRow: 3,\n /**\n * By default checkbox and radiogroup items are ordered in rows.\n * Set it \"column\", and items will be ordered in columns.\n */\n showItemsInOrder: \"default\",\n /**\n * Supported validators by question types. You can modify this variable to add validators for new question types or add/remove for existing question types.\n */\n supportedValidators: {\n question: [\"expression\"],\n comment: [\"text\", \"regex\"],\n text: [\"numeric\", \"text\", \"regex\", \"email\"],\n checkbox: [\"answercount\"],\n },\n /**\n * Set the value as string \"yyyy-mm-dd\". text questions with inputType \"date\" will not allow to set to survey date that less than this value\n */\n minDate: \"\",\n /**\n * Set the value as string \"yyyy-mm-dd\". text questions with inputType \"date\" will not allow to set to survey date that greater than this value\n */\n maxDate: \"\",\n showModal: undefined,\n supportCreatorV2: false,\n /**\n * Specifies a list of custom icons.\n * Use this property to replace SurveyJS default icons (displayed in UI elements of SurveyJS Library or Creator) with your custom icons.\n * For every default icon to replace, add a key/value object with the default icon's name as a key and the name of your custom icon as a value.\n * For example: Survey.settings.customIcons[\"icon-redo\"] = \"my-own-redo-icon\"\n */\n customIcons: {},\n};\n\n\n/***/ }),\n\n/***/ \"./src/stylesmanager.ts\":\n/*!******************************!*\\\n !*** ./src/stylesmanager.ts ***!\n \\******************************/\n/*! exports provided: StylesManager */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return StylesManager; });\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar StylesManager = /** @class */ (function () {\n function StylesManager() {\n this.sheet = null;\n if (StylesManager.Enabled) {\n this.sheet = StylesManager.findSheet(StylesManager.SurveyJSStylesSheetId);\n if (!this.sheet) {\n this.sheet = StylesManager.createSheet(StylesManager.SurveyJSStylesSheetId);\n this.initializeStyles(this.sheet);\n }\n }\n }\n StylesManager.findSheet = function (styleSheetId) {\n if (typeof document === \"undefined\")\n return null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (!!document.styleSheets[i].ownerNode &&\n document.styleSheets[i].ownerNode[\"id\"] === styleSheetId) {\n return document.styleSheets[i];\n }\n }\n return null;\n };\n StylesManager.createSheet = function (styleSheetId) {\n var style = document.createElement(\"style\");\n style.id = styleSheetId;\n // Add a media (and/or media query) here if you'd like!\n // style.setAttribute(\"media\", \"screen\")\n // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n style.appendChild(document.createTextNode(\"\"));\n document.head.appendChild(style);\n return style.sheet;\n };\n StylesManager.applyTheme = function (themeName, themeSelector) {\n if (themeName === void 0) { themeName = \"default\"; }\n if (themeSelector === void 0) { themeSelector = \".sv_main\"; }\n var ThemeCss;\n if (themeName === \"modern\")\n themeSelector = \".sv-root-modern \";\n if ([\"bootstrap\", \"bootstrapmaterial\", \"modern\"].indexOf(themeName) !== -1) {\n ThemeCss = StylesManager[themeName + \"ThemeCss\"];\n _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = themeName;\n }\n else {\n ThemeCss = StylesManager.ThemeCss;\n _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = \"standard\";\n }\n if (StylesManager.Enabled) {\n var sheet_1 = StylesManager.findSheet(themeName + themeSelector);\n if (!sheet_1) {\n sheet_1 = StylesManager.createSheet(themeName + themeSelector);\n var theme_1 = StylesManager.ThemeColors[themeName] ||\n StylesManager.ThemeColors[\"default\"];\n Object.keys(ThemeCss).forEach(function (selector) {\n var cssRuleText = ThemeCss[selector];\n Object.keys(theme_1).forEach(function (colorVariableName) {\n return (cssRuleText = cssRuleText.replace(new RegExp(\"\\\\\" + colorVariableName, \"g\"), theme_1[colorVariableName]));\n });\n try {\n sheet_1.insertRule(themeSelector + selector + \" { \" + cssRuleText + \" }\", 0);\n }\n catch (e) { }\n });\n }\n }\n };\n StylesManager.prototype.initializeStyles = function (sheet) {\n if (StylesManager.Enabled) {\n Object.keys(StylesManager.Styles).forEach(function (selector) {\n try {\n sheet.insertRule(selector + \" { \" + StylesManager.Styles[selector] + \" }\", 0);\n }\n catch (e) { }\n });\n Object.keys(StylesManager.Media).forEach(function (selector) {\n try {\n sheet.insertRule(StylesManager.Media[selector].media +\n \" { \" +\n selector +\n \" { \" +\n StylesManager.Media[selector].style +\n \" } }\", 0);\n }\n catch (e) { }\n });\n }\n };\n StylesManager.SurveyJSStylesSheetId = \"surveyjs-styles\";\n StylesManager.Styles = {\n // \".sv_bootstrap_css\":\n // \"position: relative; width: 100%; background-color: #f4f4f4\",\n // \".sv_bootstrap_css .sv_custom_header\":\n // \"position: absolute; width: 100%; height: 275px; background-color: #e7e7e7;\",\n // \".sv_bootstrap_css .sv_container\":\n // \"max-width: 80%; margin: auto; position: relative; color: #6d7072; padding: 0 1em;\",\n // \".sv_bootstrap_css .panel-body\":\n // \"background-color: white; padding: 1em 1em 5em 1em; border-top: 2px solid lightgray;\",\n \".sv_main span\": \"word-break: break-word;\",\n \".sv_main legend\": \"border: none; margin: 0;\",\n \".sv_bootstrap_css .sv_qstn\": \"padding: 0.5em 1em 1.5em 1em;\",\n \".sv_bootstrap_css .sv_qcbc input[type=checkbox], .sv_bootstrap_css .sv_qcbc input[type=radio]\": \"vertical-align: middle; margin-top: -1px\",\n \".sv_bootstrap_css .sv_qstn fieldset\": \"display: block;\",\n \".sv_bootstrap_css .sv_qstn .sv_q_checkbox_inline, .sv_bootstrap_css .sv_qstn .sv_q_radiogroup_inline\": \"display: inline-block;\",\n \".sv_bootstrap_css .sv-paneldynamic__progress-container \": \"position: relative; margin-right: 250px; margin-left: 40px; margin-top: 10px;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_radiogroup_control_label\": \"display: inline; position: static;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox\": \"margin-top:10px;margin-bottom:10px;\",\n \".sv_row\": \"clear: both; min-width:300px;\",\n \".sv_row .sv_qstn\": \"float: left\",\n \".sv_row .sv_qstn:last-child\": \"float: none\",\n \".sv_qstn\": \"display: vertical-align: top; overflow: auto; min-width:300px;\",\n \".sv_p_container\": \"display: vertical-align: top; min-width:300px;\",\n \".sv_q_title .sv_question_icon\": \"float: right; margin-right: 1em;\",\n \".sv_q_title .sv_question_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; padding: 0.5em; display: inline-block; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxMCAxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM2RDcwNzI7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_q_title .sv_question_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\n \".sv_qbln .checkbox-material\": \"margin-right: 3px;\",\n \".sv_qcbx .checkbox-material\": \"margin-right: 5px;\",\n \".sv_qcbx .checkbox label\": \"justify-content: left; display: inline-block;\",\n \".sv_qstn .radio label\": \"justify-content: left; display: inline-block;\",\n \".sv_qstn .sv_q_imgsel > label img\": \"pointer-events: none;\",\n \".sv_qstn .sv_q_imgsel.sv_q_imagepicker_inline\": \"display: inline-block;\",\n \".sv_qstn label.sv_q_m_label\": \"position: absolute; margin: 0; display: block; width: 100%;\",\n \".sv_qstn td\": \"position: relative;\",\n \".sv_q_mt_item_value\": \"float: left;\",\n '[dir=\"rtl\"] .sv_q_mt_item_value': \"float: right;\",\n \".sv_qstn.sv_qstn_left\": \"margin-top: 0.75em;\",\n \".sv_qstn .title-left\": \"float: left; margin-right: 1em;\",\n '[dir=\"rtl\"] .sv_qstn .title-left': \"float: right; margin-left: 1em;\",\n \".sv_qstn .content-left\": \"overflow: hidden\",\n \".sv_q_radiogroup_inline .sv_q_radiogroup_other\": \"display: inline-block;\",\n \".sv_q_checkbox_inline .sv_q_checkbox_other\": \"display: inline-block;\",\n \".sv_q_checkbox_inline, .sv_q_radiogroup_inline, .sv_q_imagepicker_inline\": \"line-height: 2.5em;\",\n \".form-inline .sv_q_checkbox_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".form-inline .sv_q_radiogroup_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".sv_imgsel .sv_q_imagepicker_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".sv_qstn fieldset\": \"border: none; margin: 0; padding: 0;\",\n \".sv_qstn .sv_q_file_placeholder\": \"display:none\",\n \".sv_p_title\": \"padding-left: 1em; padding-bottom: 0.3em;\",\n \".sv_p_title_expandable\": \"cursor: pointer;\",\n \".sv_q_title_expandable\": \"cursor: pointer;\",\n \".sv_p_title .sv_panel_icon\": \"float: right; margin-right: 1em;\",\n \".sv_p_title .sv_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; padding: 0.5em; display: inline-block; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxMCAxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM2RDcwNzI7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_p_title .sv_panel_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\n \".sv_p_footer\": \"padding-left: 1em; padding-bottom: 1em;padding-top: 1em;\",\n \".sv_matrix_cell_detail_button\": \"position: relative\",\n \".sv_detail_panel_icon\": \"display: block; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 14px; height: 14px;\",\n \".sv_detail_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; width: 14px; height: 14px; display: block; transform: rotate(270deg); background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 15 15' style='enable-background:new 0 0 15 15;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23FFFFFF;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='14,5.5 12.6,4.1 7.5,9.1 2.4,4.1 1,5.5 7.5,12 '/%3E%3C/svg%3E%0A\\\");\",\n \".sv_detail_panel_icon.sv_detail_expanded::before\": \"transform: rotate(0deg)\",\n \".sv_matrix_empty_rows_section\": \"text-align: center; vertical-align: middle;\",\n \".sv_matrix_empty_rows_text\": \"padding:20px\",\n \".sv_q_file > input[type=file], .sv_q_file > button\": \"display: inline-block;\",\n \".sv_q_file_preview\": \"display: inline-block; vertical-align: top; border: 1px solid lightgray; padding: 5px; margin-top: 10px;\",\n \".sv_q_file_preview > a\": \"display: block; overflow: hidden; vertical-align: top; white-space: nowrap; text-overflow: ellipsis;\",\n \".sv_q_file_remove_button\": \"line-height: normal;\",\n \".sv_q_file_remove\": \"display: block; cursor: pointer;\",\n \".sv_q_m_cell_text\": \"cursor: pointer;\",\n \".sv_q_dd_other\": \"margin-top: 1em;\",\n \".sv_q_dd_other input\": \"width: 100%;\",\n \".sv_qstn .sv-q-col-1, .sv-question .sv-q-col-1\": \"width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-2, .sv-question .sv-q-col-2\": \"width: calc(50% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-3, .sv-question .sv-q-col-3\": \"width: calc(33.33333% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-4, .sv-question .sv-q-col-4\": \"width: calc(25% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-5, .sv-question .sv-q-col-5\": \"width: calc(20% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-1, .sv-question .sv-q-column-1\": \"width: 100%; max-width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-2, .sv-question .sv-q-column-2\": \"max-width: 50%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-3, .sv-question .sv-q-column-3\": \"max-width: 33.33333%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-4, .sv-question .sv-q-column-4\": \"max-width: 25%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-5, .sv-question .sv-q-column-5\": \"max-width: 20%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv_q_file_input\": \"color: transparent;\",\n \".sv_qstn .sv_q_imgsel label > div\": \"overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding: 4px; border: 1px solid lightgray; border-radius: 4px;\",\n \".sv_qstn .sv_q_imgsel label > div > img, .sv_qstn .sv_q_imgsel label > div > embed\": \"display: block;\",\n \".sv_qstn table tr td .sv_q_m_cell_label\": \"position: absolute; left: 0; right: 0; top: 0; bottom: 0;\",\n \"f-panel\": \"padding: 0.5em 1em; display: inline-block; line-height: 2em;\",\n \".sv_progress_bar > span\": \"white-space: nowrap;\",\n //progress buttons\n \".sv_progress-buttons__container-center\": \"text-align: center;\",\n \".sv_progress-buttons__container\": \"display: inline-block; font-size:0; width: 100%; max-width: 1100px; white-space: nowrap; overflow: hidden;\",\n \".sv_progress-buttons__image-button-left\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iMTEsMTIgOSwxNCAzLDggOSwyIDExLDQgNyw4ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_progress-buttons__image-button-right\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iNSw0IDcsMiAxMyw4IDcsMTQgNSwxMiA5LDggIi8+DQo8L3N2Zz4NCg==);\",\n \".sv_progress-buttons__image-button--hidden\": \"visibility: hidden;\",\n \".sv_progress-buttons__list-container\": \"max-width: calc(100% - 36px); display: inline-block; overflow: hidden;\",\n \".sv_progress-buttons__list\": \"display: inline-block; width: max-content; padding-left: 28px; padding-right: 28px; margin-top: 14px; margin-bottom: 14px;\",\n \".sv_progress-buttons__list li\": \"width: 138px; font-size: 14px; font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif; position: relative; text-align: center; vertical-align: top; display: inline-block;\",\n \".sv_progress-buttons__list li:before\": \"width: 24px; height: 24px; content: ''; line-height: 30px; border: 3px solid #8dd9ca; display: block; margin: 0 auto 10px auto; border-radius: 50%; box-sizing: content-box; background-color: #8dd9ca; cursor: pointer;\",\n \".sv_progress-buttons__list li:after\": \"width: 73%; height: 3px; content: ''; position: absolute; background-color: #d4d4d4; top: 15px; left: -36.5%;\",\n \".sv_progress-buttons__list li:first-child:after\": \"content: none;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-title\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: $text-color; font-weight: bold;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-description\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: $text-color;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: #1ab394; background-color: #1ab394;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: #8dd9ca;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: #1ab394; background-color: white;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: #1ab394; background-color: white;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--nonclickable:before\": \"cursor: not-allowed;\",\n // ranking\n \".sv-ranking\": \"outline: none;\",\n \".sv-ranking-item\": \"cursor: pointer; margin-bottom: 5px;position: relative;\",\n \".sv-ranking-item:focus .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n \".sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n \".sv-question--disabled .sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n \".sv-ranking-item:focus\": \"outline: none;\",\n \".sv-ranking-item:focus .sv-ranking-item__icon--focus\": \"visibility: visible; top: 15px;\",\n \".sv-ranking-item:focus .sv-ranking-item__index\": \"background: white; border: 2px solid #19b394;\",\n \".sv-ranking-item__content\": \"display: inline-block;background-color: white;padding-top: 5px;padding-bottom: 5px;padding-left: 35px;padding-right: 10px; border-radius: 100px;\",\n \".sv-ranking-item__icon-container\": \"position: absolute;left: 0;top: 0;bottom: 0;width: 35px;\",\n \".sv-ranking-item__icon\": \"visibility: hidden;left:10px;top:20px;fill:#19b394;position: absolute;\",\n \".sv-ranking-item__index\": \"display: inline-block;padding: 10px 16px;background: rgba(25, 179, 148, 0.1);border-radius: 100px;border: 2px solid transparent; margin-right: 10px;\",\n \".sv-ranking-item__text\": \"display: inline-block;\",\n \".sv-ranking-item__ghost\": \"display: none;background: #f3f3f3;border-radius: 100px;width: 200px;height: 55px;z-index: 1;position: absolute;left: 35px;\",\n \".sv-ranking-item--ghost .sv-ranking-item__ghost\": \"display: block;\",\n \".sv-ranking-item--ghost .sv-ranking-item__content\": \"visibility: hidden;\",\n \".sv-ranking-item--drag .sv-ranking-item__content\": \"box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);border-radius: 100px;\",\n \".sv-ranking--drag .sv-ranking-item:hover .sv-ranking-item__icon\": \"visibility: hidden;\",\n \".sv-ranking-item--drag .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n \".sv-ranking--mobile .sv-ranking-item__icon--hover\": \"visibility:visible; fill:#9f9f9f;\",\n \".sv-ranking--mobile.sv-ranking--drag .sv-ranking-item--ghost .sv-ranking-item__icon.sv-ranking-item__icon--hover\": \"visibility:hidden;\",\n \".sv_qstn .sv_q_select_column\": \"display: inline-block; vertical-align: top; min-width: 10%;\",\n \".sv_qstn .sv_q_select_column > *:not(.sv_technical)\": \"display: block;\",\n \".sv_main .sv_container .sv_body .sv_p_root .sv_qstn .sv_q_select_column textarea\": \"margin-left: 0; padding-left: 0; line-height: initial;\",\n \".sv_main .sv-hidden\": \"display: none !important;\",\n \".sv_main .sv-visuallyhidden\": \"position: absolute; height: 1px !important; width: 1px !important; overflow: hidden; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px);\",\n // paneldynamic progress\n \".sv_main .sv-progress\": \"height: 0.19em; background-color: $header-background-color; position: relative;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color; height: 100%; position: relative;\",\n // EO paneldynamic progress\n // paneldynamic\n \".sv_main .sv-paneldynamic__progress-container\": \"position: relative; display: inline-block; width: calc(100% - 250px); margin-top: 20px;\",\n \".sv_main .sv-paneldynamic__add-btn\": \"float: right;\",\n \".sv_main .sv-paneldynamic__add-btn--list-mode\": \"float: none; margin-top: 0;\",\n \".sv_main .sv-paneldynamic__remove-btn\": \"margin-top: 1.25em;\",\n \".sv_main .sv-paneldynamic__remove-btn--right\": \"margin-top: 0; margin-left: 1.25em;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"box-sizing: border-box; display: inline-block; cursor: pointer; width: 0.7em; top: -0.28em; position: absolute;\",\n \".sv_main .sv-paneldynamic__prev-btn\": \"left: -1.3em; transform: rotate(90deg);\",\n \".sv_main .sv-paneldynamic__next-btn \": \"right: -1.3em; transform: rotate(270deg);\",\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"cursor: auto;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"font-weight: bold; font-size: 0.87em; margin-top: 0.69em; margin-left: 4em\",\n // EO paneldynamic\n //boolean\n \".sv_main .sv-boolean__switch\": \"display: inline-block; box-sizing: border-box; width: 63px; height: 24px; margin-right: 17px; margin-left: 21px; padding: 2px 3px; vertical-align: middle; border-radius: 12px; cursor: pointer;\",\n \".sv_main .sv-boolean__slider\": \"display: inline-block; width: 20px; height: 20px; transition-duration: .4s; transition-property: margin-left; border: none; border-radius: 100%;\",\n \".sv_main .sv-boolean__label\": \"vertical-align: middle; cursor: pointer;\",\n \".sv_main .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-left: calc(50% - 10px);\",\n \".sv_main .sv-boolean--checked .sv-boolean__slider\": \"margin-left: calc(100% - 20px);\",\n \"[dir='rtl'] .sv-boolean__label \": \"float: right;\",\n \"[dir='rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n \"[dir='rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n \"[dir='rtl'] .sv-boolean__switch\": \"float: right;\",\n \"[style*='direction:rtl'] .sv-boolean__label \": \"float: right;\",\n \"[style*='direction:rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n \"[style*='direction:rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n \"[style*='direction:rtl'] .sv-boolean__switch\": \"float: right;\",\n // EO boolean\n \".sv_main .sv_q_num\": \"\",\n \".sv_main .sv_q_num + span\": \"\",\n // SignaturePad\n \".sv_main .sjs_sp_container\": \"position: relative; box-sizing: content-box;\",\n \".sv_main .sjs_sp_controls\": \"position: absolute; left: 0; bottom: 0;\",\n \".sv_main .sjs_sp_controls > button\": \"user-select: none;\",\n \".sv_main .sjs_sp_container>div>canvas:focus\": \"outline: none;\",\n \".sv_main .sjs_sp_placeholder\": \"display: flex; align-items: center; justify-content: center; position: absolute; z-index: 0; user-select: none; pointer-events: none; width: 100%; height: 100%;\",\n // logo\n // \".sv_main .sv_header\": \"white-space: nowrap;\",\n \".sv_main .sv_logo\": \"\",\n \".sv_main .sv-logo--left\": \"display: inline-block; vertical-align: top; margin-right: 2em;\",\n \".sv_main .sv-logo--right\": \"display: inline-block; vertical-align: top; margin-left: 2em; float: right;\",\n \".sv_main .sv-logo--right+.sv-logo--right-tail\": \"clear: both;\",\n \".sv_main .sv-logo--top\": \"display: block; width: 100%; text-align: center;\",\n \".sv_main .sv-logo--bottom\": \"display: block; width: 100%; text-align: center;\",\n \".sv_main .sv_header__text\": \"display: inline-block; vertical-align: top; max-width: 100%\",\n \".sv_main .sv-expand-action:before\": \"content: \\\"\\\"; display: inline-block; background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 10 10' style='enable-background:new 0 0 10 10;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23404040;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='2,2 0,4 5,9 10,4 8,2 5,5 '/%3E%3C/svg%3E%0A\\\"); background-repeat: no-repeat; background-position: center center; height: 10px; width: 12px; margin: auto 8px;\",\n \".sv_main .sv-expand-action--expanded:before\": \"transform: rotate(180deg);\",\n \".sv_main .sv-action-bar\": \"display: flex; position: relative; align-items: center; margin-left: auto; padding: 0 0 0 16px; overflow: hidden; white-space: nowrap;\",\n \".sv_main .sv-action-bar-separator\": \"display: inline-block; width: 1px; height: 24px; vertical-align: middle; margin-right: 16px; background-color: #d6d6d6;\",\n \".sv_main .sv-action-bar-item\": \"-webkit-appearance: none; -moz-appearance: none; appearance: none; display: flex; height: 40px; padding: 8px; box-sizing: border-box; margin-right: 16px; border: none; border-radius: 2px; background-color: transparent; cursor: pointer; line-height: 24px; font-size: 16px; overflow-x: hidden; white-space: nowrap; min-width: auto; font-weight: normal\",\n \".sv_main .sv-action-bar-item__title\": \"vertical-align: middle; white-space: nowrap;\",\n \".sv_main .sv-action-bar-item__title--with-icon\": \"margin-left: 8px;\",\n \".sv_main .sv-action\": \"display: flex; align-items: center;\",\n \".sv_main .sv-action--hidden\": \"display: none;\",\n \".sv_main .sv-action-bar-item__icon svg\": \"display: block;\",\n \".sv_main .sv-action-bar-item:active\": \"opacity: 0.5;\",\n \".sv_main .sv-action-bar-item:focus\": \"outline: none;\",\n \".sv_main .sv-title-actions\": \"display: flex;align-items: center;\",\n \".sv_main .sv-title-actions__title\": \"flex-wrap: wrap; max-width: 90%; min-width: 50%;\",\n \".sv_main .sv-title-actions__bar\": \"min-width: 56px;\",\n \".sv_main .sv_matrix_cell_actions .sv-action-bar\": \"margin-left: 0; padding-left: 0;\",\n \".sv_main .sv_p_wrapper_in_row\": \"display: flex; flex-direction: row; align-items: center;\",\n \".sv_main .sv_p_remove_btn_right\": \"margin-left: 1em;\",\n //button-group\n \".sv_main .sv-button-group\": \"display: flex; align-items: center; flex-direction: row; font-size: 16px; height: 48px; overflow: auto;\",\n \".sv_main .sv-button-group__item\": \"display: flex; box-sizing: border-box; flex-direction: row; justify-content: center; align-items: center; width: 100%; padding: 11px 16px; line-height: 24px; border-width: 1px; border-style: solid; outline: none; font-size: 16px; font-weight: 400; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n \".sv_main .sv-button-group__item:not(:first-of-type)\": \"margin-left: -1px;\",\n \".sv_main .sv-button-group__item-icon\": \"display: block; height: 24px;\",\n \".sv_main .sv-button-group__item--selected\": \"font-weight: 600;\",\n \".sv_main .sv-button-group__item-decorator\": \"display: flex; align-items: center;\",\n \".sv_main .sv-button-group__item-icon + .sv-button-group__item-caption\": \"margin-left: 8px;\",\n \".sv_main .sv-button-group__item--disabled\": \"color: cursor: default;\",\n //eo button-group\n //popup\n \"sv-popup\": \"display: block; position: absolute; z-index: -1;\",\n \".sv-popup\": \"position: fixed; left: 0; top: 0; z-index: 1000; width: 100vw; height: 100vh; outline: none;\",\n \".sv-popup--modal\": \"display: flex; align-items: center; justify-content: center;\",\n \".sv-popup--modal .sv-popup__container\": \"position: static; filter: none; padding: calc(4 * 8px);\",\n \".sv-popup__container\": \"position: absolute; filter: drop-shadow(0px calc(1 * 8px) calc(2 * 8px) rgba(0, 0, 0, 0.1)); padding: calc(1 * 8px) 0; background: white; border-radius: 4px;\",\n \".sv-popup__scrolling-content\": \"max-width: 90vw; max-height: 90vh; overflow: auto;\",\n \".sv-popup__scrolling-content::-webkit-scrollbar\": \"height: 6px; width: 6px; background-color: #f3f3f3;\",\n \".sv-popup__scrolling-content::-webkit-scrollbar-thumb\": \"background: rgba(25, 179, 148, 0.1);\",\n \".sv-popup__content\": \"min-width: 100%;\",\n \".sv-popup--show-pointer.sv-popup--top\": \"transform: translateY(calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--top .sv-popup__pointer\": \"transform: translate(calc(-1 * 8px)) rotate(180deg);\",\n \".sv-popup--show-pointer.sv-popup--bottom\": \"transform: translateY(calc(1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--bottom .sv-popup__pointer\": \"transform: translate(calc(-1 * 8px), calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--right\": \"transform: translate(calc(1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--right .sv-popup__pointer\": \"transform: translate(-12px, -4px) rotate(-90deg);\",\n \".sv-popup--show-pointer.sv-popup--left\": \"transform: translate(calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--left .sv-popup__pointer\": \"transform: translate(-4px, -4px) rotate(90deg);\",\n \".sv-popup__pointer\": \"display: block; position: absolute;\",\n \".sv-popup__pointer:after\": \"content: ' '; display: block; width: 0; height: 0; border-left: calc(1 * 8px) solid transparent; border-right: calc(1 * 8px) solid transparent; border-bottom: calc(1 * 8px) solid white; align-self: center;\",\n \".sv-popup__footer\": \"display: flex; margin-top: calc(4 * 8px);\",\n \".sv-popup__footer-item:first-child\": \"margin-left: auto;\",\n \".sv-popup__footer-item + .sv-popup__footer-item\": \"margin-left: calc(1 * 8px);\",\n \".sv-popup__button\": \"padding: calc(2 * 8px) calc(6 * 8px); background: #fff; box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15); border-radius: 4px; cursor: pointer; margin: 2px; font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-weight: 600; font-size: calc(2 * 8px); line-height: calc(3 * 8px); text-align: center; color: #19b394; border: none; outline: none;\",\n \".sv-popup__button:hover\": \"box-shadow: 0 0 0 2px #19b394;\",\n \".sv-popup__button:disabled\": \"color: rgba(22, 22, 22, 0.16); cursor: default;\",\n \".sv-popup__button:disabled:hover\": \"box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);\",\n \".sv-popup__button--apply\": \"background-color: #19b394; color: #fff;\",\n \".sv-popup__button--apply:disabled\": \"background-color: #f3f3f3;\",\n //eo popup\n //list\n \".sv-list\": \"display: flex; flex-direction: column; align-items: flex-start; padding: 0; margin: 0; background: #ffffff; font-family: 'Open Sans'; list-style-type: none;\",\n \".sv-list__item\": \"width: 100%; display: flex; align-items: center; box-sizing: border-box; padding: calc(1 * 8px) calc(2 * 8px); cursor: pointer;\",\n \".sv-list__item-icon\": \"float: left; width: calc(3 * 8px); height: calc(3 * 8px); margin-right: calc(2 * 8px);\",\n \".sv-list__item-icon svg\": \"display: block;\",\n \".sv-list__item-icon use\": \"fill: #909090;\",\n \".sv-list__item:not(.sv-list__item--selected):hover\": \"background-color: #f3f3f3;\",\n \".sv-list__item--selected\": \"background-color: #19b394; color: #fff;\",\n \".sv-list__item--selected .sv-list__item-icon use\": \"fill: #fff;\",\n \".sv-list__item--disabled\": \"color: rgba(22, 22, 22, 0.16); cursor: default; pointer-events: none;\",\n \".sv-list__item span\": \"white-space: nowrap;\",\n //eo list\n };\n StylesManager.Media = {\n \".sv_qstn fieldset .sv-q-col-1\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-2\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-3\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-4\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-5\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn\": {\n style: \"display: block; width: 100% !important;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .title-left\": {\n style: \"float: none;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_radiogroup_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_checkbox_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_imagepicker_inline\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table thead\": {\n style: \"display: none;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tbody, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tr, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table td\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table:not(.sv_q_matrix) td:before\": {\n style: \"content: attr(title);\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.sv_q_matrix td:after\": {\n style: \"content: attr(title); padding-left: 1em\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .radio label, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .checkbox label\": {\n style: \"line-height: 12px; vertical-align: top;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_qstn label.sv_q_m_label\": {\n style: \"display: inline;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_custom_header\": {\n style: \"display: none;\",\n media: \"@media (max-width: 1300px)\",\n },\n \".sv_main .sv_container .sv_header h3\": {\n style: \"font-size: 1.5em;\",\n media: \"@media (max-width: 1300px)\",\n },\n \".sv_main .sv_container .sv_header h3 span\": {\n style: \"font-size: 0.75em;\",\n media: \"@media (max-width: 700px)\",\n },\n \".sv_main.sv_bootstrap_css .sv-progress__text\": {\n style: \"margin-left: 8em;\",\n media: \"@media (min-width: 768px)\",\n },\n \".sv_row\": {\n style: \" display: flex; flex-wrap: wrap;\",\n media: \"@supports (display: flex)\",\n },\n \".sv-vue-row-additional-div\": {\n style: \" display: flex; flex-wrap: wrap; flex-basis: 100%; width: 100%;\",\n media: \"@supports (display: flex)\",\n },\n \".sv-row > .sv-row__panel, .sv-row__question:not(:last-child)\": {\n style: \"float: left;\",\n media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n },\n \"[dir='rtl'],[style*='direction:rtl'] .sv-row__question:not(:last-child)\": {\n style: \"float: right;\",\n media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n },\n \".sv-row > .sv-row__panel, .sv-row__question\": {\n style: \"width: 100% !important; padding-right: 0 !important;\",\n media: \"@media only screen and (max-width: 600px)\",\n },\n };\n StylesManager.ThemeColors = {\n default: {\n \"$header-background-color\": \"#e7e7e7\",\n \"$body-container-background-color\": \"#f4f4f4\",\n \"$main-color\": \"#1ab394\",\n \"$main-hover-color\": \"#0aa384\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#6d7072\",\n \"$text-input-color\": \"#6d7072\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n orange: {\n \"$header-background-color\": \"#4a4a4a\",\n \"$body-container-background-color\": \"#f8f8f8\",\n \"$main-color\": \"#f78119\",\n \"$main-hover-color\": \"#e77109\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$text-input-color\": \"#4a4a4a\",\n \"$header-color\": \"#f78119\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n darkblue: {\n \"$header-background-color\": \"#d9d8dd\",\n \"$body-container-background-color\": \"#f6f7f2\",\n \"$main-color\": \"#3c4f6d\",\n \"$main-hover-color\": \"#2c3f5d\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$text-input-color\": \"#4a4a4a\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n darkrose: {\n \"$header-background-color\": \"#ddd2ce\",\n \"$body-container-background-color\": \"#f7efed\",\n \"$main-color\": \"#68656e\",\n \"$main-hover-color\": \"#58555e\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$text-input-color\": \"#4a4a4a\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n stone: {\n \"$header-background-color\": \"#cdccd2\",\n \"$body-container-background-color\": \"#efedf4\",\n \"$main-color\": \"#0f0f33\",\n \"$main-hover-color\": \"#191955\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#0f0f33\",\n \"$text-input-color\": \"#0f0f33\",\n \"$header-color\": \"#0f0f33\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n winter: {\n \"$header-background-color\": \"#82b8da\",\n \"$body-container-background-color\": \"#dae1e7\",\n \"$main-color\": \"#3c3b40\",\n \"$main-hover-color\": \"#1e1d20\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#000\",\n \"$text-input-color\": \"#000\",\n \"$header-color\": \"#000\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n winterstone: {\n \"$header-background-color\": \"#323232\",\n \"$body-container-background-color\": \"#f8f8f8\",\n \"$main-color\": \"#5ac8fa\",\n \"$main-hover-color\": \"#06a1e7\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#000\",\n \"$text-input-color\": \"#000\",\n \"$header-color\": \"#fff\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n modern: {\n \"$main-color\": \"#1ab394\",\n \"$add-button-color\": \"#1948b3\",\n \"$remove-button-color\": \"#ff1800\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$error-color\": \"#d52901\",\n \"$text-color\": \"#404040\",\n \"$light-text-color\": \"#fff\",\n \"$button-text-color\": \"#fff\",\n \"$checkmark-color\": \"#fff\",\n \"$matrix-text-checked-color\": \"#fff\",\n \"$text-input-color\": \"#404040\",\n \"$inputs-background-color\": \"transparent\",\n \"$main-hover-color\": \"#9f9f9f\",\n \"$body-container-background-color\": \"#f4f4f4\",\n \"$text-border-color\": \"#d4d4d4\",\n \"$disabled-text-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$border-color\": \"rgb(64, 64, 64, 0.5)\",\n \"$dropdown-border-color\": \"#d4d4d4\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$answer-background-color\": \"rgba(26, 179, 148, 0.2)\",\n \"$error-background-color\": \"rgba(213, 41, 1, 0.2)\",\n \"$radio-checked-color\": \"#404040\",\n \"$clean-button-color\": \"#1948b3\",\n \"$body-background-color\": \"#ffffff\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n bootstrap: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$text-input-color\": \"#404040;\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n bootstrapmaterial: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$text-input-color\": \"#404040;\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$body-background-color\": \"#ffffff\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n };\n StylesManager.ThemeCss = {\n \".sv_default_css\": \"background-color: $body-container-background-color;\",\n \".sv_default_css hr\": \"border-color: $border-color;\",\n \".sv_default_css input[type='button'], .sv_default_css button\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_default_css input[type='button']:hover, .sv_default_css button:hover\": \"background-color: $main-hover-color;\",\n \".sv_default_css .sv_header\": \"color: $header-color;\",\n \".sv_default_css .sv_custom_header\": \"background-color: $header-background-color;\",\n \".sv_default_css .sv_container\": \"color: $text-color;\",\n \".sv_default_css .sv_body\": \"background-color: $body-background-color; border-color: $main-color;\",\n \".sv_default_css .sv_progress\": \"background-color: $border-color;\",\n \".sv_default_css .sv_progress_bar\": \"background-color: $main-color;\",\n \".sv_default_css .sv_p_root > .sv_row\": \"border-color: $border-color;\",\n \".sv_default_css .sv_p_root > .sv_row:nth-child(odd)\": \"background-color: $body-background-color;\",\n \".sv_default_css .sv_p_root > .sv_row:nth-child(even)\": \"background-color: $body-container-background-color;\",\n \".sv_default_css .sv_q_other input\": \"color: $text-color; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_text_root\": \"color: $text-color; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_dropdown_control\": \"color: $text-input-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css input[type='text']\": \"color: $text-color; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css select\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css textarea\": \"color: $text-input-color; -webkit-text-fill-color: $text-input-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css input:not([type='button']):not([type='reset']):not([type='submit']):not([type='image']):not([type='checkbox']):not([type='radio'])\": \"border: 1px solid $border-color; background-color: $inputs-background-color;color: $text-input-color; -webkit-text-fill-color: $text-input-color;\",\n \".sv_default_css input:not([type='button']):not([type='reset']):not([type='submit']):not([type='image']):not([type='checkbox']):not([type='radio']):focus\": \"border: 1px solid $main-color;\",\n \".sv_default_css .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .sv_q_dropdown_control \": \"background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_other input:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_q_text_root:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_q_dropdown_control:focus\": \"border-color: $main-color;\",\n \".sv_default_css input[type='text']:focus\": \"border-color: $main-color;\",\n '.sv_default_css .sv_container .sv_body .sv_p_root .sv_q input[type=\"radio\"]:focus, .sv_default_css .sv_container .sv_body .sv_p_root .sv_q input[type=\"checkbox\"]:focus': \"outline: 1px dotted $main-color;\",\n \".sv_default_css select:focus\": \"border-color: $main-color;\",\n \".sv_default_css textarea:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_select_wrapper\": \"background-color: $body-background-color;\",\n \".sv_default_css .sv_select_wrapper::before\": \"background-color: $main-color;\",\n \".sv_default_css .sv_q_rating_item.active .sv_q_rating_item_text\": \"background-color: $main-hover-color; border-color: $main-hover-color; color: $body-background-color;\",\n \".sv_default_css .sv_q_rating_item .sv_q_rating_item_text\": \"border-color: $border-color;\",\n \".sv_default_css .sv_q_rating_item .sv_q_rating_item_text:hover\": \"border-color: $main-hover-color;\",\n \".sv_default_css table.sv_q_matrix tr\": \"border-color: $border-color;\",\n \".sv_default_css table.sv_q_matrix_dropdown tr\": \"border-color: $border-color;\",\n \".sv_default_css table.sv_q_matrix_dynamic tr\": \"border-color: $border-color;\",\n \".sv_default_css .sv_q_m_cell_selected\": \"color: $body-background-color; background-color: $main-hover-color;\",\n \".sv_main .sv_q_file_remove:hover\": \"color: $main-color;\",\n \".sv_main .sv_q_file_choose_button\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_main .sv_q_file_choose_button:hover\": \"background-color: $main-hover-color;\",\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color\",\n \".sv_default_css .sv_p_description\": \"padding-left: 1.29em;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n //eo boolean\n //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n //action-bar\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n //eo action-bar\n //button-group\n \".sv_main .sv-button-group__item--hover:hover\": \"background-color: $background-dim;\",\n \".sv_main .sv-button-group__item-icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-button-group__item--selected\": \"color: $main-color;\",\n \".sv_main .sv-button-group__item--selected .sv-button-group__item-icon use\": \"fill: $main-color;\",\n \".sv_main .sv-button-group__item--disabled\": \"color: $foreground-disabled;\",\n \".sv_main .sv-button-group__item--disabled .sv-button-group__item-icon use\": \"fill: $foreground-disabled;\",\n \".sv_main .sv-button-group__item\": \"background: $body-background-color; border-color: $border-color;\",\n //eo button-group\n \".sv_main .sv_qstn textarea\": \"max-width: 100%\",\n \".sv_main .sv-matrixdynamic__drag-icon\": \"padding-top:14px\",\n \".sv_main .sv-matrixdynamic__drag-icon:after\": \"content: ' '; display: block; height: 4px; width: 16px; border: 1px solid $border-color; box-sizing: border-box; border-radius: 10px; cursor: move;\",\n };\n StylesManager.modernThemeCss = {\n // \".sv-paneldynamic__add-btn\": \"background-color: $add-button-color;\",\n // \".sv-paneldynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n \".sv-btn\": \"color: $button-text-color;\",\n \".sv-checkbox__svg\": \"border-color: $border-color; fill: transparent;\",\n \".sv-checkbox--allowhover:hover .sv-checkbox__svg\": \"background-color: $main-hover-color; fill: $checkmark-color;\",\n \".sv-checkbox--checked .sv-checkbox__svg\": \"background-color: $main-color; fill: $checkmark-color;\",\n \".sv-checkbox--checked.sv-checkbox--disabled .sv-checkbox__svg\": \"background-color: $disable-color; fill: $checkmark-color;\",\n \".sv-checkbox--disabled .sv-checkbox__svg\": \"border-color: $disable-color;\",\n \".sv-comment\": \"border-color: $text-border-color; max-width: 100%;\",\n \".sv-comment:focus\": \"border-color: $main-color;\",\n \".sv-completedpage\": \"color: $text-color; background-color: $body-container-background-color;\",\n \".sv-container-modern\": \"color: $text-color;\",\n \".sv-container-modern__title\": \"color: $main-color;\",\n \".sv-description\": \"color: $disabled-text-color;\",\n \".sv-dropdown\": \"border-bottom: 0.06em solid $text-border-color;\",\n \".sv-dropdown:focus\": \"border-color: $dropdown-border-color;\",\n \".sv-dropdown--error\": \"border-color: $error-color; color: $error-color;\",\n \".sv-dropdown--error::placeholder\": \"color: $error-color;\",\n \".sv-dropdown--error::-ms-input-placeholder\": \"color: $error-color;\",\n \".sv-file__decorator\": \"background-color: $body-container-background-color;\",\n \".sv-file__clean-btn\": \"background-color: $remove-button-color;\",\n \".sv-file__choose-btn:not(.sv-file__choose-btn--disabled)\": \"background-color: $add-button-color;\",\n \".sv-file__choose-btn--disabled\": \"background-color: $disable-color;\",\n \".sv-file__remove-svg\": \"fill: #ff1800;\",\n \".sv-file__sign a\": \"color: $text-color;\",\n \".sv-footer__complete-btn\": \"background-color: $main-color;\",\n \".sv-footer__next-btn\": \"background-color: $main-color;\",\n \".sv-footer__prev-btn\": \"background-color: $main-color;\",\n \".sv-footer__start-btn\": \"background-color: $main-color;\",\n \".sv-footer__preview-btn\": \"background-color: $main-color;\",\n \".sv-footer__edit-btn\": \"background-color: $main-color;\",\n \".sv-imagepicker__item--allowhover:hover .sv-imagepicker__image\": \"background-color: $main-hover-color; border-color: $main-hover-color;\",\n \".sv-imagepicker__item--checked .sv-imagepicker__image\": \"background-color: $main-color; border-color: $main-color;\",\n \".sv-imagepicker__item--disabled.sv-imagepicker__item--checked .sv-imagepicker__image\": \"background-color: $disable-color; border-color: $disable-color;\",\n \".sv-item__control:focus + .sv-item__decorator\": \"border-color: $main-color;\",\n \".sv-matrix__text--checked\": \"color: $matrix-text-checked-color; background-color: $main-color;\",\n \".sv-matrix__text--disabled.sv-matrix__text--checked\": \"background-color: $disable-color;\",\n \".sv-matrixdynamic__add-btn\": \"background-color: $add-button-color;\",\n \".sv-matrixdynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-matrixdynamic__drag-icon\": \"padding-top:16px\",\n \".sv-matrixdynamic__drag-icon:after\": \"content: ' '; display: block; height: 4px; width: 16px; border: 1px solid $border-color; box-sizing: border-box; border-radius: 10px; cursor: move;\",\n \".sv-paneldynamic__add-btn\": \"background-color: $add-button-color;\",\n \".sv-paneldynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-paneldynamic__prev-btn, .sv-paneldynamic__next-btn\": \"fill: $text-color;\",\n \".sv-paneldynamic__prev-btn--disabled, .sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv-progress\": \"background-color: $header-background-color;\",\n \".sv-progress__bar\": \"background-color: $main-color;\",\n \".sv-progress__text\": \"color: $progress-text-color;\",\n \".sv-question__erbox\": \"color: $error-color;\",\n \".sv-question__title--answer\": \"background-color: $answer-background-color;\",\n \".sv-question__title--error\": \"background-color: $error-background-color;\",\n \".sv-panel__title--error\": \"background-color: $error-background-color;\",\n \".sv-radio__svg\": \"border-color: $border-color; fill: transparent;\",\n \".sv-radio--allowhover:hover .sv-radio__svg\": \"fill: $border-color;\",\n \".sv-radio--checked .sv-radio__svg\": \"border-color: $radio-checked-color; fill: $radio-checked-color;\",\n \".sv-radio--disabled .sv-radio__svg\": \"border-color: $disable-color;\",\n \".sv-radio--disabled.sv-radio--checked .sv-radio__svg\": \"fill: $disable-color;\",\n \".sv-rating\": \"color: $text-color;\",\n \".sv-rating input:focus + .sv-rating__min-text + .sv-rating__item-text, .sv-rating input:focus + .sv-rating__item-text\": \"outline-color: $main-color;\",\n \".sv-rating__item-text\": \"color: $main-hover-color; border: solid 0.1875em $main-hover-color;\",\n \".sv-rating__item-text:hover\": \"background-color: $main-hover-color; color: $body-background-color;\",\n \".sv-rating__item--selected .sv-rating__item-text\": \"background-color: $main-color; color: $body-background-color; border-color: $main-color;\",\n \".sv-rating--disabled .sv-rating__item-text\": \"color: $disable-color; border-color: $disable-color;\",\n \".sv-rating--disabled .sv-rating__item-text:hover\": \"background-color: transparent;\",\n \".sv-rating--disabled .sv-rating__item-text:hover .sv-rating__item--selected .sv-rating__item-text\": \"background-color: $disable-color; color: $body-background-color;\",\n \"::-webkit-scrollbar\": \"background-color: $main-hover-color;\",\n \"::-webkit-scrollbar-thumb\": \"background: $main-color;\",\n \".sv-selectbase__clear-btn\": \"background-color: $clean-button-color;\",\n \".sv-table\": \"background-color: rgba($main-hover-color, 0.1);\",\n \".sv-text:focus\": \"border-color: $main-color;\",\n '.sv-text[type=\"date\"]::-webkit-calendar-picker-indicator': \"color: transparent; background: transparent;\",\n \".sv-text--error\": \"color: $error-color; border-color: $error-color;\",\n \".sv-text--error::placeholder\": \"color: $error-color;\",\n \".sv-text--error::-ms-placeholder\": \"color: $error-color;\",\n \".sv-text--error:-ms-placeholder\": \"color: $error-color;\",\n \"input.sv-text, textarea.sv-comment, select.sv-dropdown\": \"color: $text-input-color; background-color: $inputs-background-color;\",\n \".sv-text::placeholder\": \"color: $text-input-color;\",\n \".sv-text::-ms-placeholder\": \"color: $text-input-color;\",\n \".sv-text:-ms-placeholder\": \"color: $text-input-color;\",\n \".sv-table__row--detail\": \"background-color: $header-background-color;\",\n //signature pad\n \".sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sjs_sp_placeholder\": \"color: $foreground-light;\",\n };\n StylesManager.bootstrapThemeCss = {\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color\",\n \".sv_main .sv_p_description\": \"padding-left: 1.66em;\",\n \".sv_main .sv_qstn_error_bottom\": \"margin-top: 20px; margin-bottom: 0;\",\n \".sv_main .progress\": \"width: 60%;\",\n \".sv_main .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n \".sv_main .table>tbody>tr>td\": \"min-width: 90px;\",\n \".sv_main f-panel .sv_qstn\": \"padding: 0; vertical-align: middle;\",\n \".sv_main .sv_q_image\": \"display: inline-block;\",\n \".sv_main .sv_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n //eo boolean\n //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n };\n StylesManager.bootstrapmaterialThemeCss = {\n \".sv_main.sv_bootstrapmaterial_css .form-group.is-focused .form-control\": \"linear-gradient(0deg, $main-color 2px, $main-color 0),linear-gradient(0deg, #D2D2D2 1px, transparent 0);\",\n \".sv_main.sv_bootstrapmaterial_css .sv_qstn\": \"margin-bottom: 1rem;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_qstn label.sv_q_m_label\": \"height: 100%;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_image\": \"display: inline-block;\",\n \".sv_main .sv_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-default.active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-default:active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-secondary.active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-secondary:active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .open>.dropdown-toggle.btn-default\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary, .sv_main.sv_bootstrapmaterial_css button.btn-primary\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary:hover, .sv_main.sv_bootstrapmaterial_css button.btn-primary:hover\": \"background-color: $main-hover-color;\",\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_file_remove:hover\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .form-group input[type=file]\": \"position: relative; opacity: 1;\",\n \".sv_main.sv_bootstrapmaterial_css .progress\": \"width: 60%; height: 1.5em;\",\n \".sv_main.sv_bootstrapmaterial_css .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean .checkbox-decorator\": \"display: none;\",\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label.sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean__label\": \"color: $text-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n //eo boolean\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n };\n StylesManager.Enabled = true;\n return StylesManager;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-element.ts\":\n/*!*******************************!*\\\n !*** ./src/survey-element.ts ***!\n \\*******************************/\n/*! exports provided: SurveyElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return SurveyElement; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n/**\n * Base class of SurveyJS Elements.\n */\nvar SurveyElement = /** @class */ (function (_super) {\n __extends(SurveyElement, _super);\n function SurveyElement(name) {\n var _this = _super.call(this) || this;\n _this.selectedElementInDesignValue = _this;\n _this.disableDesignActions = SurveyElement.CreateDisabledDesignElements;\n _this.isContentElement = false;\n _this.isEditableTemplateElement = false;\n _this.isInteractiveDesignElement = true;\n _this.name = name;\n _this.createNewArray(\"errors\");\n _this.createNewArray(\"titleActions\");\n _this.registerFunctionOnPropertyValueChanged(\"isReadOnly\", function () {\n _this.onReadOnlyChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"errors\", function () {\n _this.updateVisibleErrors();\n });\n return _this;\n }\n SurveyElement.getProgressInfoByElements = function (children, isRequired) {\n var info = _base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"].createProgressInfo();\n for (var i = 0; i < children.length; i++) {\n if (!children[i].isVisible)\n continue;\n var childInfo = children[i].getProgressInfo();\n info.questionCount += childInfo.questionCount;\n info.answeredQuestionCount += childInfo.answeredQuestionCount;\n info.requiredQuestionCount += childInfo.requiredQuestionCount;\n info.requiredAnsweredQuestionCount +=\n childInfo.requiredAnsweredQuestionCount;\n }\n if (isRequired && info.questionCount > 0) {\n if (info.requiredQuestionCount == 0)\n info.requiredQuestionCount = 1;\n if (info.answeredQuestionCount > 0)\n info.requiredAnsweredQuestionCount = 1;\n }\n return info;\n };\n SurveyElement.ScrollElementToTop = function (elementId) {\n if (!elementId || typeof document === \"undefined\")\n return false;\n var el = document.getElementById(elementId);\n if (!el || !el.scrollIntoView)\n return false;\n var elemTop = el.getBoundingClientRect().top;\n if (elemTop < 0)\n el.scrollIntoView();\n return elemTop < 0;\n };\n SurveyElement.GetFirstNonTextElement = function (elements, removeSpaces) {\n if (removeSpaces === void 0) { removeSpaces = false; }\n if (!elements || !elements.length || elements.length == 0)\n return null;\n if (removeSpaces) {\n var tEl = elements[0];\n if (tEl.nodeName === \"#text\")\n tEl.data = \"\";\n tEl = elements[elements.length - 1];\n if (tEl.nodeName === \"#text\")\n tEl.data = \"\";\n }\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].nodeName != \"#text\" && elements[i].nodeName != \"#comment\")\n return elements[i];\n }\n return null;\n };\n SurveyElement.FocusElement = function (elementId) {\n if (!elementId || typeof document === \"undefined\")\n return false;\n var res = SurveyElement.focusElementCore(elementId);\n if (!res) {\n setTimeout(function () {\n SurveyElement.focusElementCore(elementId);\n }, 10);\n }\n return res;\n };\n SurveyElement.focusElementCore = function (elementId) {\n var el = document.getElementById(elementId);\n if (el) {\n el.focus();\n return true;\n }\n return false;\n };\n SurveyElement.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n if (name === \"state\") {\n if (oldValue === \"default\" || newValue === \"default\") {\n this.updateTitleActions();\n }\n else {\n this.updateExpandAction();\n }\n if (this.stateChangedCallback)\n this.stateChangedCallback();\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"state\", {\n /**\n * Set this property to \"collapsed\" to render only Panel title and expanded button and to \"expanded\" to render the collapsed button in the Panel caption\n */\n get: function () {\n return this.getPropertyValue(\"state\");\n },\n set: function (val) {\n this.setPropertyValue(\"state\", val);\n this.notifyStateChanged();\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.notifyStateChanged = function () {\n if (this.survey) {\n this.survey.elementContentVisibilityChanged(this);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"isCollapsed\", {\n /**\n * Returns true if the Element is in the collapsed state\n * @see state\n * @see collapse\n * @see isExpanded\n */\n get: function () {\n if (this.isDesignMode)\n return;\n return this.state == \"collapsed\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isExpanded\", {\n /**\n * Returns true if the Element is in the expanded state\n * @see state\n * @see expand\n * @see isCollapsed\n */\n get: function () {\n return this.state == \"expanded\";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Collapse the Element\n * @see state\n */\n SurveyElement.prototype.collapse = function () {\n if (this.isDesignMode)\n return;\n this.state = \"collapsed\";\n };\n /**\n * Expand the Element\n * @see state\n */\n SurveyElement.prototype.expand = function () {\n this.state = \"expanded\";\n };\n /**\n * Toggle element's state\n * @see state\n */\n SurveyElement.prototype.toggleState = function () {\n if (this.isCollapsed) {\n this.expand();\n return true;\n }\n if (this.isExpanded) {\n this.collapse();\n return false;\n }\n return true;\n };\n Object.defineProperty(SurveyElement.prototype, \"hasStateButton\", {\n get: function () {\n return this.isExpanded || this.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleToolbar = function () {\n if (!this.titleToolbarValue) {\n this.titleToolbarValue = new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__[\"AdaptiveActionContainer\"]();\n this.titleToolbarValue.setItems(this.getTitleActions());\n }\n return this.titleToolbarValue;\n };\n SurveyElement.prototype.updateExpandAction = function () {\n if (!!this.expandAction) {\n this.expandAction.visible = this.isExpanded || this.isCollapsed;\n this.expandAction.innerCss =\n \"sv-expand-action\" +\n (this.isExpanded ? \" sv-expand-action--expanded\" : \"\");\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"titleActions\", {\n get: function () {\n return this.getPropertyValue(\"titleActions\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleActions = function () {\n if (!this.isTitleActionRequested) {\n this.updateTitleActions();\n this.isTitleActionRequested = true;\n }\n return this.titleActions;\n };\n SurveyElement.prototype.updateTitleActions = function () {\n var _this = this;\n var actions = [];\n if (this.hasStateButton && !this.expandAction) {\n this.expandAction = new _actions_action__WEBPACK_IMPORTED_MODULE_4__[\"Action\"]({\n id: \"expand-collapse-action\",\n title: \"\",\n disableTabStop: true,\n action: function () {\n _this.toggleState();\n },\n });\n }\n if (!!this.expandAction) {\n actions.push(this.expandAction);\n }\n if (!!this.survey) {\n actions = this.survey.getUpdatedElementTitleActions(this, actions);\n }\n this.updateExpandAction();\n this.setPropertyValue(\"titleActions\", actions);\n };\n Object.defineProperty(SurveyElement.prototype, \"hasTitleActions\", {\n get: function () {\n return this.getTitleActions().length > 0;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleComponentName = function () {\n var componentName = _rendererFactory__WEBPACK_IMPORTED_MODULE_2__[\"RendererFactory\"].Instance.getRenderer(\"element\", \"title-actions\");\n if (componentName == \"default\") {\n return \"sv-default-title\";\n }\n return componentName;\n };\n Object.defineProperty(SurveyElement.prototype, \"titleTabIndex\", {\n get: function () {\n return this.state !== \"default\" ? 0 : undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"titleAriaExpanded\", {\n get: function () {\n if (this.state === \"default\")\n return undefined;\n return this.state === \"expanded\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.setSurveyImpl = function (value) {\n this.surveyImplValue = value;\n if (!this.surveyImplValue) {\n this.setSurveyCore(null);\n }\n else {\n this.surveyDataValue = this.surveyImplValue.getSurveyData();\n this.setSurveyCore(this.surveyImplValue.getSurvey());\n this.textProcessorValue = this.surveyImplValue.getTextProcessor();\n this.onSetData();\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"surveyImpl\", {\n get: function () {\n return this.surveyImplValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"data\", {\n get: function () {\n return this.surveyDataValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"survey\", {\n /**\n * Returns the survey object.\n */\n get: function () {\n return this.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (!!this.surveyValue)\n return this.surveyValue;\n if (!!this.surveyImplValue) {\n this.setSurveyCore(this.surveyImplValue.getSurvey());\n }\n return this.surveyValue;\n };\n SurveyElement.prototype.setSurveyCore = function (value) {\n this.surveyValue = value;\n if (!!this.surveyChangedCallback) {\n this.surveyChangedCallback();\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"isDesignMode\", {\n /**\n * Returns true if the question in design mode right now.\n */\n get: function () {\n return !!this.survey && this.survey.isDesignMode;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isInternal\", {\n get: function () {\n return this.isContentElement;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"areInvisibleElementsShowing\", {\n get: function () {\n return (!!this.survey &&\n this.survey.areInvisibleElementsShowing &&\n !this.isContentElement);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isVisible\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isReadOnly\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"readOnly\", {\n /**\n * Set it to true to make an element question/panel/page readonly.\n * Please note, this property is hidden for question without input, for example html question.\n * @see enableIf\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"readOnly\", false);\n },\n set: function (val) {\n if (this.readOnly == val)\n return;\n this.setPropertyValue(\"readOnly\", val);\n if (!this.isLoadingFromJson) {\n this.setPropertyValue(\"isReadOnly\", this.isReadOnly);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.onReadOnlyChanged = function () {\n if (!!this.readOnlyChangedCallback) {\n this.readOnlyChangedCallback();\n }\n };\n SurveyElement.prototype.updateElementCss = function (reNew) { };\n SurveyElement.prototype.getIsLoadingFromJson = function () {\n if (_super.prototype.getIsLoadingFromJson.call(this))\n return true;\n return this.survey ? this.survey.isLoadingFromJson : false;\n };\n Object.defineProperty(SurveyElement.prototype, \"name\", {\n /**\n * This is the identifier of a survey element - question or panel.\n * @see valueName\n */\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n var oldValue = this.name;\n this.setPropertyValue(\"name\", this.getValidName(val));\n if (!this.isLoadingFromJson && !!oldValue) {\n this.onNameChanged(oldValue);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getValidName = function (name) {\n return name;\n };\n SurveyElement.prototype.onNameChanged = function (oldValue) { };\n SurveyElement.prototype.updateBindingValue = function (valueName, value) {\n if (!!this.data &&\n !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(value, this.data.getValue(valueName))) {\n this.data.setValue(valueName, value, false);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"errors\", {\n /**\n * The list of errors. It is created by callig hasErrors functions\n * @see hasErrors\n */\n get: function () {\n return this.getPropertyValue(\"errors\");\n },\n set: function (val) {\n this.setPropertyValue(\"errors\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.updateVisibleErrors = function () {\n var counter = 0;\n for (var i = 0; i < this.errors.length; i++) {\n if (this.errors[i].visible)\n counter++;\n }\n this.hasVisibleErrors = counter > 0;\n };\n Object.defineProperty(SurveyElement.prototype, \"containsErrors\", {\n /**\n * Returns true if a question or a container (panel/page) or their chidren have an error.\n * The value can be out of date. hasErrors function should be called to get the correct value.\n */\n get: function () {\n return this.getPropertyValue(\"containsErrors\", false);\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.updateContainsErrors = function () {\n this.setPropertyValue(\"containsErrors\", this.getContainsErrors());\n };\n SurveyElement.prototype.getContainsErrors = function () {\n return this.errors.length > 0;\n };\n SurveyElement.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return [];\n };\n Object.defineProperty(SurveyElement.prototype, \"selectedElementInDesign\", {\n get: function () {\n return this.selectedElementInDesignValue;\n },\n set: function (val) {\n this.selectedElementInDesignValue = val;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.updateCustomWidgets = function () { };\n SurveyElement.prototype.onSurveyLoad = function () { };\n SurveyElement.prototype.onFirstRendering = function () { };\n SurveyElement.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n if (!this.survey) {\n this.onSurveyLoad();\n }\n };\n SurveyElement.prototype.setVisibleIndex = function (index) {\n return 0;\n };\n Object.defineProperty(SurveyElement.prototype, \"isPage\", {\n /**\n * Returns true if it is a page.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isPanel\", {\n /**\n * Returns true if it is a panel.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isQuestion\", {\n /**\n * Returns true if it is a question.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.delete = function () { };\n SurveyElement.prototype.removeSelfFromList = function (list) {\n if (!list || !Array.isArray(list))\n return;\n var index = list.indexOf(this);\n if (index > -1) {\n list.splice(index, 1);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"textProcessor\", {\n get: function () {\n return this.textProcessorValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getProcessedHtml = function (html) {\n if (!html || !this.textProcessor)\n return html;\n return this.textProcessor.processText(html, true);\n };\n SurveyElement.prototype.onSetData = function () { };\n Object.defineProperty(SurveyElement.prototype, \"parent\", {\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"parent\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getPage = function (parent) {\n while (parent && parent.parent)\n parent = parent.parent;\n if (parent && parent.getType() == \"page\")\n return parent;\n return null;\n };\n SurveyElement.prototype.moveToBase = function (parent, container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n if (!container)\n return false;\n parent.removeElement(this);\n var index = -1;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(insertBefore)) {\n index = parseInt(insertBefore);\n }\n if (index == -1 && !!insertBefore && !!insertBefore.getType) {\n index = container.indexOf(insertBefore);\n }\n container.addElement(this, index);\n return true;\n };\n SurveyElement.prototype.setPage = function (parent, val) {\n var oldPage = this.getPage(parent);\n if (oldPage === val)\n return;\n if (parent)\n parent.removeElement(this);\n if (val) {\n val.addElement(this, -1);\n }\n };\n SurveyElement.prototype.getSearchableLocKeys = function (keys) {\n keys.push(\"title\");\n keys.push(\"description\");\n };\n SurveyElement.CreateDisabledDesignElements = false;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], SurveyElement.prototype, \"hasVisibleErrors\", void 0);\n return SurveyElement;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-error.ts\":\n/*!*****************************!*\\\n !*** ./src/survey-error.ts ***!\n \\*****************************/\n/*! exports provided: SurveyError */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return SurveyError; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n\nvar SurveyError = /** @class */ (function () {\n function SurveyError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n this.text = text;\n this.errorOwner = errorOwner;\n this.visible = true;\n }\n Object.defineProperty(SurveyError.prototype, \"locText\", {\n get: function () {\n if (!this.locTextValue) {\n this.locTextValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](this.errorOwner, true);\n this.locTextValue.text = this.getText();\n }\n return this.locTextValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyError.prototype.getText = function () {\n var res = this.text;\n if (!res)\n res = this.getDefaultText();\n if (!!this.errorOwner) {\n res = this.errorOwner.getErrorCustomText(res, this);\n }\n return res;\n };\n SurveyError.prototype.getErrorType = function () {\n return \"base\";\n };\n SurveyError.prototype.getDefaultText = function () {\n return \"\";\n };\n return SurveyError;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/survey.ts\":\n/*!***********************!*\\\n !*** ./src/survey.ts ***!\n \\***********************/\n/*! exports provided: SurveyModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return SurveyModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./page */ \"./src/page.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./surveytimer */ \"./src/surveytimer.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The `Survey` object contains information about the survey, Pages, Questions, flow logic and etc.\n */\nvar SurveyModel = /** @class */ (function (_super) {\n __extends(SurveyModel, _super);\n //#endregion\n function SurveyModel(jsonObj) {\n if (jsonObj === void 0) { jsonObj = null; }\n var _this = _super.call(this) || this;\n _this.valuesHash = {};\n _this.variablesHash = {};\n _this.localeValue = \"\";\n _this.completedStateValue = \"\";\n _this.completedStateTextValue = \"\";\n _this.isTimerStarted = false;\n //#region Event declarations\n /**\n * The event is fired before the survey is completed and the `onComplete` event is fired. You can prevent the survey from completing by setting `options.allowComplete` to `false`\n *
`sender` - the survey object that fires the event.\n *
`options.allowComplete` - Specifies whether a user can complete a survey. Set this property to `false` to prevent the survey from completing. The default value is `true`.\n *
`options.isCompleteOnTrigger` - returns true if the survey is completing on \"complete\" trigger.\n * @see onComplete\n */\n _this.onCompleting = _this.addEvent();\n /**\n * The event is fired after a user clicks the 'Complete' button and finishes a survey. Use this event to send the survey data to your web server.\n *
`sender` - the survey object that fires the event.\n *
`options.showDataSaving(text)` - call this method to show that the survey is saving survey data on your server. The `text` is an optional parameter to show a custom message instead of default.\n *
`options.showDataSavingError(text)` - call this method to show that an error occurred while saving the data on your server. If you want to show a custom error, use an optional `text` parameter.\n *
`options.showDataSavingSuccess(text)` - call this method to show that the data was successfully saved on the server.\n *
`options.showDataSavingClear` - call this method to hide the text about the saving progress.\n *
`options.isCompleteOnTrigger` - returns true if the survey is completed on \"complete\" trigger.\n * @see data\n * @see clearInvisibleValues\n * @see completeLastPage\n * @see surveyPostId\n */\n _this.onComplete = _this.addEvent();\n /**\n * The event is fired before the survey is going to preview mode, state equals to `preview`. It happens when a user click on \"Preview\" button. It shows when \"showPreviewBeforeComplete\" proeprty equals to \"showAllQuestions\" or \"showAnsweredQuestions\".\n * You can prevent showing it by setting allowShowPreview to `false`.\n *
`sender` - the survey object that fires the event.\n *
`options.allowShowPreview` - Specifies whether a user can see a preview. Set this property to `false` to prevent from showing the preview. The default value is `true`.\n * @see showPreviewBeforeComplete\n */\n _this.onShowingPreview = _this.addEvent();\n /**\n * The event is fired after a user clicks the 'Complete' button. The event allows you to specify the URL opened after completing a survey.\n * Specify the `navigateToUrl` property to make survey navigate to another url.\n *
`sender` - the survey object that fires the event.\n *
`options.url` - Specifies a URL opened after completing a survey. Set this property to an empty string to cancel the navigation and show the completed survey page.\n * @see navigateToUrl\n * @see navigateToUrlOnCondition\n */\n _this.onNavigateToUrl = _this.addEvent();\n /**\n * The event is fired after the survey changed it's state from \"starting\" to \"running\". The \"starting\" state means that survey shows the started page.\n * The `firstPageIsStarted` property should be set to `true`, if you want to display a start page in your survey. In this case, an end user should click the \"Start\" button to start the survey.\n * @see firstPageIsStarted\n */\n _this.onStarted = _this.addEvent();\n /**\n * The event is fired on clicking the 'Next' button if the `sendResultOnPageNext` is set to `true`. You can use it to save the intermediate results, for example, if your survey is large enough.\n *
`sender` - the survey object that fires the event.\n * @see sendResultOnPageNext\n */\n _this.onPartialSend = _this.addEvent();\n /**\n * The event is fired before the current page changes to another page. Typically it happens when a user click the 'Next' or 'Prev' buttons.\n *
`sender` - the survey object that fires the event.\n *
`option.oldCurrentPage` - the previous current/active page.\n *
`option.newCurrentPage` - a new current/active page.\n *
`option.allowChanging` - set it to `false` to disable the current page changing. It is `true` by default.\n *
`option.isNextPage` - commonly means, that end-user press the next page button. In general, it means that options.newCurrentPage is the next page after options.oldCurrentPage\n *
`option.isPrevPage` - commonly means, that end-user press the previous page button. In general, it means that options.newCurrentPage is the previous page before options.oldCurrentPage\n * @see currentPage\n * @see currentPageNo\n * @see nextPage\n * @see prevPage\n * @see completeLastPage\n * @see onCurrentPageChanged\n **/\n _this.onCurrentPageChanging = _this.addEvent();\n /**\n * The event is fired when the current page has been changed to another page. Typically it happens when a user click on 'Next' or 'Prev' buttons.\n *
`sender` - the survey object that fires the event.\n *
`option.oldCurrentPage` - a previous current/active page.\n *
`option.newCurrentPage` - a new current/active page.\n *
`option.isNextPage` - commonly means, that end-user press the next page button. In general, it means that options.newCurrentPage is the next page after options.oldCurrentPage\n *
`option.isPrevPage` - commonly means, that end-user press the previous page button. In general, it means that options.newCurrentPage is the previous page before options.oldCurrentPage\n * @see currentPage\n * @see currentPageNo\n * @see nextPage\n * @see prevPage\n * @see completeLastPage\n * @see onCurrentPageChanging\n */\n _this.onCurrentPageChanged = _this.addEvent();\n /**\n * The event is fired before the question value (answer) is changed. It can be done via UI by a user or programmatically on calling the `setValue` method.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the value name that has being changed.\n *
`options.question` - a question which `question.name` equals to the value name. If there are several questions with the same name, the first question is used. If there is no such questions, the `options.question` is null.\n *
`options.oldValue` - an old, previous value.\n *
`options.value` - a new value. You can change it.\n * @see setValue\n * @see onValueChanged\n */\n _this.onValueChanging = _this.addEvent();\n /**\n * The event is fired when the question value (i.e., answer) has been changed. The question value can be changed in UI (by a user) or programmatically (on calling `setValue` method).\n * Use the `onDynamicPanelItemValueChanged` and `onMatrixCellValueChanged` events to handle changes in a question in the Panel Dynamic and a cell question in matrices.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the value name that has been changed.\n *
`options.question` - a question which `question.name` equals to the value name. If there are several questions with the same name, the first question is used. If there is no such questions, the `options.question` is `null`.\n *
`options.value` - a new value.\n * @see setValue\n * @see onValueChanging\n * @see onDynamicPanelItemValueChanged\n * @see onMatrixCellValueChanged\n */\n _this.onValueChanged = _this.addEvent();\n /**\n * The event is fired when a question visibility has been changed.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question which visibility has been changed.\n *
`options.name` - a question name.\n *
`options.visible` - a question `visible` boolean value.\n * @see Question.visibile\n * @see Question.visibileIf\n */\n _this.onVisibleChanged = _this.addEvent();\n /**\n * The event is fired on changing a page visibility.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page which visibility has been changed.\n *
`options.visible` - a page `visible` boolean value.\n * @see PageModel.visibile\n * @see PageModel.visibileIf\n */\n _this.onPageVisibleChanged = _this.addEvent();\n /**\n * The event is fired on changing a panel visibility.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a panel which visibility has been changed.\n *
`options.visible` - a panel `visible` boolean value.\n * @see PanelModel.visibile\n * @see PanelModel.visibileIf\n */\n _this.onPanelVisibleChanged = _this.addEvent();\n /**\n * The event is fired on creating a new question.\n * Unlike the onQuestionAdded event, this event calls for all question created in survey including inside: a page, panel, matrix cell, dynamic panel and multiple text.\n * or inside a matrix cell or it can be a text question in multiple text items or inside a panel of a panel dynamic.\n * You can use this event to set up properties to a question based on it's type for all questions, regardless where they are located, on the page or inside a matrix cell.\n * Please note: If you want to use this event for questions loaded from JSON then you have to create survey with empty/null JSON parameter, assign the event and call survey.fromJSON(yourJSON) function.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a newly created question object.\n * @see Question\n * @see onQuestionAdded\n */\n _this.onQuestionCreated = _this.addEvent();\n /**\n * The event is fired on adding a new question into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a newly added question object.\n *
`options.name` - a question name.\n *
`options.index` - an index of the question in the container (page or panel).\n *
`options.parentPanel` - a container where a new question is located. It can be a page or panel.\n *
`options.rootPanel` - typically, it is a page.\n * @see Question\n * @see onQuestionCreated\n */\n _this.onQuestionAdded = _this.addEvent();\n /**\n * The event is fired on removing a question from survey.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a removed question object.\n *
`options.name` - a question name.\n * @see Question\n */\n _this.onQuestionRemoved = _this.addEvent();\n /**\n * The event is fired on adding a panel into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a newly added panel object.\n *
`options.name` - a panel name.\n *
`options.index` - an index of the panel in the container (a page or panel).\n *
`options.parentPanel` - a container (a page or panel) where a new panel is located.\n *
`options.rootPanel` - a root container, typically it is a page.\n * @see PanelModel\n */\n _this.onPanelAdded = _this.addEvent();\n /**\n * The event is fired on removing a panel from survey.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a removed panel object.\n *
`options.name` - a panel name.\n * @see PanelModel\n */\n _this.onPanelRemoved = _this.addEvent();\n /**\n * The event is fired on adding a page into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a newly added `panel` object.\n * @see PanelModel\n */\n _this.onPageAdded = _this.addEvent();\n /**\n * The event is fired on validating value in a question. You can specify a custom error message using `options.error`. The survey blocks completing the survey or going to the next page when the error messages are displayed.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a validated question.\n *
`options.name` - a question name.\n *
`options.value` - the current question value (answer).\n *
`options.error` - an error string. It is empty by default.\n * @see onServerValidateQuestions\n * @see onSettingQuestionErrors\n */\n _this.onValidateQuestion = _this.addEvent();\n /**\n * The event is fired before errors are assigned to a question. You may add/remove/modify errors for a question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a validated question.\n *
`options.errors` - the list of errors. The list is empty by default and remains empty if a validated question has no errors.\n * @see onValidateQuestion\n */\n _this.onSettingQuestionErrors = _this.addEvent();\n /**\n * Use this event to validate data on your server.\n *
`sender` - the survey object that fires the event.\n *
`options.data` - the values of all non-empty questions on the current page. You can get a question value as `options.data[\"myQuestionName\"]`.\n *
`options.errors` - set your errors to this object as: `options.errors[\"myQuestionName\"] = \"Error text\";`. It will be shown as a question error.\n *
`options.complete()` - call this function to tell survey that your server callback has been processed.\n * @see onValidateQuestion\n * @see onValidatePanel\n */\n _this.onServerValidateQuestions = _this.addEvent();\n /**\n * Use this event to modify the HTML before rendering, for example HTML on a completed page.\n *
`sender` - the survey object that fires the event.\n *
`options.html` - an HTML that you may change before text processing and then rendering.\n * @see completedHtml\n * @see loadingHtml\n * @see QuestionHtmlModel.html\n */\n /**\n * The event is fired on validating a panel. Set your error to `options.error` and survey will show the error for the panel and block completing the survey or going to the next page.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - a panel name.\n *
`options.error` - an error string. It is empty by default.\n * @see onValidateQuestion\n */\n _this.onValidatePanel = _this.addEvent();\n /**\n * Use the event to change the default error text.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - an error text.\n *
`options.error` - an instance of the `SurveyError` object.\n *
`options.name` - the error name. The following error names are available:\n * required, requireoneanswer, requirenumeric, exceedsize, webrequest, webrequestempty, otherempty,\n * uploadingfile, requiredinallrowserror, minrowcounterror, keyduplicationerror, custom\n */\n _this.onErrorCustomText = _this.addEvent();\n /**\n * Use the this event to be notified when the survey finished validate questions on the current page. It commonly happens when a user try to go to the next page or complete the survey\n * options.questions - the list of questions that have errors\n * options.errors - the list of errors\n * options.page - the page where question(s) are located\n */\n _this.onValidatedErrorsOnCurrentPage = _this.addEvent();\n /**\n * Use this event to modify the HTML content before rendering, for example `completeHtml` or `loadingHtml`.\n * `options.html` - specifies the modified HTML content.\n * @see completedHtml\n * @see loadingHtml\n */\n _this.onProcessHtml = _this.addEvent();\n /**\n * Use this event to change the question title in code. If you want to remove question numbering then set showQuestionNumbers to \"off\".\n *
`sender` - the survey object that fires the event.\n *
`options.title` - a calculated question title, based on question `title`, `name`.\n *
`options.question` - a question object.\n * @see showQuestionNumbers\n * @see requiredText\n */\n _this.onGetQuestionTitle = _this.addEvent();\n /**\n * Use this event to change the question no in code. If you want to remove question numbering then set showQuestionNumbers to \"off\".\n *
`sender` - the survey object that fires the event.\n *
`options.no` - a calculated question no, based on question `visibleIndex`, survey `.questionStartIndex` properties. You can change it.\n *
`options.question` - a question object.\n * @see showQuestionNumbers\n * @see questionStartIndex\n */\n _this.onGetQuestionNo = _this.addEvent();\n /**\n * Use this event to change the progress text in code.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - a progress text, that SurveyJS will render in progress bar.\n *
`options.questionCount` - a number of questions that have input(s). We do not count html or expression questions\n *
`options.answeredQuestionCount` - a number of questions that have input(s) and an user has answered.\n *
`options.requiredQuestionCount` - a number of required questions that have input(s). We do not count html or expression questions\n *
`options.requiredAnsweredQuestionCount` - a number of required questions that have input(s) and an user has answered.\n * @see progressBarType\n */\n _this.onProgressText = _this.addEvent();\n /**\n * Use this event to process the markdown text.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - SurveyJS element (a question, panel, page, or survey) where the string is going to be rendered.\n *
`options.name` - a property name is going to be rendered.\n *
`options.text` - a text that is going to be rendered.\n *
`options.html` - an HTML content. It is `null` by default. Use this property to specify the HTML content rendered instead of `options.text`.\n */\n _this.onTextMarkdown = _this.addEvent();\n /**\n * Use this event to specity render component name used for text rendering.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - SurveyJS element (a question, panel, page, or survey) where the string is going to be rendered.\n *
`options.name` - a property name is going to be rendered.\n *
`options.renderAs` - a component name used for text rendering.\n */\n _this.onTextRenderAs = _this.addEvent();\n /**\n * The event fires when it gets response from the [api.surveyjs.io](https://api.surveyjs.io) service on saving survey results. Use it to find out if the results have been saved successfully.\n *
`sender` - the survey object that fires the event.\n *
`options.success` - it is `true` if the results has been sent to the service successfully.\n *
`options.response` - a response from the service.\n */\n _this.onSendResult = _this.addEvent();\n /**\n * Use it to get results after calling the `getResult` method. It returns a simple analytics from [api.surveyjs.io](https://api.surveyjs.io) service.\n *
`sender` - the survey object that fires the event.\n *
`options.success` - it is `true` if the results were got from the service successfully.\n *
`options.data` - the object `{AnswersCount, QuestionResult : {} }`. `AnswersCount` is the number of posted survey results. `QuestionResult` is an object with all possible unique answers to the question and number of these answers.\n *
`options.dataList` - an array of objects `{name, value}`, where `name` is a unique value/answer to the question and `value` is a number/count of such answers.\n *
`options.response` - the server response.\n * @see getResult\n */\n _this.onGetResult = _this.addEvent();\n /**\n * The event is fired on uploading the file in QuestionFile when `storeDataAsText` is set to `false`. Use this event to change the uploaded file name or to prevent a particular file from being uploaded.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the file question instance.\n *
`options.name` - the question name.\n *
`options.files` - the Javascript File objects array to upload.\n *
`options.callback` - a callback function to get the file upload status and the updloaded file content.\n * @see uploadFiles\n * @see QuestionFileModel.storeDataAsText\n * @see onDownloadFile\n * @see onClearFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onUploadFiles%22)\n */\n _this.onUploadFiles = _this.addEvent();\n /**\n * The event is fired on downloading a file in QuestionFile. Use this event to pass the file to a preview.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the question name.\n *
`options.content` - the file content.\n *
`options.fileValue` - single file question value.\n *
`options.callback` - a callback function to get the file downloading status and the downloaded file content.\n * @see downloadFile\n * @see onClearFiles\n * @see onUploadFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onDownloadFile%22)\n */\n _this.onDownloadFile = _this.addEvent();\n /**\n * This event is fired on clearing the value in a QuestionFile. Use this event to remove files stored on your server.\n *
`sender` - the survey object that fires the event.\n *
`question` - the question instance.\n *
`options.name` - the question name.\n *
`options.value` - the question value.\n *
`options.fileName` - a removed file's name, set it to `null` to clear all files.\n *
`options.callback` - a callback function to get the operation status.\n * @see clearFiles\n * @see onDownloadFile\n * @see onUploadFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onClearFiles%22)\n */\n _this.onClearFiles = _this.addEvent();\n /**\n * The event is fired after choices for radiogroup, checkbox, and dropdown has been loaded from a RESTful service and before they are assigned to a question.\n * You may change the choices, before they are assigned or disable/enabled make visible/invisible question, based on loaded results.\n *
`sender` - the survey object that fires the event.\n *
`question` - the question where loaded choices are going to be assigned.\n *
`choices` - the loaded choices. You can change the loaded choices to before they are assigned to question.\n *
`serverResult` - a result that comes from the server as it is.\n */\n _this.onLoadChoicesFromServer = _this.addEvent();\n /**\n * The event is fired after survey is loaded from api.surveyjs.io service.\n * You can use this event to perform manipulation with the survey model after it was loaded from the web service.\n *
`sender` - the survey object that fires the event.\n * @see surveyId\n * @see loadSurveyFromService\n */\n _this.onLoadedSurveyFromService = _this.addEvent();\n /**\n * The event is fired on processing the text when it finds a text in brackets: `{somevalue}`. By default, it uses the value of survey question values and variables.\n * For example, you may use the text processing in loading choices from the web. If your `choicesByUrl.url` equals to \"UrlToServiceToGetAllCities/{country}/{state}\",\n * you may set on this event `options.value` to \"all\" or empty string when the \"state\" value/question is non selected by a user.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the name of the processing value, for example, \"state\" in our example.\n *
`options.value` - the value of the processing text.\n *
`options.isExists` - a boolean value. Set it to `true` if you want to use the value and set it to `false` if you don't.\n */\n _this.onProcessTextValue = _this.addEvent();\n /**\n * The event is fired before rendering a question. Use it to override the default question CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{root: \"table\", button: \"button\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdateQuestionCssClasses = _this.addEvent();\n /**\n * The event is fired before rendering a panel. Use it to override the default panel CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a panel for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{title: \"sv_p_title\", description: \"small\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdatePanelCssClasses = _this.addEvent();\n /**\n * The event is fired before rendering a page. Use it to override the default page CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{title: \"sv_p_title\", description: \"small\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdatePageCssClasses = _this.addEvent();\n /**\n * The event is fired right after survey is rendered in DOM.\n *
`sender` - the survey object that fires the event.\n *
`options.htmlElement` - a root HTML element bound to the survey object.\n */\n _this.onAfterRenderSurvey = _this.addEvent();\n /**\n * The event is fired right after a page is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.htmlElement` - an HTML element bound to the survey header object.\n */\n _this.onAfterRenderHeader = _this.addEvent();\n /**\n * The event is fired right after a page is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page object for which the event is fired. Typically the current/active page.\n *
`options.htmlElement` - an HTML element bound to the page object.\n */\n _this.onAfterRenderPage = _this.addEvent();\n /**\n * The event is fired right after a question is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question object for which the event is fired.\n *
`options.htmlElement` - an HTML element bound to the question object.\n */\n _this.onAfterRenderQuestion = _this.addEvent();\n /**\n * The event is fired right after a non-composite question (text, comment, dropdown, radiogroup, checkbox) is rendered in DOM. Use it to modify HTML elements.\n * This event is not fired for matrices, panels, multiple text and image picker.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question object for which the event is fired.\n *
`options.htmlElement` - an HTML element bound to the question object.\n */\n _this.onAfterRenderQuestionInput = _this.addEvent();\n /**\n * The event is fired right after a panel is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event\n *
`options.panel` - a panel object for which the event is fired\n *
`options.htmlElement` - an HTML element bound to the panel object\n */\n _this.onAfterRenderPanel = _this.addEvent();\n /**\n * The event is fired on adding a new row in Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.row` - a new added row.\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n */\n _this.onMatrixRowAdded = _this.addEvent();\n /**\n * The event is fired before adding a new row in Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.canAddRow` - specifies whether a new row can be added\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n */\n _this.onMatrixBeforeRowAdded = _this.addEvent();\n /**\n * The event is fired before removing a row from Matrix Dynamic question. You can disable removing and clear the data instead.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.rowIndex` - a row index.\n *
`options.row` - a row object.\n *
`options.allow` - a boolean property. Set it to `false` to disable the row removing.\n * @see QuestionMatrixDynamicModel\n * @see onMatrixRowRemoved\n * @see onMatrixAllowRemoveRow\n */\n _this.onMatrixRowRemoving = _this.addEvent();\n /**\n * The event is fired on removing a row from Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question\n *
`options.rowIndex` - a removed row index\n *
`options.row` - a removed row object\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n * @see onMatrixRowRemoving\n * @see onMatrixAllowRemoveRow\n */\n _this.onMatrixRowRemoved = _this.addEvent();\n /**\n * The event is fired before rendering \"Remove\" button for removing a row from Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.rowIndex` - a row index.\n *
`options.row` - a row object.\n *
`options.allow` - a boolean property. Set it to `false` to disable the row removing.\n * @see QuestionMatrixDynamicModel\n * @see onMatrixRowRemoving\n * @see onMatrixRowRemoved\n */\n _this.onMatrixAllowRemoveRow = _this.addEvent();\n /**\n * The event is fired for every cell created in Matrix Dynamic and Matrix Dropdown questions.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.cell` - the matrix cell.\n *
`options.cellQuestion` - the question/editor in the cell. You may customize it, change it's properties, like choices or visible.\n *
`options.rowValue` - the value of the current row. To access a particular column's value within the current row, use: `options.rowValue[\"columnValue\"]`.\n *
`options.column` - the matrix column object.\n *
`options.columnName` - the matrix column name.\n *
`options.row` - the matrix row object.\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellCreated = _this.addEvent();\n /**\n * The event is fired for every cell after is has been rendered in DOM.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.cell` - the matrix cell.\n *
`options.cellQuestion` - the question/editor in the cell.\n *
`options.htmlElement` - an HTML element bound to the `cellQuestion` object.\n *
`options.column` - the matrix column object.\n *
`options.row` - the matrix row object.\n * @see onMatrixCellCreated\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixAfterCellRender = _this.addEvent();\n /**\n * The event is fired when cell value is changed in Matrix Dynamic and Matrix Dropdown questions.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.columnName` - the matrix column name.\n *
`options.value` - a new value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns the cell question by column name.\n * @see onMatrixCellValueChanging\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValueChanged = _this.addEvent();\n /**\n * The event is fired on changing cell value in Matrix Dynamic and Matrix Dropdown questions. You may change the `options.value` property to change a cell value.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.columnName` - the matrix column name.\n *
`options.value` - a new value.\n *
`options.oldValue` - the old value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns a cell question by column name.\n * @see onMatrixCellValueChanged\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValueChanging = _this.addEvent();\n /**\n * The event is fired when Matrix Dynamic and Matrix Dropdown questions validate the cell value.\n *
`sender` - the survey object that fires the event.\n *
`options.error` - an error string. It is empty by default.\n *
`options.question` - the matrix question.\n *
`options.columnName` - the matrix column name.\n *
`options.value` - a cell value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns the cell question by column name.\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValidate = _this.addEvent();\n /**\n * The event is fired on adding a new panel in Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a panel question.\n *
`options.panel` - an added panel.\n * @see QuestionPanelDynamicModel\n * @see QuestionPanelDynamicModel.panels\n */\n _this.onDynamicPanelAdded = _this.addEvent();\n /**\n * The event is fired on removing a panel from Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a panel question.\n *
`options.panelIndex` - a removed panel index.\n *
`options.panel` - a removed panel.\n * @see QuestionPanelDynamicModel\n * @see QuestionPanelDynamicModel.panels\n */\n _this.onDynamicPanelRemoved = _this.addEvent();\n /**\n * The event is fired every second if the method `startTimer` has been called.\n * @see startTimer\n * @see timeSpent\n * @see Page.timeSpent\n */\n _this.onTimer = _this.addEvent();\n /**\n * The event is fired before displaying a new information in the Timer Panel. Use it to change the default text.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - the timer panel info text.\n */\n _this.onTimerPanelInfoText = _this.addEvent();\n /**\n * The event is fired when item value is changed in Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the panel question.\n *
`options.panel` - the dynamic panel item.\n *
`options.name` - the item name.\n *
`options.value` - a new value.\n *
`options.itemIndex` - the panel item index.\n *
`options.itemValue` - the panel item object.\n * @see onDynamicPanelAdded\n * @see QuestionPanelDynamicModel\n */\n _this.onDynamicPanelItemValueChanged = _this.addEvent();\n /**\n * Use this event to define, whether an answer to a question is correct or not.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question on which you have to decide if the answer is correct or not.\n *
`options.result` - returns `true`, if an answer is correct, or `false`, if the answer is not correct. Use questions' `value` and `correctAnswer` properties to return the correct value.\n *
`options.correctAnswers` - you may change the default number of correct or incorrect answers in the question, for example for matrix, where each row is a quiz question.\n * @see Question.value\n * @see Question.correctAnswer\n */\n _this.onIsAnswerCorrect = _this.addEvent();\n /**\n * Use this event to control drag&drop operations during design mode.\n *
`sender` - the survey object that fires the event.\n *
`options.allow` - set it to `false` to disable dragging.\n *
`options.target` - a target element that is dragged.\n *
`options.source` - a source element. It can be `null`, if it is a new element, dragging from toolbox.\n *
`options.parent` - a page or panel where target element is dragging.\n *
`options.insertBefore` - an element before the target element is dragging. It can be `null` if parent container (page or panel) is empty or dragging an element after the last element in a container.\n *
`options.insertAfter` - an element after the target element is dragging. It can be `null` if parent container (page or panel) is empty or dragging element to the first position within the parent container.\n * @see setDesignMode\n * @see isDesignMode\n */\n _this.onDragDropAllow = _this.addEvent();\n /**\n * Use this event to control scrolling element to top. You can cancel the default behavior by setting options.cancel property to true.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - an element that is going to be scrolled on top.\n *
`options.question` - a question that is going to be scrolled on top. It can be null if options.page is not null.\n *
`options.page` - a page that is going to be scrolled on top. It can be null if options.question is not null.\n *
`options.elementId` - the unique element DOM Id.\n *
`options.cancel` - set this property to true to cancel the default scrolling.\n */\n _this.onScrollingElementToTop = _this.addEvent();\n _this.onLocaleChangedEvent = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a question's title.\n *
`sender` - A [Survey](https://surveyjs.io/Documentation/Library?id=SurveyModel) object that fires the event.\n *
`options.question` - A [Question](https://surveyjs.io/Documentation/Library?id=Question) object for which the event is fired.\n *
`options.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed question.\n * @see IAction\n * @see Question\n */\n _this.onGetQuestionTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a panel's title.\n *
`sender` - A survey object that fires the event.\n *
`options.panel` - A panel ([PanelModel](https://surveyjs.io/Documentation/Library?id=panelmodel) object) for which the event is fired.\n *
`options.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed panel.\n * @see IAction\n * @see PanelModel\n */\n _this.onGetPanelTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a page's title.\n *
`sender` - A survey object that fires the event.\n *
`options.page` - A page ([PageModel](https://surveyjs.io/Documentation/Library?id=pagemodel) object) for which the event is fired.\n *
`options.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed page.\n * @see IAction\n * @see PageModel\n */\n _this.onGetPageTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a matrix question's row.\n *
`sender` - A survey object that fires the event.\n *
`options.question` - A matrix question ([QuestionMatrixBaseModel](https://surveyjs.io/Documentation/Library?id=questionmatrixbasemodel) object) for which the event is fired.\n *
`options.row` - A matrix row for which the event is fired.\n *
`options.actions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed matrix question and row.\n * @see IAction\n * @see QuestionMatrixDropdownModelBase\n */\n _this.onGetMatrixRowActions = _this.addEvent();\n /**\n * The event is fired after the survey element content was collapsed or expanded.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - Specifies which survey element content was collapsed or expanded.\n * @see onElementContentVisibilityChanged\n */\n _this.onElementContentVisibilityChanged = _this.addEvent();\n /**\n * The event is fired before expression question convert it's value into display value for rendering.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - The expression question.\n *
`options.value` - The question value.\n *
`options.displayValue` - the display value that you can change before rendering.\n */\n _this.onGetExpressionDisplayValue = _this.addEvent();\n /**\n * The list of errors on loading survey JSON. If the list is empty after loading a JSON, then the JSON is correct and has no errors.\n * @see JsonError\n */\n _this.jsonErrors = null;\n _this.cssValue = null;\n /**\n * Gets or sets whether to hide all required errors.\n */\n _this.hideRequiredErrors = false;\n //#endregion\n _this._isMobile = false;\n _this._isDesignMode = false;\n /**\n * Gets or sets whether the survey must ignore validation like required questions and others, on `nextPage` and `completeLastPage` function calls. The default is `false`.\n * @see nextPage\n * @see completeLastPage\n * @see mode\n */\n _this.ignoreValidation = false;\n _this.isNavigationButtonPressed = false;\n _this.isCalculatingProgressText = false;\n _this.isTriggerIsRunning = false;\n _this.triggerValues = null;\n _this.triggerKeys = null;\n _this.conditionValues = null;\n _this.isValueChangedOnRunningCondition = false;\n _this.conditionRunnerCounter = 0;\n _this.conditionUpdateVisibleIndexes = false;\n _this.conditionNotifyElementsOnAnyValueOrVariableChanged = false;\n _this.isEndLoadingFromJson = null;\n _this.questionHashes = {\n names: {},\n namesInsensitive: {},\n valueNames: {},\n valueNamesInsensitive: {},\n };\n _this.timerFunc = null;\n /**\n * Returns the time in seconds an end user spends on the survey\n * @see startTimer\n * @see PageModel.timeSpent\n */\n _this.timeSpent = 0;\n if (typeof document !== \"undefined\") {\n SurveyModel.stylesManager = new _stylesmanager__WEBPACK_IMPORTED_MODULE_12__[\"StylesManager\"]();\n }\n _this.createLocalizableString(\"title\", _this, true);\n _this.createLocalizableString(\"description\", _this, true);\n _this.createLocalizableString(\"logo\", _this, false);\n _this.createLocalizableString(\"completedHtml\", _this);\n _this.createLocalizableString(\"completedBeforeHtml\", _this);\n _this.createLocalizableString(\"loadingHtml\", _this);\n _this.createLocalizableString(\"startSurveyText\", _this);\n _this.createLocalizableString(\"pagePrevText\", _this);\n _this.createLocalizableString(\"pageNextText\", _this);\n _this.createLocalizableString(\"completeText\", _this);\n _this.createLocalizableString(\"previewText\", _this);\n _this.createLocalizableString(\"editText\", _this);\n _this.createLocalizableString(\"questionTitleTemplate\", _this, true);\n _this.textPreProcessor = new _textPreProcessor__WEBPACK_IMPORTED_MODULE_6__[\"TextPreProcessor\"]();\n _this.textPreProcessor.onProcess = function (textValue) {\n _this.getProcessedTextValue(textValue);\n };\n _this.createNewArray(\"pages\", function (value) {\n _this.doOnPageAdded(value);\n }, function (value) {\n _this.doOnPageRemoved(value);\n });\n _this.createNewArray(\"triggers\", function (value) {\n value.setOwner(_this);\n });\n _this.createNewArray(\"calculatedValues\", function (value) {\n value.setOwner(_this);\n });\n _this.createNewArray(\"completedHtmlOnCondition\", function (value) {\n value.locOwner = _this;\n });\n _this.createNewArray(\"navigateToUrlOnCondition\", function (value) {\n value.locOwner = _this;\n });\n _this.registerFunctionOnPropertyValueChanged(\"firstPageIsStarted\", function () {\n _this.onFirstPageIsStartedChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"mode\", function () {\n _this.onModeChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"progressBarType\", function () {\n _this.updateProgressText();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"questionStartIndex\", \"requiredText\", \"questionTitlePattern\"], function () {\n _this.resetVisibleIndexes();\n });\n _this.onGetQuestionNo.onCallbacksChanged = function () {\n _this.resetVisibleIndexes();\n };\n _this.onProgressText.onCallbacksChanged = function () {\n _this.updateProgressText();\n };\n _this.onTextMarkdown.onCallbacksChanged = function () {\n _this.locStrsChanged();\n };\n _this.onGetQuestionTitle.onCallbacksChanged = function () {\n _this.locStrsChanged();\n };\n _this.onBeforeCreating();\n if (jsonObj) {\n if (typeof jsonObj === \"string\" || jsonObj instanceof String) {\n jsonObj = JSON.parse(jsonObj);\n }\n if (jsonObj && jsonObj.clientId) {\n _this.clientId = jsonObj.clientId;\n }\n _this.fromJSON(jsonObj);\n if (_this.surveyId) {\n _this.loadSurveyFromService(_this.surveyId, _this.clientId);\n }\n }\n _this.onCreating();\n return _this;\n }\n Object.defineProperty(SurveyModel.prototype, \"platformName\", {\n get: function () {\n return SurveyModel.platform;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"commentPrefix\", {\n /**\n * You can display an additional field (comment field) for the most of questions; users can enter additional comments to their response.\n * The comment field input is saved as `'question name' + 'commentPrefix'`.\n * @see data\n * @see Question.hasComment\n */\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].commentPrefix;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].commentPrefix = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"currentPageValue\", {\n get: function () {\n return this.getPropertyValue(\"currentPageValue\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"currentPageValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getType = function () {\n return \"survey\";\n };\n SurveyModel.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n if (name === \"questionsOnPageMode\") {\n this.onQuestionsOnPageModeChanged(oldValue);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"pages\", {\n /**\n * Returns a list of all pages in the survey, including invisible pages.\n * @see PageModel\n * @see visiblePages\n */\n get: function () {\n return this.getPropertyValue(\"pages\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getCss = function () {\n return this.css;\n };\n Object.defineProperty(SurveyModel.prototype, \"css\", {\n get: function () {\n if (!this.cssValue) {\n this.cssValue = {};\n this.copyCssClasses(this.cssValue, _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_4__[\"surveyCss\"].getCss());\n }\n return this.cssValue;\n },\n set: function (value) {\n this.updateElementCss(false);\n this.mergeValues(value, this.css);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationComplete\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.complete);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationPreview\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.preview);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationEdit\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.edit);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationPrev\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.prev);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationStart\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.start);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationNext\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.next);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedCss\", {\n get: function () {\n var css = this.css;\n return css.body + \" \" + css.completedPage;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getNavigationCss = function (main, btn) {\n var res = \"\";\n if (main)\n res = main;\n if (btn)\n res += \" \" + btn;\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"lazyRendering\", {\n /**\n * By default all rows are rendered no matters if they are visible or not.\n * Set it true, and survey markup rows will be rendered only if they are visible in viewport.\n * This feature is experimantal and might do not support all the use cases.\n */\n get: function () {\n return this.lazyRenderingValue === true;\n },\n set: function (val) {\n this.lazyRenderingValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLazyRendering\", {\n get: function () {\n return this.lazyRendering || _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].lazyRowsRendering;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateLazyRenderingRowsOnRemovingElements = function () {\n if (!this.isLazyRendering)\n return;\n var page = this.currentPage;\n if (!!page) {\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"scrollElementByChildId\"])(page.id);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"triggers\", {\n /**\n * Gets or sets a list of triggers in the survey.\n * @see SurveyTrigger\n */\n get: function () {\n return this.getPropertyValue(\"triggers\");\n },\n set: function (val) {\n this.setPropertyValue(\"triggers\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"calculatedValues\", {\n /**\n * Gets or sets a list of calculated values in the survey.\n * @see CalculatedValue\n */\n get: function () {\n return this.getPropertyValue(\"calculatedValues\");\n },\n set: function (val) {\n this.setPropertyValue(\"calculatedValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyId\", {\n /**\n * Gets or sets an identifier of a survey model loaded from the [api.surveyjs.io](https://api.surveyjs.io) service. When specified, the survey JSON is automatically loaded from [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see loadSurveyFromService\n * @see onLoadedSurveyFromService\n */\n get: function () {\n return this.getPropertyValue(\"surveyId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"surveyId\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyPostId\", {\n /**\n * Gets or sets an identifier of a survey model saved to the [api.surveyjs.io](https://api.surveyjs.io) service. When specified, the survey data is automatically saved to the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see onComplete\n * @see surveyShowDataSaving\n */\n get: function () {\n return this.getPropertyValue(\"surveyPostId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"surveyPostId\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"clientId\", {\n /**\n * Gets or sets user's identifier (e.g., e-mail or unique customer id) in your web application.\n * If you load survey or post survey results from/to [api.surveyjs.io](https://api.surveyjs.io) service, then the library do not allow users to run the same survey the second time.\n * On the second run, the user will see the survey complete page.\n */\n get: function () {\n return this.getPropertyValue(\"clientId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"clientId\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cookieName\", {\n /**\n * Gets or sets a cookie name used to save information about completing the survey.\n * If the property is not empty, before starting the survey, the Survey library checks if the cookie with this name exists.\n * If it is `true`, the survey goes to complete mode and a user sees the survey complete page. On completing the survey the cookie with this name is created.\n */\n get: function () {\n return this.getPropertyValue(\"cookieName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"cookieName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"sendResultOnPageNext\", {\n /**\n * Gets or sets whether to save survey results on completing every page. If the property value is set to `true`, the `onPartialSend` event is fired.\n * @see onPartialSend\n * @see clientId\n */\n get: function () {\n return this.getPropertyValue(\"sendResultOnPageNext\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"sendResultOnPageNext\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyShowDataSaving\", {\n /**\n * Gets or sets whether to show the progress on saving/sending data into the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see surveyPostId\n */\n get: function () {\n return this.getPropertyValue(\"surveyShowDataSaving\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"surveyShowDataSaving\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"focusFirstQuestionAutomatic\", {\n /**\n * Gets or sets whether the first input is focused on showing a next or a previous page.\n */\n get: function () {\n return this.getPropertyValue(\"focusFirstQuestionAutomatic\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"focusFirstQuestionAutomatic\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"focusOnFirstError\", {\n /**\n * Gets or sets whether the first input is focused if the current page has errors.\n * Set this property to `false` (the default value is `true`) if you do not want to bring the focus to the first question that has error on the page.\n */\n get: function () {\n return this.getPropertyValue(\"focusOnFirstError\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"focusOnFirstError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showNavigationButtons\", {\n /**\n * Gets or sets the navigation buttons position.\n * Possible values: 'bottom' (default), 'top', 'both' and 'none'. Set it to 'none' to hide 'Prev', 'Next' and 'Complete' buttons.\n * It makes sense if you are going to create a custom navigation, have only a single page, or the `goNextPageAutomatic` property is set to `true`.\n * @see goNextPageAutomatic\n * @see showPrevButton\n */\n get: function () {\n return this.getPropertyValue(\"showNavigationButtons\");\n },\n set: function (val) {\n if (val === true || val === undefined) {\n val = \"bottom\";\n }\n if (val === false) {\n val = \"none\";\n }\n this.setPropertyValue(\"showNavigationButtons\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showPrevButton\", {\n /**\n * Gets or sets whether the Survey displays \"Prev\" button in its pages. Set it to `false` to prevent end-users from going back to their answers.\n * @see showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"showPrevButton\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showPrevButton\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showTitle\", {\n /**\n * Gets or sets whether the Survey displays survey title in its pages. Set it to `false` to hide a survey title.\n * @see title\n */\n get: function () {\n return this.getPropertyValue(\"showTitle\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showPageTitles\", {\n /**\n * Gets or sets whether the Survey displays page titles. Set it to `false` to hide page titles.\n * @see PageModel.title\n */\n get: function () {\n return this.getPropertyValue(\"showPageTitles\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showPageTitles\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showCompletedPage\", {\n /**\n * On finishing the survey the complete page is shown. Set the property to `false`, to hide the complete page.\n * @see data\n * @see onComplete\n * @see navigateToUrl\n */\n get: function () {\n return this.getPropertyValue(\"showCompletedPage\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showCompletedPage\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"navigateToUrl\", {\n /**\n * Set this property to a url you want to navigate after a user completing the survey.\n * By default it uses after calling onComplete event. In case calling options.showDataSaving callback in onComplete event, navigateToUrl will be used on calling options.showDataSavingSuccess callback.\n */\n get: function () {\n return this.getPropertyValue(\"navigateToUrl\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigateToUrl\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"navigateToUrlOnCondition\", {\n /**\n * Gets or sets a list of URL condition items. If the expression of this item returns `true`, then survey will navigate to the item URL.\n * @see UrlConditionItem\n * @see navigateToUrl\n */\n get: function () {\n return this.getPropertyValue(\"navigateToUrlOnCondition\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigateToUrlOnCondition\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getNavigateToUrl = function () {\n var item = this.getExpressionItemOnRunCondition(this.navigateToUrlOnCondition);\n var url = !!item ? item.url : this.navigateToUrl;\n if (!!url) {\n url = this.processText(url, true);\n }\n return url;\n };\n SurveyModel.prototype.navigateTo = function () {\n var url = this.getNavigateToUrl();\n var options = { url: url };\n this.onNavigateToUrl.fire(this, options);\n if (!options.url || typeof window === \"undefined\" || !window.location)\n return;\n window.location.href = options.url;\n };\n Object.defineProperty(SurveyModel.prototype, \"requiredText\", {\n /**\n * Gets or sets the required question mark. The required question mark is a char or string that is rendered in the required questions' titles.\n * @see Question.title\n */\n get: function () {\n return this.getPropertyValue(\"requiredText\", \"*\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredText\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.beforeSettingQuestionErrors = function (question, errors) {\n this.maakeRequiredErrorsInvisibgle(errors);\n this.onSettingQuestionErrors.fire(this, {\n question: question,\n errors: errors,\n });\n };\n SurveyModel.prototype.beforeSettingPanelErrors = function (question, errors) {\n this.maakeRequiredErrorsInvisibgle(errors);\n };\n SurveyModel.prototype.maakeRequiredErrorsInvisibgle = function (errors) {\n if (!this.hideRequiredErrors)\n return;\n for (var i = 0; i < errors.length; i++) {\n var erType = errors[i].getErrorType();\n if (erType == \"required\" || erType == \"requireoneanswer\") {\n errors[i].visible = false;\n }\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"questionStartIndex\", {\n /**\n * Gets or sets the first question index. The first question index is '1' by default. You may start it from '100' or from 'A', by setting '100' or 'A' to this property.\n * You can set the start index to \"(1)\" or \"# A)\" or \"a)\" to render question number as (1), # A) and a) accordingly.\n * @see Question.title\n * @see requiredText\n */\n get: function () {\n return this.getPropertyValue(\"questionStartIndex\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionStartIndex\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"storeOthersAsComment\", {\n /**\n * Gets or sets whether the \"Others\" option text is stored as question comment.\n *\n * By default the entered text in the \"Others\" input in the checkbox/radiogroup/dropdown is stored as `\"question name \" + \"-Comment\"`. The value itself is `\"question name\": \"others\"`.\n * Set this property to `false`, to store the entered text directly in the `\"question name\"` key.\n * @see commentPrefix\n */\n get: function () {\n return this.getPropertyValue(\"storeOthersAsComment\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"storeOthersAsComment\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxTextLength\", {\n /**\n * Specifies the default maximum length for questions like text and comment, including matrix cell questions.\n *\n * The default value is `0`, that means that the text and comment have the same max length as the standard HTML input - 524288 characters: https://www.w3schools.com/tags/att_input_maxlength.asp.\n * @see maxOthersLength\n */\n get: function () {\n return this.getPropertyValue(\"maxTextLength\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTextLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxOthersLength\", {\n /**\n * Gets or sets the default maximum length for question comments and others\n *\n * The default value is `0`, that means that the question comments have the same max length as the standard HTML input - 524288 characters: https://www.w3schools.com/tags/att_input_maxlength.asp.\n * @see Question.hasComment\n * @see Question.hasOther\n * @see maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxOthersLength\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxOthersLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"goNextPageAutomatic\", {\n /**\n * Gets or ses whether a user can navigate the next page automatically after answering all the questions on a page without pressing the \"Next\" button.\n * The available options:\n *\n * - `true` - navigate the next page and submit survey data automatically.\n * - `autogonext` - navigate the next page automatically but do not submit survey data.\n * - `false` - do not navigate the next page and do not submit survey data automatically.\n * @see showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"goNextPageAutomatic\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"goNextPageAutomatic\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"allowCompleteSurveyAutomatic\", {\n /**\n * Gets or sets whether a survey is automatically completed when `goNextPageAutomatic = true`. Set it to `false` if you do not want to submit survey automatically on completing the last survey page.\n * @see goNextPageAutomatic\n */\n get: function () {\n return this.getPropertyValue(\"allowCompleteSurveyAutomatic\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowCompleteSurveyAutomatic\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"checkErrorsMode\", {\n /**\n * Gets or sets a value that specifies how the survey validates the question answers.\n *\n * The following options are available:\n *\n * - `onNextPage` (default) - check errors on navigating to the next page or on completing the survey.\n * - `onValueChanged` - check errors on every question value (i.e., answer) changing.\n * - `onValueChanging` - check errors before setting value into survey. If there is an error, then survey data is not changed, but question value will be keeped.\n * - `onComplete` - to validate all visible questions on complete button click. If there are errors on previous pages, then the page with the first error becomes the current.\n */\n get: function () {\n return this.getPropertyValue(\"checkErrorsMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"checkErrorsMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"textUpdateMode\", {\n /**\n * Gets or sets a value that specifies how the survey updates its questions' text values.\n *\n * The following options are available:\n *\n * - `onBlur` (default) - the value is updated after an input loses the focus.\n * - `onTyping` - update the value of text questions, \"text\" and \"comment\", on every key press.\n *\n * Note, that setting to \"onTyping\" may lead to a performance degradation, in case you have many expressions in the survey.\n */\n get: function () {\n return this.getPropertyValue(\"textUpdateMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"textUpdateMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"clearInvisibleValues\", {\n /**\n * Gets or sets a value that specifies how the invisible data is included in survey data.\n *\n * The following options are available:\n *\n * - `none` - include the invisible values into the survey data.\n * - `onHidden` - clear the question value when it becomes invisible. If a question has value and it was invisible initially then survey clears the value on completing.\n * - `onHiddenContainer` - clear the question value when it or its parent (page or panel) becomes invisible. If a question has value and it was invisible initially then survey clears the value on completing.\n * - `onComplete` (default) - clear invisible question values on survey complete. In this case, the invisible questions will not be stored on the server.\n * @see Question.visible\n * @see onComplete\n */\n get: function () {\n return this.getPropertyValue(\"clearInvisibleValues\");\n },\n set: function (val) {\n if (val === true)\n val = \"onComplete\";\n if (val === false)\n val = \"none\";\n this.setPropertyValue(\"clearInvisibleValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Call this function to remove all question values from the survey, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radiogroup/dropdown/checkbox choices or matrix rows/columns.\n * Please note, this function doesn't clear values for invisible questions or values that doesn't associated with questions.\n * In fact this function just call clearIncorrectValues function of all questions in the survey\n * @param removeNonExisingRootKeys - set this parameter to true to remove keys from survey.data that doesn't have corresponded questions and calculated values\n * @see Question.clearIncorrectValues\n * @see Page.clearIncorrectValues\n * @see Panel.clearIncorrectValues\n */\n SurveyModel.prototype.clearIncorrectValues = function (removeNonExisingRootKeys) {\n if (removeNonExisingRootKeys === void 0) { removeNonExisingRootKeys = false; }\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].clearIncorrectValues();\n }\n if (!removeNonExisingRootKeys)\n return;\n var data = this.data;\n var hasChanges = false;\n for (var key in data) {\n if (!!this.getQuestionByValueName(key))\n continue;\n if (this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].commentPrefix) ||\n this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].matrixTotalValuePostFix))\n continue;\n var calcValue = this.getCalculatedValueByName(key);\n if (!!calcValue && calcValue.includeIntoResult)\n continue;\n hasChanges = true;\n delete data[key];\n }\n if (hasChanges) {\n this.data = data;\n }\n };\n SurveyModel.prototype.iscorrectValueWithPostPrefix = function (key, postPrefix) {\n if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n return false;\n return !!this.getQuestionByValueName(key.substr(0, key.indexOf(postPrefix)));\n };\n Object.defineProperty(SurveyModel.prototype, \"locale\", {\n /**\n * Gets or sets the survey locale. The default value it is empty, this means the 'en' locale is used.\n * You can set it to 'de' - German, 'fr' - French and so on. The library has built-in localization for several languages. The library has a multi-language support as well.\n */\n get: function () {\n return this.localeValue;\n },\n set: function (value) {\n _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].currentLocale = value;\n this.localeValue = _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].currentLocale;\n this.setPropertyValue(\"locale\", this.localeValue);\n if (this.isLoadingFromJson)\n return;\n this.locStrsChanged();\n this.localeChanged();\n this.onLocaleChangedEvent.fire(this, value);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns an array of locales that are used in the survey's translation.\n */\n SurveyModel.prototype.getUsedLocales = function () {\n var locs = new Array();\n this.addUsedLocales(locs);\n //Replace the default locale with the real one\n var index = locs.indexOf(\"default\");\n if (index > -1) {\n var defaultLoc = _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].defaultLocale;\n //Remove the defaultLoc\n var defIndex = locs.indexOf(defaultLoc);\n if (defIndex > -1) {\n locs.splice(defIndex, 1);\n }\n index = locs.indexOf(\"default\");\n locs[index] = defaultLoc;\n }\n return locs;\n };\n SurveyModel.prototype.localeChanged = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].localeChanged();\n }\n };\n //ILocalizableOwner\n SurveyModel.prototype.getLocale = function () {\n return this.locale;\n };\n SurveyModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n //Do not set current page if it is not set yet.\n //At first we do not need this, at second it creates issues with Vue CLI projects\n //More information here: https://github.com/surveyjs/survey-library/issues/2599\n if (!this.currentPageValue)\n return;\n this.updateProgressText();\n var page = this.activePage;\n if (!!page) {\n page.locStrsChanged();\n }\n };\n SurveyModel.prototype.getMarkdownHtml = function (text, name) {\n return this.getSurveyMarkdownHtml(this, text, name);\n };\n SurveyModel.prototype.getRenderer = function (name) {\n return this.getRendererForString(this, name);\n };\n SurveyModel.prototype.getRendererForString = function (element, name) {\n var renderAs = this.getBuiltInRendererForString(element, name);\n var options = { element: element, name: name, renderAs: renderAs };\n this.onTextRenderAs.fire(this, options);\n return options.renderAs;\n };\n SurveyModel.prototype.getExpressionDisplayValue = function (question, value, displayValue) {\n var options = {\n question: question,\n value: value,\n displayValue: displayValue,\n };\n this.onGetExpressionDisplayValue.fire(this, options);\n return options.displayValue;\n };\n SurveyModel.prototype.getBuiltInRendererForString = function (element, name) {\n if (this.isDesignMode)\n return _localizablestring__WEBPACK_IMPORTED_MODULE_11__[\"LocalizableString\"].editableRenderer;\n return undefined;\n };\n SurveyModel.prototype.getProcessedText = function (text) {\n return this.processText(text, true);\n };\n SurveyModel.prototype.getLocString = function (str) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].getString(str);\n };\n //ISurveyErrorOwner\n SurveyModel.prototype.getErrorCustomText = function (text, error) {\n var options = {\n text: text,\n name: error.getErrorType(),\n error: error,\n };\n this.onErrorCustomText.fire(this, options);\n return options.text;\n };\n Object.defineProperty(SurveyModel.prototype, \"emptySurveyText\", {\n /**\n * Returns the text that is displayed when there are no any visible pages and questiona.\n */\n get: function () {\n return this.getLocString(\"emptySurvey\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"title\", {\n //#region Title/Header options\n /**\n * Gets or sets a survey title.\n * @see description\n */\n get: function () {\n return this.getLocalizableStringText(\"title\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"title\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"description\", {\n /**\n * Gets or sets a survey description. The survey description is displayed under a survey title.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"description\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"description\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logo\", {\n /**\n * Gets or sets a survey logo.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"logo\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"logo\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLogo\", {\n get: function () {\n return this.getLocalizableString(\"logo\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoWidth\", {\n /**\n * Gets or sets a survey logo width.\n * @see logo\n */\n get: function () {\n var width = this.getPropertyValue(\"logoWidth\");\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"getSize\"])(width);\n },\n set: function (value) {\n this.setPropertyValue(\"logoWidth\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoHeight\", {\n /**\n * Gets or sets a survey logo height.\n * @see logo\n */\n get: function () {\n var height = this.getPropertyValue(\"logoHeight\");\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"getSize\"])(height);\n },\n set: function (value) {\n this.setPropertyValue(\"logoHeight\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoPosition\", {\n /**\n * Gets or sets a survey logo position.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoPosition\");\n },\n set: function (value) {\n this.setPropertyValue(\"logoPosition\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasLogo\", {\n get: function () {\n return !!this.logo && this.logoPosition !== \"none\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoBefore\", {\n get: function () {\n if (this.isDesignMode)\n return false;\n return (this.renderedHasLogo &&\n (this.logoPosition === \"left\" || this.logoPosition === \"top\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoAfter\", {\n get: function () {\n if (this.isDesignMode)\n return this.renderedHasLogo;\n return (this.renderedHasLogo &&\n (this.logoPosition === \"right\" || this.logoPosition === \"bottom\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoClassNames\", {\n get: function () {\n var logoClasses = {\n left: \"sv-logo--left\",\n right: \"sv-logo--right\",\n top: \"sv-logo--top\",\n bottom: \"sv-logo--bottom\",\n };\n return this.css.logo + \" \" + logoClasses[this.logoPosition];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasTitle\", {\n get: function () {\n if (this.isDesignMode)\n return this.isPropertyVisible(\"title\");\n return !this.locTitle.isEmpty && this.showTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasLogo\", {\n get: function () {\n if (this.isDesignMode)\n return this.isPropertyVisible(\"logo\");\n return this.hasLogo;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasHeader\", {\n get: function () {\n return this.renderedHasTitle || this.renderedHasLogo;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoFit\", {\n /**\n * The logo fit mode.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"logoFit\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setIsMobile = function (newVal) {\n if (newVal === void 0) { newVal = true; }\n this._isMobile = newVal;\n };\n Object.defineProperty(SurveyModel.prototype, \"isMobile\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_16__[\"isMobile\"])() || this._isMobile;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"titleMaxWidth\", {\n get: function () {\n if (!this.isMobile &&\n !this.isValueEmpty(this.logo) &&\n !_settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].supportCreatorV2) {\n var logoWidth = this.logoWidth;\n if (this.logoPosition === \"left\" || this.logoPosition === \"right\") {\n return \"calc(100% - 5px - 2em - \" + logoWidth + \")\";\n }\n }\n return \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedHtml\", {\n /**\n * Gets or sets the HTML content displayed on the complete page. Use this property to change the default complete page text.\n * @see showCompletedPage\n * @see completedHtmlOnCondition\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completedHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"completedHtml\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedHtml\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedHtmlOnCondition\", {\n /**\n * The list of HTML condition items. If the expression of this item returns `true`, then a survey will use this item HTML instead of `completedHtml`.\n * @see HtmlConditionItem\n * @see completeHtml\n */\n get: function () {\n return this.getPropertyValue(\"completedHtmlOnCondition\");\n },\n set: function (val) {\n this.setPropertyValue(\"completedHtmlOnCondition\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Calculates a given expression and returns a result value.\n * @param expression\n */\n SurveyModel.prototype.runExpression = function (expression) {\n if (!expression)\n return null;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n return new _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ExpressionRunner\"](expression).run(values, properties);\n };\n /**\n * Calculates a given expression and returns `true` or `false`.\n * @param expression\n */\n SurveyModel.prototype.runCondition = function (expression) {\n if (!expression)\n return false;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n return new _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ConditionRunner\"](expression).run(values, properties);\n };\n /**\n * Run all triggers that performs on value changed and not on moving to the next page.\n */\n SurveyModel.prototype.runTriggers = function () {\n this.checkTriggers(this.getFilteredValues(), false);\n };\n Object.defineProperty(SurveyModel.prototype, \"renderedCompletedHtml\", {\n get: function () {\n var item = this.getExpressionItemOnRunCondition(this.completedHtmlOnCondition);\n return !!item ? item.html : this.completedHtml;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getExpressionItemOnRunCondition = function (items) {\n if (items.length == 0)\n return null;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n for (var i = 0; i < items.length; i++) {\n if (items[i].runCondition(values, properties)) {\n return items[i];\n }\n }\n return null;\n };\n Object.defineProperty(SurveyModel.prototype, \"completedBeforeHtml\", {\n /**\n * The HTML content displayed to an end user that has already completed the survey.\n * @see clientId\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completedBeforeHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"completedBeforeHtml\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedBeforeHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedBeforeHtml\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"loadingHtml\", {\n /**\n * The HTML that shows on loading survey Json from the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see surveyId\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"loadingHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"loadingHtml\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLoadingHtml\", {\n get: function () {\n return this.getLocalizableString(\"loadingHtml\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"startSurveyText\", {\n /**\n * Gets or sets the 'Start' button caption.\n * The 'Start' button is shown on the started page. Set the `firstPageIsStarted` property to `true`, to display the started page.\n * @see firstPageIsStarted\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"startSurveyText\", this.getLocString(\"startSurveyText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"startSurveyText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locStartSurveyText\", {\n get: function () {\n return this.getLocalizableString(\"startSurveyText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pagePrevText\", {\n /**\n * Gets or sets the 'Prev' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"pagePrevText\", this.getLocString(\"pagePrevText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"pagePrevText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPagePrevText\", {\n get: function () {\n return this.getLocalizableString(\"pagePrevText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pageNextText\", {\n /**\n * Gets or sets the 'Next' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"pageNextText\", this.getLocString(\"pageNextText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"pageNextText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPageNextText\", {\n get: function () {\n return this.getLocalizableString(\"pageNextText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completeText\", {\n /**\n * Gets or sets the 'Complete' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completeText\", this.getLocString(\"completeText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"completeText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompleteText\", {\n get: function () {\n return this.getLocalizableString(\"completeText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"previewText\", {\n /**\n * Gets or sets the 'Preview' button caption.\n * @see locale\n * @see showPreviewBeforeComplete\n * @see editText\n * @see showPreview\n */\n get: function () {\n return this.getLocalizableStringText(\"previewText\", this.getLocString(\"previewText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"previewText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPreviewText\", {\n get: function () {\n return this.getLocalizableString(\"previewText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"editText\", {\n /**\n * Gets or sets the 'Edit' button caption.\n * @see locale\n * @see showPreviewBeforeComplete\n * @see previewText\n * @see cancelPreview\n */\n get: function () {\n return this.getLocalizableStringText(\"editText\", this.getLocString(\"editText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"editText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locEditText\", {\n get: function () {\n return this.getLocalizableString(\"editText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionTitlePattern\", {\n /**\n * Set the pattern for question title. Default is \"numTitleRequire\", 1. What is your name? *,\n * You can set it to numRequireTitle: 1. * What is your name?\n * You can set it to requireNumTitle: * 1. What is your name?\n * You can set it to numTitle (remove require symbol completely): 1. What is your name?\n * @see QuestionModel.title\n */\n get: function () {\n return this.getPropertyValue(\"questionTitlePattern\", \"numTitleRequire\");\n },\n set: function (val) {\n if (val !== \"numRequireTitle\" &&\n val !== \"requireNumTitle\" &&\n val != \"numTitle\") {\n val = \"numTitleRequire\";\n }\n this.setPropertyValue(\"questionTitlePattern\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getQuestionTitlePatternOptions = function () {\n var res = new Array();\n var title = this.getLocString(\"questionTitlePatternText\");\n var num = !!this.questionStartIndex ? this.questionStartIndex : \"1.\";\n res.push({\n value: \"numTitleRequire\",\n text: num + \" \" + title + \" \" + this.requiredText,\n });\n res.push({\n value: \"numRequireTitle\",\n text: num + \" \" + this.requiredText + \" \" + title,\n });\n res.push({\n value: \"requireNumTitle\",\n text: this.requiredText + \" \" + num + \" \" + title,\n });\n res.push({\n value: \"numTitle\",\n text: num + \" \" + title,\n });\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"questionTitleTemplate\", {\n /**\n * Gets or sets a question title template. Obsolete, please use questionTitlePattern\n * @see QuestionModel.title\n * @see questionTitlePattern\n */\n get: function () {\n return this.getLocalizableStringText(\"questionTitleTemplate\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"questionTitleTemplate\", value);\n this.questionTitlePattern = this.getNewTitlePattern(value);\n this.questionStartIndex = this.getNewQuestionTitleElement(value, \"no\", this.questionStartIndex, \"1\");\n this.requiredText = this.getNewQuestionTitleElement(value, \"require\", this.requiredText, \"*\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getNewTitlePattern = function (template) {\n if (!!template) {\n var strs = [];\n while (template.indexOf(\"{\") > -1) {\n template = template.substr(template.indexOf(\"{\") + 1);\n var ind = template.indexOf(\"}\");\n if (ind < 0)\n break;\n strs.push(template.substr(0, ind));\n template = template.substr(ind + 1);\n }\n if (strs.length > 1) {\n if (strs[0] == \"require\")\n return \"requireNumTitle\";\n if (strs[1] == \"require\" && strs.length == 3)\n return \"numRequireTitle\";\n if (strs.indexOf(\"require\") < 0)\n return \"numTitle\";\n }\n if (strs.length == 1 && strs[0] == \"title\") {\n return \"numTitle\";\n }\n }\n return \"numTitleRequire\";\n };\n SurveyModel.prototype.getNewQuestionTitleElement = function (template, name, currentValue, defaultValue) {\n name = \"{\" + name + \"}\";\n if (!template || template.indexOf(name) < 0)\n return currentValue;\n var ind = template.indexOf(name);\n var prefix = \"\";\n var postfix = \"\";\n var i = ind - 1;\n for (; i >= 0; i--) {\n if (template[i] == \"}\")\n break;\n }\n if (i < ind - 1) {\n prefix = template.substr(i + 1, ind - i - 1);\n }\n ind += name.length;\n i = ind;\n for (; i < template.length; i++) {\n if (template[i] == \"{\")\n break;\n }\n if (i > ind) {\n postfix = template.substr(ind, i - ind);\n }\n i = 0;\n while (i < prefix.length && prefix.charCodeAt(i) < 33)\n i++;\n prefix = prefix.substr(i);\n i = postfix.length - 1;\n while (i >= 0 && postfix.charCodeAt(i) < 33)\n i--;\n postfix = postfix.substr(0, i + 1);\n if (!prefix && !postfix)\n return currentValue;\n var value = !!currentValue ? currentValue : defaultValue;\n return prefix + value + postfix;\n };\n Object.defineProperty(SurveyModel.prototype, \"locQuestionTitleTemplate\", {\n get: function () {\n return this.getLocalizableString(\"questionTitleTemplate\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getUpdatedQuestionTitle = function (question, title) {\n if (this.onGetQuestionTitle.isEmpty)\n return title;\n var options = { question: question, title: title };\n this.onGetQuestionTitle.fire(this, options);\n return options.title;\n };\n SurveyModel.prototype.getUpdatedQuestionNo = function (question, no) {\n if (this.onGetQuestionNo.isEmpty)\n return no;\n var options = { question: question, no: no };\n this.onGetQuestionNo.fire(this, options);\n return options.no;\n };\n Object.defineProperty(SurveyModel.prototype, \"showPageNumbers\", {\n /**\n * Gets or sets whether the survey displays page numbers on pages titles.\n */\n get: function () {\n return this.getPropertyValue(\"showPageNumbers\", false);\n },\n set: function (value) {\n if (value === this.showPageNumbers)\n return;\n this.setPropertyValue(\"showPageNumbers\", value);\n this.updateVisibleIndexes();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showQuestionNumbers\", {\n /**\n * Gets or sets a value that specifies how the question numbers are displayed.\n *\n * The following options are available:\n *\n * - `on` - display question numbers\n * - `onpage` - display question numbers, start numbering on every page\n * - `off` - turn off the numbering for questions titles\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\");\n },\n set: function (value) {\n value = value.toLowerCase();\n value = value === \"onpage\" ? \"onPage\" : value;\n if (value === this.showQuestionNumbers)\n return;\n this.setPropertyValue(\"showQuestionNumbers\", value);\n this.updateVisibleIndexes();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showProgressBar\", {\n /**\n * Gets or sets the survey progress bar position.\n *\n * The following options are available:\n *\n * - `off` (default) - don't show progress bar\n * - `top` - show progress bar in the top\n * - `bottom` - show progress bar in the bottom\n * - `both` - show progress bar in both sides: top and bottom.\n */\n get: function () {\n return this.getPropertyValue(\"showProgressBar\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"showProgressBar\", newValue.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"progressBarType\", {\n /**\n * Gets or sets the type of info in the progress bar.\n *\n * The following options are available:\n *\n * - `pages` (default),\n * - `questions`,\n * - `requiredQuestions`,\n * - `correctQuestions`,\n * - `buttons`\n */\n get: function () {\n return this.getPropertyValue(\"progressBarType\");\n },\n set: function (newValue) {\n if (newValue === \"correctquestion\")\n newValue = \"correctQuestion\";\n if (newValue === \"requiredquestion\")\n newValue = \"requiredQuestion\";\n this.setPropertyValue(\"progressBarType\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnTop\", {\n get: function () {\n if (!this.canShowProresBar())\n return false;\n return this.showProgressBar === \"top\" || this.showProgressBar === \"both\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnBottom\", {\n get: function () {\n if (!this.canShowProresBar())\n return false;\n return this.showProgressBar === \"bottom\" || this.showProgressBar === \"both\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.canShowProresBar = function () {\n return (!this.isShowingPreview ||\n this.showPreviewBeforeComplete != \"showAllQuestions\");\n };\n Object.defineProperty(SurveyModel.prototype, \"processedTitle\", {\n /**\n * Returns the text/HTML that is rendered as a survey title.\n */\n get: function () {\n return this.locTitle.renderedHtml;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionTitleLocation\", {\n /**\n * Gets or sets the question title location.\n *\n * The following options are available:\n *\n * - `bottom` - show a question title to bottom\n * - `left` - show a question title to left\n * - `top` - show a question title to top.\n *\n * > Some questions, for example matrixes, do not support 'left' value. The title for them will be displayed to the top.\n */\n get: function () {\n return this.getPropertyValue(\"questionTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n if (!this.isLoadingFromJson) {\n this.updateElementCss(true);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateElementCss = function (reNew) {\n var pages = this.visiblePages;\n for (var i = 0; i < pages.length; i++) {\n pages[i].updateElementCss(reNew);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"questionErrorLocation\", {\n /**\n * Gets or sets the error message position.\n *\n * The following options are available:\n *\n * - `top` - to show question error(s) over the question,\n * - `bottom` - to show question error(s) under the question.\n */\n get: function () {\n return this.getPropertyValue(\"questionErrorLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionErrorLocation\", value.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionDescriptionLocation\", {\n /**\n * Gets or sets the question description position. The default value is `underTitle`.\n *\n * The following options are available:\n *\n * - `underTitle` - show question description under the question title,\n * - `underInput` - show question description under the question input instead of question title.\n */\n get: function () {\n return this.getPropertyValue(\"questionDescriptionLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionDescriptionLocation\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"mode\", {\n /**\n * Gets or sets the survey edit mode.\n *\n * The following options are available:\n *\n * - `edit` (default) - make a survey editable,\n * - `display` - make a survey read-only.\n */\n get: function () {\n return this.getPropertyValue(\"mode\");\n },\n set: function (value) {\n value = value.toLowerCase();\n if (value == this.mode)\n return;\n if (value != \"edit\" && value != \"display\")\n return;\n this.setPropertyValue(\"mode\", value);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.onModeChanged = function () {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.setPropertyValue(\"isReadOnly\", page.isReadOnly);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"data\", {\n /**\n * Gets or sets an object that stores the survey results/data. You can set it directly as `{ 'question name': questionValue, ... }`\n *\n * > If you set the `data` property after creating the survey, you may need to set the `currentPageNo` to `0`, if you are using `visibleIf` properties for questions/pages/panels to ensure that you are starting from the first page.\n * @see setValue\n * @see getValue\n * @see mergeData\n * @see currentPageNo\n */\n get: function () {\n var result = {};\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var dataValue = this.getDataValueCore(this.valuesHash, key);\n if (dataValue !== undefined) {\n result[key] = dataValue;\n }\n }\n this.setCalcuatedValuesIntoResult(result);\n return result;\n },\n set: function (data) {\n this.valuesHash = {};\n this.setDataCore(data);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Merge the values into survey.data. It works as survey.data, except it doesn't clean the existing data, but overrides them.\n * @param data data to merge. It should be an object {keyValue: Value, ...}\n * @see data\n * @see setValue\n */\n SurveyModel.prototype.mergeData = function (data) {\n if (!data)\n return;\n this.setDataCore(data);\n };\n SurveyModel.prototype.setDataCore = function (data) {\n if (data) {\n for (var key in data) {\n this.setDataValueCore(this.valuesHash, key, data[key]);\n }\n }\n this.updateAllQuestionsValue();\n this.notifyAllQuestionsOnValueChanged();\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n this.runConditions();\n };\n Object.defineProperty(SurveyModel.prototype, \"editingObj\", {\n get: function () {\n return this.editingObjValue;\n },\n set: function (val) {\n var _this = this;\n if (this.editingObj == val)\n return;\n if (!!this.editingObj) {\n this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n }\n this.editingObjValue = val;\n if (this.isDisposed)\n return;\n if (!val) {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].unbindValue();\n }\n }\n if (!!this.editingObj) {\n this.setDataCore({});\n this.onEditingObjPropertyChanged = function (sender, options) {\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].hasOriginalProperty(_this.editingObj, options.name))\n return;\n _this.updateOnSetValue(options.name, options.newValue, options.oldValue);\n };\n this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isEditingSurveyElement\", {\n get: function () {\n return !!this.editingObj;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setCalcuatedValuesIntoResult = function (result) {\n for (var i = 0; i < this.calculatedValues.length; i++) {\n var calValue = this.calculatedValues[i];\n if (calValue.includeIntoResult &&\n !!calValue.name &&\n this.getVariable(calValue.name) !== undefined) {\n result[calValue.name] = this.getVariable(calValue.name);\n }\n }\n };\n SurveyModel.prototype.getAllValues = function () {\n return this.data;\n };\n /**\n * Returns survey result data as an array of plain objects: with question `title`, `name`, `value`, and `displayValue`.\n *\n * For complex questions (like matrix, etc.) `isNode` flag is set to `true` and data contains array of nested objects (rows).\n *\n * Set `options.includeEmpty` to `false` if you want to skip empty answers.\n */\n SurveyModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n var result = [];\n this.getAllQuestions().forEach(function (question) {\n var resultItem = question.getPlainData(options);\n if (!!resultItem) {\n result.push(resultItem);\n }\n });\n return result;\n };\n SurveyModel.prototype.getFilteredValues = function () {\n var values = {};\n for (var key in this.variablesHash)\n values[key] = this.variablesHash[key];\n this.addCalculatedValuesIntoFilteredValues(values);\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n values[key] = this.getDataValueCore(this.valuesHash, key);\n }\n return values;\n };\n SurveyModel.prototype.addCalculatedValuesIntoFilteredValues = function (values) {\n var caclValues = this.calculatedValues;\n for (var i = 0; i < caclValues.length; i++)\n values[caclValues[i].name] = caclValues[i].value;\n };\n SurveyModel.prototype.getFilteredProperties = function () {\n return { survey: this };\n };\n SurveyModel.prototype.getValuesKeys = function () {\n if (!this.editingObj)\n return Object.keys(this.valuesHash);\n var props = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getPropertiesByObj(this.editingObj);\n var res = [];\n for (var i = 0; i < props.length; i++) {\n res.push(props[i].name);\n }\n return res;\n };\n SurveyModel.prototype.getDataValueCore = function (valuesHash, key) {\n if (!!this.editingObj)\n return _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getObjPropertyValue(this.editingObj, key);\n return valuesHash[key];\n };\n SurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n if (!!this.editingObj) {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].setObjPropertyValue(this.editingObj, key, value);\n }\n else {\n valuesHash[key] = value;\n }\n };\n SurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n if (!!this.editingObj) {\n this.editingObj[key] = null;\n }\n else {\n delete valuesHash[key];\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"comments\", {\n /**\n * Returns all comments from the data.\n * @see data\n */\n get: function () {\n var result = {};\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key.indexOf(this.commentPrefix) > 0) {\n result[key] = this.getDataValueCore(this.valuesHash, key);\n }\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"visiblePages\", {\n /**\n * Returns a list of visible pages. If all pages are visible, then this property returns the same list as the `pages` property.\n * @see pages\n * @see PageModel.visible\n * @see PageModel.visibleIf\n */\n get: function () {\n if (this.isDesignMode)\n return this.pages;\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n if (this.pages[i].isVisible) {\n result.push(this.pages[i]);\n }\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isEmpty\", {\n /**\n * Returns `true` if the survey contains no pages. The survey is empty.\n */\n get: function () {\n return this.pages.length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"PageCount\", {\n /**\n * Deprecated. Use the `pageCount` property instead.\n */\n get: function () {\n return this.pageCount;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pageCount\", {\n /**\n * Returns the survey page count.\n * @see visiblePageCount\n * @see pages\n */\n get: function () {\n return this.pages.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"visiblePageCount\", {\n /**\n * Returns a number of visible pages within the survey.\n * @see pageCount\n * @see visiblePages\n */\n get: function () {\n return this.visiblePages.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"startedPage\", {\n /**\n * Returns the started page. This property works if the `firstPageIsStarted` property is set to `true`.\n * @see firstPageIsStarted\n */\n get: function () {\n var page = this.firstPageIsStarted && this.pages.length > 0 ? this.pages[0] : null;\n if (!!page) {\n page.onFirstRendering();\n page.setWasShown(true);\n }\n return page;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"currentPage\", {\n /**\n * Gets or sets the current survey page. If a survey is rendered, then this property returns a page that a user can see/edit.\n */\n get: function () {\n var vPages = this.visiblePages;\n if (this.currentPageValue != null) {\n if (vPages.indexOf(this.currentPageValue) < 0) {\n if (!this.onContainsPageCallback ||\n !this.onContainsPageCallback(this.currentPageValue)) {\n this.currentPage = null;\n }\n }\n }\n if (this.currentPageValue == null && vPages.length > 0) {\n this.currentPage = vPages[0];\n }\n return this.currentPageValue;\n },\n set: function (value) {\n if (this.isLoadingFromJson)\n return;\n var newPage = this.getPageByObject(value);\n if (!!value && !newPage)\n return;\n var vPages = this.visiblePages;\n if (newPage != null && vPages.indexOf(newPage) < 0)\n return;\n if (newPage == this.currentPageValue)\n return;\n var oldValue = this.currentPageValue;\n if (!this.currentPageChanging(newPage, oldValue))\n return;\n this.currentPageValue = newPage;\n if (!!newPage) {\n newPage.onFirstRendering();\n newPage.updateCustomWidgets();\n newPage.setWasShown(true);\n }\n this.locStrsChanged();\n this.currentPageChanged(newPage, oldValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"activePage\", {\n /**\n * Returns the currentPage, unless the started page is showing. In this case returns the started page.\n * @see currentPage\n * @see firstPageIsStarted\n * @see startedPage\n */\n get: function () {\n return this.isStartedState && this.startedPage\n ? this.startedPage\n : this.currentPage;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getPageByObject = function (value) {\n if (!value)\n return null;\n if (value.getType && value.getType() == \"page\")\n return value;\n if (typeof value === \"string\" || value instanceof String)\n return this.getPageByName(String(value));\n if (!isNaN(value)) {\n var index = Number(value);\n var vPages = this.visiblePages;\n if (value < 0 || value >= vPages.length)\n return null;\n return vPages[index];\n }\n return value;\n };\n Object.defineProperty(SurveyModel.prototype, \"currentPageNo\", {\n /**\n * The zero-based index of the current page in the visible pages array.\n */\n get: function () {\n return this.visiblePages.indexOf(this.currentPage);\n },\n set: function (value) {\n var vPages = this.visiblePages;\n if (value < 0 || value >= vPages.length)\n return;\n this.currentPage = vPages[value];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionsOrder\", {\n /**\n * Gets or sets the question display order. Use this property to randomize questions. You can randomize questions on a specific page.\n *\n * The following options are available:\n *\n * - `random` - randomize questions\n * - `initial` - keep questions in the same order, as in a survey model.\n * @see SurveyPage.questionsOrder\n */\n get: function () {\n return this.getPropertyValue(\"questionsOrder\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOrder\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Sets the input focus to the first question with the input field.\n */\n SurveyModel.prototype.focusFirstQuestion = function () {\n if (this.isFocusingQuestion)\n return;\n var page = this.activePage;\n if (page) {\n page.scrollToTop();\n page.focusFirstQuestion();\n }\n };\n SurveyModel.prototype.scrollToTopOnPageChange = function () {\n var page = this.activePage;\n if (!page)\n return;\n page.scrollToTop();\n if (this.focusFirstQuestionAutomatic && !this.isFocusingQuestion) {\n page.focusFirstQuestion();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"state\", {\n /**\n * Returns the current survey state:\n *\n * - `loading` - the survey is being loaded from JSON,\n * - `empty` - there is nothing to display in the current survey,\n * - `starting` - the survey's start page is displayed,\n * - `running` - a respondent is answering survey questions right now,\n * - `preview` - a respondent is previewing answered questions before submitting the survey (see [example](https://surveyjs.io/Examples/Library?id=survey-showpreview)),\n * - `completed` - a respondent has completed the survey and submitted the results.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states)\n */\n get: function () {\n if (this.isLoading)\n return \"loading\";\n if (this.isCompleted)\n return \"completed\";\n if (this.isCompletedBefore)\n return \"completedbefore\";\n if (!this.isDesignMode &&\n this.isEditMode &&\n this.isStartedState &&\n this.startedPage)\n return \"starting\";\n if (this.isShowingPreview)\n return this.currentPage ? \"preview\" : \"empty\";\n return this.currentPage ? \"running\" : \"empty\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompleted\", {\n get: function () {\n return this.getPropertyValue(\"isCompleted\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isCompleted\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowingPreview\", {\n get: function () {\n return this.getPropertyValue(\"isShowingPreview\", false);\n },\n set: function (val) {\n if (this.isShowingPreview == val)\n return;\n this.setPropertyValue(\"isShowingPreview\", val);\n this.onShowingPreviewChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isStartedState\", {\n get: function () {\n return this.getPropertyValue(\"isStartedState\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isStartedState\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompletedBefore\", {\n get: function () {\n return this.getPropertyValue(\"isCompletedBefore\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isCompletedBefore\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLoading\", {\n get: function () {\n return this.getPropertyValue(\"isLoading\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isLoading\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedState\", {\n get: function () {\n return this.completedStateValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedStateText\", {\n get: function () {\n return this.completedStateTextValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setCompletedState = function (value, text) {\n this.completedStateValue = value;\n if (!text) {\n if (value == \"saving\")\n text = this.getLocString(\"savingData\");\n if (value == \"error\")\n text = this.getLocString(\"savingDataError\");\n if (value == \"success\")\n text = this.getLocString(\"savingDataSuccess\");\n }\n this.completedStateTextValue = text;\n };\n /**\n * Clears the survey data and state. If the survey has a `completed` state, it will get a `running` state.\n * @param clearData clear the data\n * @param gotoFirstPage make the first page as a current page.\n * @see data\n * @see state\n * @see currentPage\n */\n SurveyModel.prototype.clear = function (clearData, gotoFirstPage) {\n if (clearData === void 0) { clearData = true; }\n if (gotoFirstPage === void 0) { gotoFirstPage = true; }\n if (clearData) {\n this.data = null;\n this.variablesHash = {};\n }\n this.timeSpent = 0;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].timeSpent = 0;\n this.pages[i].setWasShown(false);\n this.pages[i].passed = false;\n }\n this.isCompleted = false;\n this.isCompletedBefore = false;\n this.isLoading = false;\n this.isStartedState = this.firstPageIsStarted;\n if (gotoFirstPage && this.visiblePageCount > 0) {\n this.currentPage = this.visiblePages[0];\n }\n if (clearData) {\n this.updateValuesWithDefaults();\n }\n };\n SurveyModel.prototype.mergeValues = function (src, dest) {\n if (!dest || !src)\n return;\n if (typeof dest !== \"object\")\n return;\n for (var key in src) {\n var value = src[key];\n if (value && typeof value === \"object\") {\n if (!dest[key])\n dest[key] = {};\n this.mergeValues(value, dest[key]);\n }\n else {\n dest[key] = value;\n }\n }\n };\n SurveyModel.prototype.updateValuesWithDefaults = function () {\n if (this.isDesignMode || this.isLoading)\n return;\n for (var i = 0; i < this.pages.length; i++) {\n var questions = this.pages[i].questions;\n for (var j = 0; j < questions.length; j++) {\n questions[j].updateValueWithDefaults();\n }\n }\n };\n SurveyModel.prototype.updateCustomWidgets = function (page) {\n if (!page)\n return;\n page.updateCustomWidgets();\n };\n SurveyModel.prototype.currentPageChanging = function (newValue, oldValue) {\n var options = {\n oldCurrentPage: oldValue,\n newCurrentPage: newValue,\n allowChanging: true,\n isNextPage: this.isNextPage(newValue, oldValue),\n isPrevPage: this.isPrevPage(newValue, oldValue),\n };\n this.onCurrentPageChanging.fire(this, options);\n return options.allowChanging;\n };\n SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) {\n var isNextPage = this.isNextPage(newValue, oldValue);\n if (isNextPage) {\n oldValue.passed = true;\n }\n this.onCurrentPageChanged.fire(this, {\n oldCurrentPage: oldValue,\n newCurrentPage: newValue,\n isNextPage: isNextPage,\n isPrevPage: this.isPrevPage(newValue, oldValue),\n });\n };\n SurveyModel.prototype.isNextPage = function (newValue, oldValue) {\n if (!newValue || !oldValue)\n return false;\n return newValue.visibleIndex == oldValue.visibleIndex + 1;\n };\n SurveyModel.prototype.isPrevPage = function (newValue, oldValue) {\n if (!newValue || !oldValue)\n return false;\n return newValue.visibleIndex + 1 == oldValue.visibleIndex;\n };\n /**\n * Returns the progress that a user made while going through the survey.\n * It depends from progressBarType property\n * @see progressBarType\n * @see progressValue\n */\n SurveyModel.prototype.getProgress = function () {\n if (this.currentPage == null)\n return 0;\n if (this.progressBarType !== \"pages\") {\n var info = this.getProgressInfo();\n if (this.progressBarType === \"requiredQuestions\") {\n return info.requiredQuestionCount > 1\n ? Math.ceil((info.requiredAnsweredQuestionCount * 100) /\n info.requiredQuestionCount)\n : 100;\n }\n return info.questionCount > 1\n ? Math.ceil((info.answeredQuestionCount * 100) / info.questionCount)\n : 100;\n }\n var index = this.visiblePages.indexOf(this.currentPage) + 1;\n return Math.ceil((index * 100) / this.visiblePageCount);\n };\n Object.defineProperty(SurveyModel.prototype, \"progressValue\", {\n /**\n * Returns the progress that a user made while going through the survey.\n * It depends from progressBarType property\n * @see progressBarType\n */\n get: function () {\n return this.getPropertyValue(\"progressValue\", 0);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowing\", {\n /**\n * Returns the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') position.\n */\n get: function () {\n if (this.isDesignMode)\n return \"none\";\n var page = this.currentPage;\n if (!page)\n return \"none\";\n if (page.navigationButtonsVisibility === \"show\") {\n return \"bottom\";\n }\n if (page.navigationButtonsVisibility === \"hide\") {\n return \"none\";\n }\n return this.showNavigationButtons;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnTop\", {\n /**\n * Returns true if the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') are shows on top.\n */\n get: function () {\n return this.getIsNavigationButtonsShowingOn(\"top\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnBottom\", {\n /**\n * Returns true if the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') are shows on bottom.\n */\n get: function () {\n return this.getIsNavigationButtonsShowingOn(\"bottom\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getIsNavigationButtonsShowingOn = function (buttonPosition) {\n var res = this.isNavigationButtonsShowing;\n return res == \"both\" || res == buttonPosition;\n };\n Object.defineProperty(SurveyModel.prototype, \"isEditMode\", {\n /**\n * Returns `true` if the survey is in edit mode.\n * @see mode\n */\n get: function () {\n return this.mode == \"edit\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompleteButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n (!this.isShowPreviewBeforeComplete || this.state == \"preview\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isPreviewButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n this.isShowPreviewBeforeComplete &&\n this.state == \"running\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCancelPreviewButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n this.isShowPreviewBeforeComplete &&\n this.state == \"preview\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isDisplayMode\", {\n /**\n * Returns `true` if the survey is in display mode or in preview mode.\n * @see mode\n * @see showPreviewBeforeComplete\n */\n get: function () {\n return this.mode == \"display\" || this.state == \"preview\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isUpdateValueTextOnTyping\", {\n get: function () {\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isDesignMode\", {\n /**\n * Returns `true` if the survey is in design mode. It is used by SurveyJS Editor.\n * @see setDesignMode\n */\n get: function () {\n return this._isDesignMode;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Sets the survey into design mode.\n * @param value use true to set the survey into the design mode.\n */\n SurveyModel.prototype.setDesignMode = function (value) {\n this._isDesignMode = value;\n this.onQuestionsOnPageModeChanged(\"standard\");\n };\n Object.defineProperty(SurveyModel.prototype, \"showInvisibleElements\", {\n /**\n * Gets or sets whether to show all elements in the survey, regardless their visibility. The default value is `false`.\n */\n get: function () {\n return this.getPropertyValue(\"showInvisibleElements\", false);\n },\n set: function (val) {\n var visPages = this.visiblePages;\n this.setPropertyValue(\"showInvisibleElements\", val);\n if (this.isLoadingFromJson)\n return;\n this.runConditions();\n this.updateAllElementsVisibility(visPages);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateAllElementsVisibility = function (visPages) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.updateElementVisibility();\n if (visPages.indexOf(page) > -1 != page.isVisible) {\n this.onPageVisibleChanged.fire(this, {\n page: page,\n visible: page.isVisible,\n });\n }\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"areInvisibleElementsShowing\", {\n get: function () {\n return this.isDesignMode || this.showInvisibleElements;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"areEmptyElementsHidden\", {\n get: function () {\n return (this.isShowingPreview &&\n this.showPreviewBeforeComplete == \"showAnsweredQuestions\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasCookie\", {\n /**\n * Returns `true`, if a user has already completed the survey in this browser and there is a cookie about it. Survey goes to `completed` state if the function returns `true`.\n * @see cookieName\n * @see setCookie\n * @see deleteCookie\n * @see state\n */\n get: function () {\n if (!this.cookieName || typeof document === \"undefined\")\n return false;\n var cookies = document.cookie;\n return cookies && cookies.indexOf(this.cookieName + \"=true\") > -1;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Set the cookie with `cookieName` in user's browser. It is done automatically on survey complete if the `cookieName` property value is not empty.\n * @see cookieName\n * @see hasCookie\n * @see deleteCookie\n */\n SurveyModel.prototype.setCookie = function () {\n if (!this.cookieName || typeof document === \"undefined\")\n return;\n document.cookie =\n this.cookieName + \"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT\";\n };\n /**\n * Deletes the cookie with `cookieName` from the browser.\n * @see cookieName\n * @see hasCookie\n * @see setCookie\n */\n SurveyModel.prototype.deleteCookie = function () {\n if (!this.cookieName)\n return;\n document.cookie = this.cookieName + \"=;\";\n };\n /**\n * Navigates user to the next page.\n *\n * Returns `false` in the following cases:\n *\n * - if the current page is the last page.\n * - if the current page contains errors (for example, a required question is empty).\n * @see isCurrentPageHasErrors\n * @see prevPage\n * @see completeLastPage\n */\n SurveyModel.prototype.nextPage = function () {\n if (this.isLastPage)\n return false;\n return this.doCurrentPageComplete(false);\n };\n SurveyModel.prototype.hasErrorsOnNavigate = function (doComplete) {\n var _this = this;\n if (this.ignoreValidation || !this.isEditMode)\n return false;\n var func = function (hasErrors) {\n if (!hasErrors) {\n _this.doCurrentPageCompleteCore(doComplete);\n }\n };\n if (this.checkErrorsMode === \"onComplete\") {\n if (!this.isLastPage)\n return false;\n return this.hasErrors(true, true, func) !== false;\n }\n return this.hasCurrentPageErrors(func) !== false;\n };\n SurveyModel.prototype.checkForAsyncQuestionValidation = function (questions, func) {\n var _this = this;\n this.clearAsyncValidationQuesitons();\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].isRunningValidators) {\n questions[i].onCompletedAsyncValidators = function (hasErrors) {\n _this.onCompletedAsyncQuestionValidators(func, hasErrors);\n };\n this.asyncValidationQuesitons.push(questions[i]);\n }\n }\n return this.asyncValidationQuesitons.length > 0;\n };\n SurveyModel.prototype.clearAsyncValidationQuesitons = function () {\n if (!!this.asyncValidationQuesitons) {\n var asynQuestions = this.asyncValidationQuesitons;\n for (var i = 0; i < asynQuestions.length; i++) {\n asynQuestions[i].onCompletedAsyncValidators = null;\n }\n }\n this.asyncValidationQuesitons = [];\n };\n SurveyModel.prototype.onCompletedAsyncQuestionValidators = function (func, hasErrors) {\n if (hasErrors) {\n this.clearAsyncValidationQuesitons();\n func(true);\n return;\n }\n var asynQuestions = this.asyncValidationQuesitons;\n for (var i = 0; i < asynQuestions.length; i++) {\n if (asynQuestions[i].isRunningValidators)\n return;\n }\n func(false);\n };\n Object.defineProperty(SurveyModel.prototype, \"isCurrentPageHasErrors\", {\n /**\n * Returns `true`, if the current page contains errors, for example, the required question is empty or a question validation is failed.\n * @see nextPage\n */\n get: function () {\n return this.checkIsCurrentPageHasErrors();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns `true`, if the current page contains any error. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasPageErrors\n * @see hasErrors\n * @see currentPage\n */\n SurveyModel.prototype.hasCurrentPageErrors = function (onAsyncValidation) {\n return this.hasPageErrors(undefined, onAsyncValidation);\n };\n /**\n * Returns `true`, if a page contains an error. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use the second `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param page the page that you want to validate. If the parameter is undefined then the `activePage` is using\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasCurrentPageErrors\n * @see hasErrors\n * @see activePage\n * @see currentPage\n */\n SurveyModel.prototype.hasPageErrors = function (page, onAsyncValidation) {\n if (!page) {\n page = this.activePage;\n }\n if (!page)\n return false;\n if (this.checkIsPageHasErrors(page))\n return true;\n if (!onAsyncValidation)\n return false;\n return this.checkForAsyncQuestionValidation(page.questions, function (hasErrors) { return onAsyncValidation(hasErrors); })\n ? undefined\n : false;\n };\n /**\n * Returns `true`, if any of the survey pages contains errors. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use the third `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param fireCallback set it to `true`, to show errors in UI.\n * @param focusOnFirstError set it to `true` to focus on the first question that doesn't pass the validation and make the page, where the question is located, the current.\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasCurrentPageErrors\n * @see hasPageErrors\n */\n SurveyModel.prototype.hasErrors = function (fireCallback, focusOnFirstError, onAsyncValidation) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n if (!!onAsyncValidation) {\n fireCallback = true;\n }\n var visPages = this.visiblePages;\n var firstErrorPage = null;\n var res = false;\n for (var i = 0; i < visPages.length; i++) {\n if (visPages[i].hasErrors(fireCallback, false)) {\n if (!firstErrorPage)\n firstErrorPage = visPages[i];\n res = true;\n }\n }\n if (focusOnFirstError && !!firstErrorPage) {\n this.currentPage = firstErrorPage;\n var questions = firstErrorPage.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].errors.length > 0) {\n questions[i].focus(true);\n break;\n }\n }\n }\n if (res || !onAsyncValidation)\n return res;\n return this.checkForAsyncQuestionValidation(this.getAllQuestions(), function (hasErrors) { return onAsyncValidation(hasErrors); })\n ? undefined\n : false;\n };\n /**\n * Checks whether survey elements (pages, panels, and questions) have unique question names.\n * You can check for unique names for individual page and panel (and all their elements) or a question.\n * If the parameter is not specified, then a survey checks that all its elements have unique names.\n * @param element page, panel or question, it is `null` by default, that means all survey elements will be checked\n */\n SurveyModel.prototype.ensureUniqueNames = function (element) {\n if (element === void 0) { element = null; }\n if (element == null) {\n for (var i = 0; i < this.pages.length; i++) {\n this.ensureUniqueName(this.pages[i]);\n }\n }\n else {\n this.ensureUniqueName(element);\n }\n };\n SurveyModel.prototype.ensureUniqueName = function (element) {\n if (element.isPage) {\n this.ensureUniquePageName(element);\n }\n if (element.isPanel) {\n this.ensureUniquePanelName(element);\n }\n if (element.isPage || element.isPanel) {\n var elements = element.elements;\n for (var i = 0; i < elements.length; i++) {\n this.ensureUniqueNames(elements[i]);\n }\n }\n else {\n this.ensureUniqueQuestionName(element);\n }\n };\n SurveyModel.prototype.ensureUniquePageName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getPageByName(name);\n });\n };\n SurveyModel.prototype.ensureUniquePanelName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getPanelByName(name);\n });\n };\n SurveyModel.prototype.ensureUniqueQuestionName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getQuestionByName(name);\n });\n };\n SurveyModel.prototype.ensureUniqueElementName = function (element, getElementByName) {\n var existingElement = getElementByName(element.name);\n if (!existingElement || existingElement == element)\n return;\n var newName = this.getNewName(element.name);\n while (!!getElementByName(newName)) {\n var newName = this.getNewName(element.name);\n }\n element.name = newName;\n };\n SurveyModel.prototype.getNewName = function (name) {\n var pos = name.length;\n while (pos > 0 && name[pos - 1] >= \"0\" && name[pos - 1] <= \"9\") {\n pos--;\n }\n var base = name.substr(0, pos);\n var num = 0;\n if (pos < name.length) {\n num = parseInt(name.substr(pos));\n }\n num++;\n return base + num;\n };\n SurveyModel.prototype.checkIsCurrentPageHasErrors = function (isFocuseOnFirstError) {\n if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n return this.checkIsPageHasErrors(this.activePage, isFocuseOnFirstError);\n };\n SurveyModel.prototype.checkIsPageHasErrors = function (page, isFocuseOnFirstError) {\n if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n if (isFocuseOnFirstError === undefined) {\n isFocuseOnFirstError = this.focusOnFirstError;\n }\n if (!page)\n return true;\n var res = page.hasErrors(true, isFocuseOnFirstError);\n this.fireValidatedErrorsOnPage(page);\n return res;\n };\n SurveyModel.prototype.fireValidatedErrorsOnPage = function (page) {\n if (this.onValidatedErrorsOnCurrentPage.isEmpty || !page)\n return;\n var questionsOnPage = page.questions;\n var questions = new Array();\n var errors = new Array();\n for (var i = 0; i < questionsOnPage.length; i++) {\n var q = questionsOnPage[i];\n if (q.errors.length > 0) {\n questions.push(q);\n for (var j = 0; j < q.errors.length; j++) {\n errors.push(q.errors[j]);\n }\n }\n }\n this.onValidatedErrorsOnCurrentPage.fire(this, {\n questions: questions,\n errors: errors,\n page: page,\n });\n };\n /**\n * Navigates user to a previous page. If the current page is the first page, `prevPage` returns `false`. `prevPage` does not perform any checks, required questions can be empty.\n * @see isFirstPage\n */\n SurveyModel.prototype.prevPage = function () {\n if (this.isFirstPage)\n return false;\n this.resetNavigationButton();\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage);\n this.currentPage = vPages[index - 1];\n };\n /**\n * Completes the survey, if the current page is the last one. It returns `false` if the last page has errors.\n * If the last page has no errors, `completeLastPage` calls `doComplete` and returns `true`.\n * @see isCurrentPageHasErrors\n * @see nextPage\n * @see doComplete\n */\n SurveyModel.prototype.completeLastPage = function () {\n var res = this.doCurrentPageComplete(true);\n if (res) {\n this.cancelPreview();\n }\n return res;\n };\n SurveyModel.prototype.navigationMouseDown = function () {\n this.isNavigationButtonPressed = true;\n return true;\n };\n SurveyModel.prototype.resetNavigationButton = function () {\n this.isNavigationButtonPressed = false;\n };\n /**\n * Shows preview for the survey. Switches the survey to the \"preview\" state.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * @see showPreviewBeforeComplete\n * @see cancelPreview\n * @see state\n * @see previewText\n * @see editText\n */\n SurveyModel.prototype.showPreview = function () {\n this.resetNavigationButton();\n if (this.hasErrorsOnNavigate(true))\n return false;\n if (this.doServerValidation(true, true))\n return false;\n var options = { allowShowPreview: true };\n this.onShowingPreview.fire(this, options);\n this.isShowingPreview = options.allowShowPreview;\n return true;\n };\n /**\n * Cancels preview and switches back to the \"running\" state.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * @param curPage - A new current page. If the parameter is undefined then the last page becomes the current.\n * @see showPreviewBeforeComplete\n * @see showPreview\n * @see state\n */\n SurveyModel.prototype.cancelPreview = function (curPage) {\n if (curPage === void 0) { curPage = null; }\n if (!this.isShowingPreview)\n return;\n this.isShowingPreview = false;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(curPage) && this.visiblePageCount > 0) {\n curPage = this.visiblePageCount - 1;\n }\n if (curPage !== null) {\n this.currentPage = curPage;\n }\n };\n SurveyModel.prototype.cancelPreviewByPage = function (panel) {\n this.cancelPreview(panel[\"originalPage\"]);\n };\n SurveyModel.prototype.doCurrentPageComplete = function (doComplete) {\n if (this.isValidatingOnServer)\n return false;\n this.resetNavigationButton();\n if (this.hasErrorsOnNavigate(doComplete))\n return false;\n return this.doCurrentPageCompleteCore(doComplete);\n };\n SurveyModel.prototype.doCurrentPageCompleteCore = function (doComplete) {\n if (this.doServerValidation(doComplete))\n return false;\n if (doComplete) {\n this.currentPage.passed = true;\n this.doComplete();\n }\n else {\n this.doNextPage();\n }\n return true;\n };\n Object.defineProperty(SurveyModel.prototype, \"isSinglePage\", {\n /**\n * Obsolete. Use the `questionsOnPageMode` property instead.\n * @see questionsOnPageMode\n */\n get: function () {\n return this.questionsOnPageMode == \"singlePage\";\n },\n set: function (val) {\n this.questionsOnPageMode = val ? \"singlePage\" : \"standard\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionsOnPageMode\", {\n /**\n * Gets or sets a value that specifies how the survey combines questions, panels, and pages.\n *\n * The following options are available:\n *\n * - `singlePage` - combine all survey pages in a single page. Pages will be converted to panels.\n * - `questionPerPage` - show one question per page. Survey will create a separate page for every question.\n */\n get: function () {\n return this.getPropertyValue(\"questionsOnPageMode\", \"standard\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOnPageMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"firstPageIsStarted\", {\n /**\n * Gets or sets whether the first survey page is a start page. Set this property to `true`, to make the first page a starting page.\n * An end user cannot navigate to the start page and the start page does not affect a survey progress.\n */\n get: function () {\n return this.getPropertyValue(\"firstPageIsStarted\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"firstPageIsStarted\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.isPageStarted = function (page) {\n return (this.firstPageIsStarted && this.pages.length > 0 && this.pages[0] === page);\n };\n Object.defineProperty(SurveyModel.prototype, \"showPreviewBeforeComplete\", {\n /**\n * Set this property to \"showAllQuestions\" or \"showAnsweredQuestions\" to allow respondents to preview answers before submitting the survey results.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * Example: [Show Preview Before Complete](https://surveyjs.io/Examples/Library?id=survey-showpreview)\n * @see showPreview\n * @see cancelPreview\n * @see state\n * @see previewText\n * @see editText\n */\n get: function () {\n return this.getPropertyValue(\"showPreviewBeforeComplete\", \"noPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"showPreviewBeforeComplete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowPreviewBeforeComplete\", {\n get: function () {\n var preview = this.showPreviewBeforeComplete;\n return preview == \"showAllQuestions\" || preview == \"showAnsweredQuestions\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.onFirstPageIsStartedChanged = function () {\n if (this.pages.length == 0)\n return;\n this.isStartedState = this.firstPageIsStarted;\n this.pageVisibilityChanged(this.pages[0], !this.firstPageIsStarted);\n };\n SurveyModel.prototype.onShowingPreviewChanged = function () {\n if (this.isDesignMode)\n return;\n if (this.isShowingPreview) {\n this.runningPages = this.pages.slice(0, this.pages.length);\n this.setupPagesForPageModes(true);\n }\n else {\n if (this.runningPages) {\n this.restoreOrigionalPages(this.runningPages);\n }\n this.runningPages = undefined;\n }\n this.runConditions();\n this.updateAllElementsVisibility(this.pages);\n this.updateVisibleIndexes();\n this.currentPageNo = 0;\n };\n SurveyModel.prototype.onQuestionsOnPageModeChanged = function (oldValue) {\n if (this.isShowingPreview)\n return;\n if (this.questionsOnPageMode == \"standard\" || this.isDesignMode) {\n if (this.origionalPages) {\n this.restoreOrigionalPages(this.origionalPages);\n }\n this.origionalPages = undefined;\n }\n else {\n if (!oldValue || oldValue == \"standard\") {\n this.origionalPages = this.pages.slice(0, this.pages.length);\n }\n this.setupPagesForPageModes(this.isSinglePage);\n }\n this.runConditions();\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.restoreOrigionalPages = function (originalPages) {\n this.questionHashesClear();\n this.pages.splice(0, this.pages.length);\n for (var i = 0; i < originalPages.length; i++) {\n this.pages.push(originalPages[i]);\n }\n };\n SurveyModel.prototype.setupPagesForPageModes = function (isSinglePage) {\n this.questionHashesClear();\n var startIndex = this.firstPageIsStarted ? 1 : 0;\n _super.prototype.startLoadingFromJson.call(this);\n var newPages = this.createPagesForQuestionOnPageMode(isSinglePage, startIndex);\n var deletedLen = this.pages.length - startIndex;\n this.pages.splice(startIndex, deletedLen);\n for (var i = 0; i < newPages.length; i++) {\n this.pages.push(newPages[i]);\n }\n _super.prototype.endLoadingFromJson.call(this);\n for (var i = 0; i < newPages.length; i++) {\n newPages[i].endLoadingFromJson();\n newPages[i].setSurveyImpl(this);\n }\n this.doElementsOnLoad();\n };\n SurveyModel.prototype.createPagesForQuestionOnPageMode = function (isSinglePage, startIndex) {\n if (isSinglePage) {\n return [this.createSinglePage(startIndex)];\n }\n return this.createPagesForEveryQuestion(startIndex);\n };\n SurveyModel.prototype.createSinglePage = function (startIndex) {\n var single = this.createNewPage(\"all\");\n single.setSurveyImpl(this);\n for (var i = startIndex; i < this.pages.length; i++) {\n var page = this.pages[i];\n var panel = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n panel.originalPage = page;\n single.addPanel(panel);\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(page);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, panel);\n if (!this.showPageTitles) {\n panel.title = \"\";\n }\n }\n return single;\n };\n SurveyModel.prototype.createPagesForEveryQuestion = function (startIndex) {\n var res = [];\n for (var i = startIndex; i < this.pages.length; i++) {\n var originalPage = this.pages[i];\n // Initialize randomization\n originalPage.setWasShown(true);\n for (var j = 0; j < originalPage.elements.length; j++) {\n var originalElement = originalPage.elements[j];\n var element = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(originalElement.getType());\n if (!element)\n continue;\n var jsonObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n //Deserialize page properties only, excluding elements\n jsonObj.lightSerializing = true;\n var pageJson = jsonObj.toJsonObject(originalPage);\n var page = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(originalPage.getType());\n page.fromJSON(pageJson);\n page.name = \"page\" + (res.length + 1);\n page.setSurveyImpl(this);\n res.push(page);\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(originalElement);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, element);\n page.addElement(element);\n for (var k = 0; k < page.questions.length; k++) {\n this.questionHashesAdded(page.questions[k]);\n }\n }\n }\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"isFirstPage\", {\n /**\n * Gets whether the current page is the first one.\n */\n get: function () {\n if (this.currentPage == null)\n return true;\n return this.visiblePages.indexOf(this.currentPage) == 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowPrevButton\", {\n get: function () {\n if (this.isFirstPage || !this.showPrevButton)\n return false;\n var page = this.visiblePages[this.currentPageNo - 1];\n return this.getPageMaxTimeToFinish(page) <= 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLastPage\", {\n /**\n * Gets whether the current page is the last one.\n */\n get: function () {\n if (this.currentPage == null)\n return true;\n var vPages = this.visiblePages;\n return vPages.indexOf(this.currentPage) == vPages.length - 1;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Completes the survey.\n *\n * Calling this function performs the following tasks:\n *\n * - writes cookie if the `cookieName` property is not empty\n * - sets the survey into `completed` state\n * - fires the `onComplete` event\n * - calls `sendResult` function.\n *\n * Calling the `doComplete` function does not perform any validation, unlike the `completeLastPage` function.\n * It calls `navigateToUrl` after calling `onComplete` event.\n * In case calling `options.showDataSaving` callback in the `onComplete` event, `navigateToUrl` is used on calling `options.showDataSavingSuccess` callback.\n * @see completeLastPage\n * @see cookieName\n * @see state\n * @see onComplete\n * @see surveyPostId\n * @see completeLastPage\n * @see navigateToUrl\n * @see navigateToUrlOnCondition\n */\n SurveyModel.prototype.doComplete = function (isCompleteOnTrigger) {\n if (isCompleteOnTrigger === void 0) { isCompleteOnTrigger = false; }\n var onCompletingOptions = {\n allowComplete: true,\n isCompleteOnTrigger: isCompleteOnTrigger,\n };\n this.onCompleting.fire(this, onCompletingOptions);\n if (!onCompletingOptions.allowComplete)\n return;\n var previousCookie = this.hasCookie;\n this.stopTimer();\n this.setCompleted();\n this.clearUnusedValues();\n this.setCookie();\n var self = this;\n var savingDataStarted = false;\n var onCompleteOptions = {\n isCompleteOnTrigger: isCompleteOnTrigger,\n showDataSaving: function (text) {\n savingDataStarted = true;\n self.setCompletedState(\"saving\", text);\n },\n showDataSavingError: function (text) {\n self.setCompletedState(\"error\", text);\n },\n showDataSavingSuccess: function (text) {\n self.setCompletedState(\"success\", text);\n self.navigateTo();\n },\n showDataSavingClear: function (text) {\n self.setCompletedState(\"\", \"\");\n },\n };\n this.onComplete.fire(this, onCompleteOptions);\n if (!previousCookie && this.surveyPostId) {\n this.sendResult();\n }\n if (!savingDataStarted) {\n this.navigateTo();\n }\n };\n /**\n * Starts the survey. Changes the survey mode from \"starting\" to \"running\". Call this function if your survey has a start page, otherwise this function does nothing.\n * @see firstPageIsStarted\n */\n SurveyModel.prototype.start = function () {\n if (!this.firstPageIsStarted)\n return false;\n if (this.checkIsPageHasErrors(this.startedPage, true))\n return false;\n this.isStartedState = false;\n this.startTimerFromUI();\n this.onStarted.fire(this, {});\n if (!!this.currentPage) {\n this.currentPage.locStrsChanged();\n }\n return true;\n };\n Object.defineProperty(SurveyModel.prototype, \"isValidatingOnServer\", {\n /**\n * Gets whether the question values on the current page are validating on the server at the current moment.\n * @see onServerValidateQuestions\n */\n get: function () {\n return this.getPropertyValue(\"isValidatingOnServer\", false);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setIsValidatingOnServer = function (val) {\n if (val == this.isValidatingOnServer)\n return;\n this.setPropertyValue(\"isValidatingOnServer\", val);\n this.onIsValidatingOnServerChanged();\n };\n SurveyModel.prototype.onIsValidatingOnServerChanged = function () { };\n SurveyModel.prototype.doServerValidation = function (doComplete, isPreview) {\n if (isPreview === void 0) { isPreview = false; }\n if (!this.onServerValidateQuestions ||\n this.onServerValidateQuestions.isEmpty)\n return false;\n if (!doComplete && this.checkErrorsMode === \"onComplete\")\n return false;\n var self = this;\n var options = {\n data: {},\n errors: {},\n survey: this,\n complete: function () {\n self.completeServerValidation(options, isPreview);\n },\n };\n if (doComplete && this.checkErrorsMode === \"onComplete\") {\n options.data = this.data;\n }\n else {\n var questions = this.activePage.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n if (!question.visible)\n continue;\n var value = this.getValue(question.getValueName());\n if (!this.isValueEmpty(value))\n options.data[question.getValueName()] = value;\n }\n }\n this.setIsValidatingOnServer(true);\n if (typeof this.onServerValidateQuestions === \"function\") {\n this.onServerValidateQuestions(this, options);\n }\n else {\n this.onServerValidateQuestions.fire(this, options);\n }\n return true;\n };\n SurveyModel.prototype.completeServerValidation = function (options, isPreview) {\n this.setIsValidatingOnServer(false);\n if (!options && !options.survey)\n return;\n var self = options.survey;\n var hasErrors = false;\n if (options.errors) {\n var hasToFocus = this.focusOnFirstError;\n for (var name in options.errors) {\n var question = self.getQuestionByName(name);\n if (question && question[\"errors\"]) {\n hasErrors = true;\n question.addError(new _error__WEBPACK_IMPORTED_MODULE_10__[\"CustomError\"](options.errors[name], this));\n if (hasToFocus) {\n hasToFocus = false;\n if (!!question.page) {\n this.currentPage = question.page;\n }\n question.focus(true);\n }\n }\n }\n this.fireValidatedErrorsOnPage(this.currentPage);\n }\n if (!hasErrors) {\n if (isPreview) {\n this.isShowingPreview = true;\n }\n else {\n if (self.isLastPage)\n self.doComplete();\n else\n self.doNextPage();\n }\n }\n };\n SurveyModel.prototype.doNextPage = function () {\n var curPage = this.currentPage;\n this.checkOnPageTriggers();\n if (!this.isCompleted) {\n if (this.sendResultOnPageNext) {\n this.sendResult(this.surveyPostId, this.clientId, true);\n }\n if (curPage === this.currentPage) {\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage);\n this.currentPage = vPages[index + 1];\n }\n }\n else {\n this.doComplete(true);\n }\n };\n SurveyModel.prototype.setCompleted = function () {\n this.isCompleted = true;\n };\n Object.defineProperty(SurveyModel.prototype, \"processedCompletedHtml\", {\n /**\n * Returns the HTML content for the complete page.\n * @see completedHtml\n */\n get: function () {\n var html = this.renderedCompletedHtml;\n if (html) {\n return this.processHtml(html);\n }\n return \"

\" + this.getLocString(\"completingSurvey\") + \"

\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"processedCompletedBeforeHtml\", {\n /**\n * Returns the HTML content, that is shown to a user that had completed the survey before.\n * @see completedHtml\n * @see cookieName\n */\n get: function () {\n if (this.completedBeforeHtml) {\n return this.processHtml(this.completedBeforeHtml);\n }\n return \"

\" + this.getLocString(\"completingSurveyBefore\") + \"

\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"processedLoadingHtml\", {\n /**\n * Returns the HTML content, that is shows when a survey loads the survey JSON.\n */\n get: function () {\n if (this.loadingHtml) {\n return this.processHtml(this.loadingHtml);\n }\n return \"

\" + this.getLocString(\"loadingSurvey\") + \"

\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getProgressInfo = function () {\n var pages = this.isDesignMode ? this.pages : this.visiblePages;\n return _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].getProgressInfoByElements(pages, false);\n };\n Object.defineProperty(SurveyModel.prototype, \"progressText\", {\n /**\n * Returns the text for the current progress.\n */\n get: function () {\n var res = this.getPropertyValue(\"progressText\", \"\");\n if (!res) {\n this.updateProgressText();\n res = this.getPropertyValue(\"progressText\", \"\");\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateProgressText = function (onValueChanged) {\n if (onValueChanged === void 0) { onValueChanged = false; }\n if (this.isCalculatingProgressText)\n return;\n if (onValueChanged &&\n this.progressBarType == \"pages\" &&\n this.onProgressText.isEmpty)\n return;\n this.isCalculatingProgressText = true;\n this.setPropertyValue(\"progressText\", this.getProgressText());\n this.setPropertyValue(\"progressValue\", this.getProgress());\n this.isCalculatingProgressText = false;\n };\n SurveyModel.prototype.getProgressText = function () {\n if (!this.isDesignMode && this.currentPage == null)\n return \"\";\n var options = {\n questionCount: 0,\n answeredQuestionCount: 0,\n requiredQuestionCount: 0,\n requiredAnsweredQuestionCount: 0,\n text: \"\",\n };\n var type = this.progressBarType.toLowerCase();\n if (type === \"questions\" ||\n type === \"requiredquestions\" ||\n type === \"correctquestions\" ||\n !this.onProgressText.isEmpty) {\n var info = this.getProgressInfo();\n options.questionCount = info.questionCount;\n options.answeredQuestionCount = info.answeredQuestionCount;\n options.requiredQuestionCount = info.requiredQuestionCount;\n options.requiredAnsweredQuestionCount =\n info.requiredAnsweredQuestionCount;\n }\n options.text = this.getProgressTextCore(options);\n this.onProgressText.fire(this, options);\n return options.text;\n };\n SurveyModel.prototype.getProgressTextCore = function (info) {\n var type = this.progressBarType.toLowerCase();\n if (type === \"questions\") {\n return this.getLocString(\"questionsProgressText\")[\"format\"](info.answeredQuestionCount, info.questionCount);\n }\n if (type === \"requiredquestions\") {\n return this.getLocString(\"questionsProgressText\")[\"format\"](info.requiredAnsweredQuestionCount, info.requiredQuestionCount);\n }\n if (type === \"correctquestions\") {\n var correctAnswersCount = this.getCorrectedAnswerCount();\n return this.getLocString(\"questionsProgressText\")[\"format\"](correctAnswersCount, info.questionCount);\n }\n var vPages = this.isDesignMode ? this.pages : this.visiblePages;\n var index = this.isDesignMode ? 1 : vPages.indexOf(this.currentPage) + 1;\n return this.getLocString(\"progressText\")[\"format\"](index, vPages.length);\n };\n SurveyModel.prototype.afterRenderSurvey = function (htmlElement) {\n this.onAfterRenderSurvey.fire(this, {\n survey: this,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.updateQuestionCssClasses = function (question, cssClasses) {\n this.onUpdateQuestionCssClasses.fire(this, {\n question: question,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.updatePanelCssClasses = function (panel, cssClasses) {\n this.onUpdatePanelCssClasses.fire(this, {\n panel: panel,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.updatePageCssClasses = function (page, cssClasses) {\n this.onUpdatePageCssClasses.fire(this, {\n page: page,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.afterRenderPage = function (htmlElement) {\n if (this.onAfterRenderPage.isEmpty)\n return;\n this.onAfterRenderPage.fire(this, {\n page: this.activePage,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderHeader = function (htmlElement) {\n if (this.onAfterRenderHeader.isEmpty)\n return;\n this.onAfterRenderHeader.fire(this, {\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) {\n this.onAfterRenderQuestion.fire(this, {\n question: question,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderQuestionInput = function (question, htmlElement) {\n if (this.onAfterRenderQuestionInput.isEmpty)\n return;\n var id = question.inputId;\n if (!!id && htmlElement.id !== id && typeof document !== \"undefined\") {\n var el = document.getElementById(id);\n if (!!el) {\n htmlElement = el;\n }\n }\n this.onAfterRenderQuestionInput.fire(this, {\n question: question,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) {\n this.onAfterRenderPanel.fire(this, {\n panel: panel,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.matrixBeforeRowAdded = function (options) {\n this.onMatrixBeforeRowAdded.fire(this, options);\n };\n SurveyModel.prototype.matrixRowAdded = function (question, row) {\n this.onMatrixRowAdded.fire(this, { question: question, row: row });\n };\n SurveyModel.prototype.getQuestionByValueNameFromArray = function (valueName, name, index) {\n var questions = this.getQuestionsByValueName(valueName);\n if (!questions)\n return;\n for (var i = 0; i < questions.length; i++) {\n var res = questions[i].getQuestionFromArray(name, index);\n if (!!res)\n return res;\n }\n return null;\n };\n SurveyModel.prototype.matrixRowRemoved = function (question, rowIndex, row) {\n this.onMatrixRowRemoved.fire(this, {\n question: question,\n rowIndex: rowIndex,\n row: row,\n });\n };\n SurveyModel.prototype.matrixRowRemoving = function (question, rowIndex, row) {\n var options = {\n question: question,\n rowIndex: rowIndex,\n row: row,\n allow: true,\n };\n this.onMatrixRowRemoving.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.matrixAllowRemoveRow = function (question, rowIndex, row) {\n var options = {\n question: question,\n rowIndex: rowIndex,\n row: row,\n allow: true,\n };\n this.onMatrixAllowRemoveRow.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.matrixCellCreated = function (question, options) {\n options.question = question;\n this.onMatrixCellCreated.fire(this, options);\n };\n SurveyModel.prototype.matrixAfterCellRender = function (question, options) {\n options.question = question;\n this.onMatrixAfterCellRender.fire(this, options);\n };\n SurveyModel.prototype.matrixCellValueChanged = function (question, options) {\n options.question = question;\n this.onMatrixCellValueChanged.fire(this, options);\n };\n SurveyModel.prototype.matrixCellValueChanging = function (question, options) {\n options.question = question;\n this.onMatrixCellValueChanging.fire(this, options);\n };\n Object.defineProperty(SurveyModel.prototype, \"isValidateOnValueChanging\", {\n get: function () {\n return this.checkErrorsMode === \"onValueChanging\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.matrixCellValidate = function (question, options) {\n options.question = question;\n this.onMatrixCellValidate.fire(this, options);\n return options.error ? new _error__WEBPACK_IMPORTED_MODULE_10__[\"CustomError\"](options.error, this) : null;\n };\n SurveyModel.prototype.dynamicPanelAdded = function (question) {\n if (this.onDynamicPanelAdded.isEmpty)\n return;\n var panels = question.panels;\n var panel = panels[panels.length - 1];\n this.onDynamicPanelAdded.fire(this, { question: question, panel: panel });\n };\n SurveyModel.prototype.dynamicPanelRemoved = function (question, panelIndex, panel) {\n var questions = !!panel ? panel.questions : [];\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearOnDeletingContainer();\n }\n this.onDynamicPanelRemoved.fire(this, {\n question: question,\n panelIndex: panelIndex,\n panel: panel,\n });\n };\n SurveyModel.prototype.dynamicPanelItemValueChanged = function (question, options) {\n options.question = question;\n this.onDynamicPanelItemValueChanged.fire(this, options);\n };\n SurveyModel.prototype.dragAndDropAllow = function (options) {\n options.allow = true;\n this.onDragDropAllow.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.elementContentVisibilityChanged = function (element) {\n if (this.currentPageValue) {\n this.currentPageValue.ensureRowsVisibility();\n }\n this.onElementContentVisibilityChanged.fire(this, { element: element });\n };\n SurveyModel.prototype.getUpdatedElementTitleActions = function (element, titleActions) {\n if (element.isPage)\n return this.getUpdatedPageTitleActions(element, titleActions);\n if (element.isPanel)\n return this.getUpdatedPanelTitleActions(element, titleActions);\n return this.getUpdatedQuestionTitleActions(element, titleActions);\n };\n SurveyModel.prototype.getUpdatedQuestionTitleActions = function (question, titleActions) {\n var options = {\n question: question,\n titleActions: titleActions,\n };\n this.onGetQuestionTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedPanelTitleActions = function (panel, titleActions) {\n var options = {\n panel: panel,\n titleActions: titleActions,\n };\n this.onGetPanelTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedPageTitleActions = function (page, titleActions) {\n var options = {\n page: page,\n titleActions: titleActions,\n };\n this.onGetPageTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedMatrixRowActions = function (question, row, actions) {\n var options = {\n question: question,\n actions: actions,\n row: row,\n };\n this.onGetMatrixRowActions.fire(this, options);\n return options.actions;\n };\n SurveyModel.prototype.scrollElementToTop = function (element, question, page, id) {\n var options = {\n element: element,\n question: question,\n page: page,\n elementId: id,\n cancel: false,\n };\n this.onScrollingElementToTop.fire(this, options);\n if (!options.cancel) {\n _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].ScrollElementToTop(options.elementId);\n }\n };\n /**\n * Uploads a file to server.\n * @param question a file question object\n * @param name a question name\n * @param files files to upload\n * @param uploadingCallback a call back function to get the status on uploading the files\n */\n SurveyModel.prototype.uploadFiles = function (question, name, files, uploadingCallback) {\n if (this.onUploadFiles.isEmpty) {\n uploadingCallback(\"error\", files);\n }\n else {\n this.onUploadFiles.fire(this, {\n question: question,\n name: name,\n files: files || [],\n callback: uploadingCallback,\n });\n }\n if (this.surveyPostId) {\n this.uploadFilesCore(name, files, uploadingCallback);\n }\n };\n /**\n * Downloads a file from server\n * @param name a question name\n * @param fileValue a single file question value\n * @param callback a call back function to get the status on downloading the file and the downloaded file content\n */\n SurveyModel.prototype.downloadFile = function (questionName, fileValue, callback) {\n if (this.onDownloadFile.isEmpty) {\n !!callback && callback(\"success\", fileValue.content || fileValue);\n }\n this.onDownloadFile.fire(this, {\n name: questionName,\n content: fileValue.content || fileValue,\n fileValue: fileValue,\n callback: callback,\n });\n };\n /**\n * Clears files from server.\n * @param question question\n * @param name question name\n * @param value file question value\n * @param callback call back function to get the status of the clearing operation\n */\n SurveyModel.prototype.clearFiles = function (question, name, value, fileName, callback) {\n if (this.onClearFiles.isEmpty) {\n !!callback && callback(\"success\", value);\n }\n this.onClearFiles.fire(this, {\n question: question,\n name: name,\n value: value,\n fileName: fileName,\n callback: callback,\n });\n };\n SurveyModel.prototype.updateChoicesFromServer = function (question, choices, serverResult) {\n var options = {\n question: question,\n choices: choices,\n serverResult: serverResult,\n };\n this.onLoadChoicesFromServer.fire(this, options);\n return options.choices;\n };\n SurveyModel.prototype.createSurveyService = function () {\n return new _dxSurveyService__WEBPACK_IMPORTED_MODULE_8__[\"dxSurveyService\"]();\n };\n SurveyModel.prototype.uploadFilesCore = function (name, files, uploadingCallback) {\n var _this = this;\n var responses = [];\n files.forEach(function (file) {\n if (uploadingCallback)\n uploadingCallback(\"uploading\", file);\n _this.createSurveyService().sendFile(_this.surveyPostId, file, function (success, response) {\n if (success) {\n responses.push({ content: response, file: file });\n if (responses.length === files.length) {\n if (uploadingCallback)\n uploadingCallback(\"success\", responses);\n }\n }\n else {\n if (uploadingCallback)\n uploadingCallback(\"error\", {\n response: response,\n file: file,\n });\n }\n });\n });\n };\n SurveyModel.prototype.getPage = function (index) {\n return this.pages[index];\n };\n /**\n * Adds an existing page to the survey.\n * @param page a newly added page\n * @param index - a page index to where insert a page. It is -1 by default and the page will be added into the end.\n * @see addNewPage\n */\n SurveyModel.prototype.addPage = function (page, index) {\n if (index === void 0) { index = -1; }\n if (page == null)\n return;\n if (index < 0 || index >= this.pages.length) {\n this.pages.push(page);\n }\n else {\n this.pages.splice(index, 0, page);\n }\n };\n /**\n * Creates a new page and adds it to a survey. Generates a new name if the `name` parameter is not specified.\n * @param name a page name\n * @param index - a page index to where insert a new page. It is -1 by default and the page will be added into the end.\n * @see addPage\n */\n SurveyModel.prototype.addNewPage = function (name, index) {\n if (name === void 0) { name = null; }\n if (index === void 0) { index = -1; }\n var page = this.createNewPage(name);\n this.addPage(page, index);\n return page;\n };\n /**\n * Removes a page from a survey.\n * @param page\n */\n SurveyModel.prototype.removePage = function (page) {\n var index = this.pages.indexOf(page);\n if (index < 0)\n return;\n this.pages.splice(index, 1);\n if (this.currentPageValue == page) {\n this.currentPage = this.pages.length > 0 ? this.pages[0] : null;\n }\n };\n /**\n * Returns a question by its name.\n * @param name a question name\n * @param caseInsensitive\n * @see getQuestionByValueName\n */\n SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n if (!name)\n return null;\n if (caseInsensitive) {\n name = name.toLowerCase();\n }\n var hash = !!caseInsensitive\n ? this.questionHashes.namesInsensitive\n : this.questionHashes.names;\n var res = hash[name];\n if (!res)\n return null;\n return res[0];\n };\n /**\n * Returns a question by its value name\n * @param valueName a question name\n * @param caseInsensitive\n * @see getQuestionByName\n * @see getQuestionsByValueName\n * @see Question.valueName\n */\n SurveyModel.prototype.getQuestionByValueName = function (valueName, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var res = this.getQuestionsByValueName(valueName, caseInsensitive);\n return !!res ? res[0] : null;\n };\n /**\n * Returns all questions by their valueName. name property is used if valueName property is empty.\n * @param valueName a question name\n * @param caseInsensitive\n * @see getQuestionByName\n * @see getQuestionByValueName\n * @see Question.valueName\n */\n SurveyModel.prototype.getQuestionsByValueName = function (valueName, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var hash = !!caseInsensitive\n ? this.questionHashes.valueNamesInsensitive\n : this.questionHashes.valueNames;\n var res = hash[valueName];\n if (!res)\n return null;\n return res;\n };\n SurveyModel.prototype.getCalculatedValueByName = function (name) {\n for (var i = 0; i < this.calculatedValues.length; i++) {\n if (name == this.calculatedValues[i].name)\n return this.calculatedValues[i];\n }\n return null;\n };\n /**\n * Gets a list of questions by their names.\n * @param names an array of question names\n * @param caseInsensitive\n */\n SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var result = [];\n if (!names)\n return result;\n for (var i = 0; i < names.length; i++) {\n if (!names[i])\n continue;\n var question = this.getQuestionByName(names[i], caseInsensitive);\n if (question)\n result.push(question);\n }\n return result;\n };\n /**\n * Returns a page on which an element (question or panel) is placed.\n * @param element Question or Panel\n */\n SurveyModel.prototype.getPageByElement = function (element) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n if (page.containsElement(element))\n return page;\n }\n return null;\n };\n /**\n * Returns a page on which a question is located.\n * @param question\n */\n SurveyModel.prototype.getPageByQuestion = function (question) {\n return this.getPageByElement(question);\n };\n /**\n * Returns a page by it's name.\n * @param name\n */\n SurveyModel.prototype.getPageByName = function (name) {\n for (var i = 0; i < this.pages.length; i++) {\n if (this.pages[i].name == name)\n return this.pages[i];\n }\n return null;\n };\n /**\n * Returns a list of pages by their names.\n * @param names a list of page names\n */\n SurveyModel.prototype.getPagesByNames = function (names) {\n var result = [];\n if (!names)\n return result;\n for (var i = 0; i < names.length; i++) {\n if (!names[i])\n continue;\n var page = this.getPageByName(names[i]);\n if (page)\n result.push(page);\n }\n return result;\n };\n /**\n * Returns a list of all questions in a survey.\n * @param visibleOnly set it `true`, if you want to get only visible questions\n */\n SurveyModel.prototype.getAllQuestions = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].addQuestionsToList(result, visibleOnly, includingDesignTime);\n }\n return result;\n };\n /**\n * Returns quiz questions. All visible questions that has input(s) widgets.\n * @see getQuizQuestionCount\n */\n SurveyModel.prototype.getQuizQuestions = function () {\n var result = new Array();\n var startIndex = this.firstPageIsStarted ? 1 : 0;\n for (var i = startIndex; i < this.pages.length; i++) {\n if (!this.pages[i].isVisible)\n continue;\n var questions = this.pages[i].questions;\n for (var j = 0; j < questions.length; j++) {\n var q = questions[j];\n if (q.quizQuestionCount > 0) {\n result.push(q);\n }\n }\n }\n return result;\n };\n /**\n * Returns a panel by its name.\n * @param name a panel name\n * @param caseInsensitive\n * @see getQuestionByName\n */\n SurveyModel.prototype.getPanelByName = function (name, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var panels = this.getAllPanels();\n if (caseInsensitive)\n name = name.toLowerCase();\n for (var i = 0; i < panels.length; i++) {\n var panelName = panels[i].name;\n if (caseInsensitive)\n panelName = panelName.toLowerCase();\n if (panelName == name)\n return panels[i];\n }\n return null;\n };\n /**\n * Returns a list of all survey's panels.\n */\n SurveyModel.prototype.getAllPanels = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].addPanelsIntoList(result, visibleOnly, includingDesignTime);\n }\n return result;\n };\n /**\n * Creates and returns a new page, but do not add it into the survey.\n * You can use addPage(page) function to add it into survey later.\n * @see addPage\n * @see addNewPage\n */\n SurveyModel.prototype.createNewPage = function (name) {\n return new _page__WEBPACK_IMPORTED_MODULE_5__[\"PageModel\"](name);\n };\n SurveyModel.prototype.questionOnValueChanging = function (valueName, newValue) {\n if (this.onValueChanging.isEmpty)\n return newValue;\n var options = {\n name: valueName,\n question: this.getQuestionByValueName(valueName),\n value: this.getUnbindValue(newValue),\n oldValue: this.getValue(valueName),\n };\n this.onValueChanging.fire(this, options);\n return options.value;\n };\n SurveyModel.prototype.updateQuestionValue = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return;\n var questions = this.getQuestionsByValueName(valueName);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n var qValue = questions[i].value;\n if ((qValue === newValue && Array.isArray(qValue) && !!this.editingObj) ||\n !this.isTwoValueEquals(qValue, newValue)) {\n questions[i].updateValueFromSurvey(newValue);\n }\n }\n }\n };\n SurveyModel.prototype.checkQuestionErrorOnValueChanged = function (question) {\n if (!this.isNavigationButtonPressed &&\n (this.checkErrorsMode === \"onValueChanged\" ||\n question.getAllErrors().length > 0)) {\n this.checkQuestionErrorOnValueChangedCore(question);\n }\n };\n SurveyModel.prototype.checkQuestionErrorOnValueChangedCore = function (question) {\n var oldErrorCount = question.getAllErrors().length;\n var res = question.hasErrors(true, {\n isOnValueChanged: !this.isValidateOnValueChanging,\n });\n if (!!question.page &&\n (oldErrorCount > 0 || question.getAllErrors().length > 0)) {\n this.fireValidatedErrorsOnPage(question.page);\n }\n return res;\n };\n SurveyModel.prototype.checkErrorsOnValueChanging = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return false;\n var questions = this.getQuestionsByValueName(valueName);\n if (!questions)\n return false;\n var res = false;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (!this.isTwoValueEquals(q.valueForSurvey, newValue)) {\n q.value = newValue;\n }\n if (this.checkQuestionErrorOnValueChangedCore(q))\n res = true;\n res = res || q.errors.length > 0;\n }\n return res;\n };\n SurveyModel.prototype.notifyQuestionOnValueChanged = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return;\n var questions = this.getQuestionsByValueName(valueName);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n this.checkQuestionErrorOnValueChanged(question);\n question.onSurveyValueChanged(newValue);\n this.onValueChanged.fire(this, {\n name: valueName,\n question: question,\n value: newValue,\n });\n }\n }\n else {\n this.onValueChanged.fire(this, {\n name: valueName,\n question: null,\n value: newValue,\n });\n }\n if (this.isDisposed)\n return;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].checkBindings(valueName, newValue);\n }\n this.notifyElementsOnAnyValueOrVariableChanged(valueName);\n };\n SurveyModel.prototype.notifyElementsOnAnyValueOrVariableChanged = function (name) {\n if (this.isEndLoadingFromJson === \"processing\")\n return;\n if (this.isRunningConditions) {\n this.conditionNotifyElementsOnAnyValueOrVariableChanged = true;\n return;\n }\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].onAnyValueChanged(name);\n }\n if (!this.isEndLoadingFromJson) {\n this.locStrsChanged();\n }\n };\n SurveyModel.prototype.updateAllQuestionsValue = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var valName = q.getValueName();\n q.updateValueFromSurvey(this.getValue(valName));\n if (q.requireUpdateCommentValue) {\n q.updateCommentFromSurvey(this.getComment(valName));\n }\n }\n };\n SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].onSurveyValueChanged(this.getValue(questions[i].getValueName()));\n }\n };\n SurveyModel.prototype.checkOnPageTriggers = function () {\n var questions = this.getCurrentPageQuestions(true);\n var values = {};\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n var name = question.getValueName();\n values[name] = this.getValue(name);\n }\n this.addCalculatedValuesIntoFilteredValues(values);\n this.checkTriggers(values, true);\n };\n SurveyModel.prototype.getCurrentPageQuestions = function (includeInvsible) {\n if (includeInvsible === void 0) { includeInvsible = false; }\n var result = [];\n var page = this.currentPage;\n if (!page)\n return result;\n for (var i = 0; i < page.questions.length; i++) {\n var question = page.questions[i];\n if ((!includeInvsible && !question.visible) || !question.name)\n continue;\n result.push(question);\n }\n return result;\n };\n SurveyModel.prototype.checkTriggers = function (key, isOnNextPage) {\n if (this.isCompleted || this.triggers.length == 0)\n return;\n if (this.isTriggerIsRunning) {\n this.triggerValues = this.getFilteredValues();\n for (var k in key) {\n this.triggerKeys[k] = key[k];\n }\n return;\n }\n this.isTriggerIsRunning = true;\n this.triggerKeys = key;\n this.triggerValues = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n for (var i = 0; i < this.triggers.length; i++) {\n var trigger = this.triggers[i];\n if (trigger.isOnNextPage == isOnNextPage) {\n trigger.checkExpression(this.triggerKeys, this.triggerValues, properties);\n }\n }\n this.isTriggerIsRunning = false;\n };\n SurveyModel.prototype.doElementsOnLoad = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].onSurveyLoad();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"isRunningConditions\", {\n get: function () {\n return !!this.conditionValues;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.runConditions = function () {\n if (this.isCompleted ||\n this.isEndLoadingFromJson === \"processing\" ||\n this.isRunningConditions)\n return;\n this.conditionValues = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n var oldCurrentPageIndex = this.pages.indexOf(this.currentPageValue);\n this.runConditionsCore(properties);\n this.checkIfNewPagesBecomeVisible(oldCurrentPageIndex);\n this.conditionValues = null;\n if (this.isValueChangedOnRunningCondition &&\n this.conditionRunnerCounter <\n _settings__WEBPACK_IMPORTED_MODULE_15__[\"settings\"].maximumConditionRunCountOnValueChanged) {\n this.isValueChangedOnRunningCondition = false;\n this.conditionRunnerCounter++;\n this.runConditions();\n }\n else {\n this.isValueChangedOnRunningCondition = false;\n this.conditionRunnerCounter = 0;\n if (this.conditionUpdateVisibleIndexes) {\n this.conditionUpdateVisibleIndexes = false;\n this.updateVisibleIndexes();\n }\n if (this.conditionNotifyElementsOnAnyValueOrVariableChanged) {\n this.conditionNotifyElementsOnAnyValueOrVariableChanged = false;\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n }\n }\n };\n SurveyModel.prototype.runConditionOnValueChanged = function (name, value) {\n if (this.isRunningConditions) {\n this.conditionValues[name] = value;\n this.isValueChangedOnRunningCondition = true;\n }\n else {\n this.runConditions();\n }\n };\n SurveyModel.prototype.runConditionsCore = function (properties) {\n var pages = this.pages;\n for (var i = 0; i < this.calculatedValues.length; i++) {\n this.calculatedValues[i].resetCalculation();\n }\n for (var i = 0; i < this.calculatedValues.length; i++) {\n this.calculatedValues[i].doCalculation(this.calculatedValues, this.conditionValues, properties);\n }\n for (var i = 0; i < pages.length; i++) {\n pages[i].runCondition(this.conditionValues, properties);\n }\n };\n SurveyModel.prototype.checkIfNewPagesBecomeVisible = function (oldCurrentPageIndex) {\n var newCurrentPageIndex = this.pages.indexOf(this.currentPageValue);\n if (newCurrentPageIndex <= oldCurrentPageIndex + 1)\n return;\n for (var i = oldCurrentPageIndex + 1; i < newCurrentPageIndex; i++) {\n if (this.pages[i].isVisible) {\n this.currentPage = this.pages[i];\n break;\n }\n }\n };\n /**\n * Sends a survey result to the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @param postId [api.surveyjs.io](https://api.surveyjs.io) service postId\n * @param clientId Typically a customer e-mail or an identifier\n * @param isPartialCompleted Set it to `true` if the survey is not completed yet and the results are intermediate\n * @see surveyPostId\n * @see clientId\n */\n SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) {\n if (postId === void 0) { postId = null; }\n if (clientId === void 0) { clientId = null; }\n if (isPartialCompleted === void 0) { isPartialCompleted = false; }\n if (!this.isEditMode)\n return;\n if (isPartialCompleted && this.onPartialSend) {\n this.onPartialSend.fire(this, null);\n }\n if (!postId && this.surveyPostId) {\n postId = this.surveyPostId;\n }\n if (!postId)\n return;\n if (clientId) {\n this.clientId = clientId;\n }\n if (isPartialCompleted && !this.clientId)\n return;\n var self = this;\n if (this.surveyShowDataSaving) {\n this.setCompletedState(\"saving\", \"\");\n }\n this.createSurveyService().sendResult(postId, this.data, function (success, response, request) {\n if (self.surveyShowDataSaving) {\n if (success) {\n self.setCompletedState(\"success\", \"\");\n }\n else {\n self.setCompletedState(\"error\", response);\n }\n }\n self.onSendResult.fire(self, {\n success: success,\n response: response,\n request: request,\n });\n }, this.clientId, isPartialCompleted);\n };\n /**\n * Calls the [api.surveyjs.io](https://api.surveyjs.io) service and, on callback, fires the `onGetResult` event with all answers that your users made for a question.\n * @param resultId [api.surveyjs.io](https://api.surveyjs.io) service resultId\n * @param name The question name\n * @see onGetResult\n */\n SurveyModel.prototype.getResult = function (resultId, name) {\n var self = this;\n this.createSurveyService().getResult(resultId, name, function (success, data, dataList, response) {\n self.onGetResult.fire(self, {\n success: success,\n data: data,\n dataList: dataList,\n response: response,\n });\n });\n };\n /**\n * Loads the survey JSON from the [api.surveyjs.io](https://api.surveyjs.io) service.\n * If `clientId` is not `null` and a user had completed a survey before, the survey switches to `completedbefore` state.\n * @param surveyId [api.surveyjs.io](https://api.surveyjs.io) service surveyId\n * @param clientId users' indentifier, for example an e-mail or a unique customer id in your web application.\n * @see state\n * @see onLoadedSurveyFromService\n */\n SurveyModel.prototype.loadSurveyFromService = function (surveyId, cliendId) {\n if (surveyId === void 0) { surveyId = null; }\n if (cliendId === void 0) { cliendId = null; }\n if (surveyId) {\n this.surveyId = surveyId;\n }\n if (cliendId) {\n this.clientId = cliendId;\n }\n var self = this;\n this.isLoading = true;\n this.onLoadingSurveyFromService();\n if (cliendId) {\n this.createSurveyService().getSurveyJsonAndIsCompleted(this.surveyId, this.clientId, function (success, json, isCompleted, response) {\n self.isLoading = false;\n if (success) {\n self.isCompletedBefore = isCompleted == \"completed\";\n self.loadSurveyFromServiceJson(json);\n }\n });\n }\n else {\n this.createSurveyService().loadSurvey(this.surveyId, function (success, result, response) {\n self.isLoading = false;\n if (success) {\n self.loadSurveyFromServiceJson(result);\n }\n });\n }\n };\n SurveyModel.prototype.loadSurveyFromServiceJson = function (json) {\n if (!json)\n return;\n this.fromJSON(json);\n this.notifyAllQuestionsOnValueChanged();\n this.onLoadSurveyFromService();\n this.onLoadedSurveyFromService.fire(this, {});\n };\n SurveyModel.prototype.onLoadingSurveyFromService = function () { };\n SurveyModel.prototype.onLoadSurveyFromService = function () { };\n SurveyModel.prototype.resetVisibleIndexes = function () {\n var questions = this.getAllQuestions(true);\n for (var i = 0; i < questions.length; i++) {\n questions[i].setVisibleIndex(-1);\n }\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.updateVisibleIndexes = function () {\n if (this.isLoadingFromJson || !!this.isEndLoadingFromJson)\n return;\n if (this.isRunningConditions &&\n this.onVisibleChanged.isEmpty &&\n this.onPageVisibleChanged.isEmpty) {\n //Run update visible index only one time on finishing running conditions\n this.conditionUpdateVisibleIndexes = true;\n return;\n }\n this.updatePageVisibleIndexes(this.showPageNumbers);\n if (this.showQuestionNumbers == \"onPage\") {\n var visPages = this.visiblePages;\n for (var i = 0; i < visPages.length; i++) {\n visPages[i].setVisibleIndex(0);\n }\n }\n else {\n var index = this.showQuestionNumbers == \"on\" ? 0 : -1;\n for (var i = 0; i < this.pages.length; i++) {\n index += this.pages[i].setVisibleIndex(index);\n }\n }\n this.updateProgressText(true);\n };\n SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) {\n var index = 0;\n for (var i = 0; i < this.pages.length; i++) {\n var isPageVisible = this.pages[i].isVisible;\n this.pages[i].visibleIndex = isPageVisible ? index++ : -1;\n this.pages[i].num =\n showIndex && isPageVisible ? this.pages[i].visibleIndex + 1 : -1;\n }\n };\n SurveyModel.prototype.fromJSON = function (json) {\n if (!json)\n return;\n this.questionHashesClear();\n this.jsonErrors = null;\n var jsonConverter = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n jsonConverter.toObject(json, this);\n if (jsonConverter.errors.length > 0) {\n this.jsonErrors = jsonConverter.errors;\n }\n };\n SurveyModel.prototype.setJsonObject = function (jsonObj) {\n this.fromJSON(jsonObj);\n };\n SurveyModel.prototype.endLoadingFromJson = function () {\n this.isEndLoadingFromJson = \"processing\";\n this.isStartedState = this.firstPageIsStarted;\n this.onQuestionsOnPageModeChanged(\"standard\");\n _super.prototype.endLoadingFromJson.call(this);\n if (this.hasCookie) {\n this.doComplete();\n }\n this.doElementsOnLoad();\n this.isEndLoadingFromJson = \"conditions\";\n this.runConditions();\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n this.isEndLoadingFromJson = null;\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.onBeforeCreating = function () { };\n SurveyModel.prototype.onCreating = function () { };\n SurveyModel.prototype.getProcessedTextValue = function (textValue) {\n this.getProcessedTextValueCore(textValue);\n if (!this.onProcessTextValue.isEmpty) {\n var wasEmpty = this.isValueEmpty(textValue.value);\n this.onProcessTextValue.fire(this, textValue);\n textValue.isExists =\n textValue.isExists || (wasEmpty && !this.isValueEmpty(textValue.value));\n }\n };\n SurveyModel.prototype.getProcessedTextValueCore = function (textValue) {\n var name = textValue.name.toLocaleLowerCase();\n if ([\"no\", \"require\", \"title\"].indexOf(name) !== -1) {\n return;\n }\n if (name === \"pageno\") {\n textValue.isExists = true;\n var page = this.currentPage;\n textValue.value = page != null ? this.visiblePages.indexOf(page) + 1 : 0;\n return;\n }\n if (name === \"pagecount\") {\n textValue.isExists = true;\n textValue.value = this.visiblePageCount;\n return;\n }\n if (name === \"locale\") {\n textValue.isExists = true;\n textValue.value = !!this.locale\n ? this.locale\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].defaultLocale;\n return;\n }\n if (name === \"correctedanswers\" || name === \"correctedanswercount\") {\n textValue.isExists = true;\n textValue.value = this.getCorrectedAnswerCount();\n return;\n }\n if (name === \"incorrectedanswers\" || name === \"incorrectedanswercount\") {\n textValue.isExists = true;\n textValue.value = this.getInCorrectedAnswerCount();\n return;\n }\n if (name === \"questioncount\") {\n textValue.isExists = true;\n textValue.value = this.getQuizQuestionCount();\n return;\n }\n var variable = this.getVariable(name);\n if (variable !== undefined) {\n textValue.isExists = true;\n textValue.value = variable;\n return;\n }\n var question = this.getFirstName(name);\n if (question) {\n textValue.isExists = true;\n var firstName = question.getValueName().toLowerCase();\n name = firstName + name.substr(firstName.length);\n name = name.toLocaleLowerCase();\n var values = {};\n values[firstName] = textValue.returnDisplayValue\n ? question.getDisplayValue(false, undefined)\n : question.value;\n textValue.value = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"ProcessValue\"]().getValue(name, values);\n return;\n }\n var value = this.getValue(textValue.name);\n if (value !== undefined) {\n textValue.isExists = true;\n textValue.value = value;\n }\n };\n SurveyModel.prototype.getFirstName = function (name) {\n name = name.toLowerCase();\n var question;\n do {\n question = this.getQuestionByValueName(name, true);\n name = this.reduceFirstName(name);\n } while (!question && !!name);\n return question;\n };\n SurveyModel.prototype.reduceFirstName = function (name) {\n var pos1 = name.lastIndexOf(\".\");\n var pos2 = name.lastIndexOf(\"[\");\n if (pos1 < 0 && pos2 < 0)\n return \"\";\n var pos = Math.max(pos1, pos2);\n return name.substr(0, pos);\n };\n SurveyModel.prototype.clearUnusedValues = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearUnusedValues();\n }\n if (this.clearInvisibleValues != \"none\") {\n this.clearInvisibleQuestionValues();\n }\n };\n SurveyModel.prototype.hasVisibleQuestionByValueName = function (valueName) {\n var questions = this.getQuestionsByValueName(valueName);\n if (!questions)\n return false;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].isVisible)\n return true;\n }\n return false;\n };\n SurveyModel.prototype.questionCountByValueName = function (valueName) {\n var questions = this.getQuestionsByValueName(valueName);\n return !!questions ? questions.length : 0;\n };\n SurveyModel.prototype.clearInvisibleQuestionValues = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValueIfInvisible();\n }\n };\n /**\n * Returns a variable value. Variable, unlike values, are not stored in the survey results.\n * @param name A variable name\n * @see SetVariable\n */\n SurveyModel.prototype.getVariable = function (name) {\n if (!name)\n return null;\n name = name.toLowerCase();\n var res = this.variablesHash[name];\n if (!this.isValueEmpty(res))\n return res;\n if (name.indexOf(\".\") > -1 || name.indexOf(\"[\") > -1) {\n if (new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"ProcessValue\"]().hasValue(name, this.variablesHash))\n return new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"ProcessValue\"]().getValue(name, this.variablesHash);\n }\n return res;\n };\n /**\n * Sets a variable value. Variable, unlike values, are not stored in the survey results.\n * @param name A variable name\n * @param newValue A variable new value\n * @see GetVariable\n */\n SurveyModel.prototype.setVariable = function (name, newValue) {\n if (!name)\n return;\n name = name.toLowerCase();\n this.variablesHash[name] = newValue;\n this.notifyElementsOnAnyValueOrVariableChanged(name);\n this.runConditionOnValueChanged(name, newValue);\n };\n /**\n * Returns all variables in the survey. Use setVariable function to create a new variable.\n * @see getVariable\n * @see setVariable\n */\n SurveyModel.prototype.getVariableNames = function () {\n var res = [];\n for (var key in this.variablesHash) {\n res.push(key);\n }\n return res;\n };\n //ISurvey data\n SurveyModel.prototype.getUnbindValue = function (value) {\n if (!!this.editingObj)\n return value;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n };\n /**\n * Returns a question value (answer) by a question's name.\n * @param name A question name\n * @see data\n * @see setValue\n */\n SurveyModel.prototype.getValue = function (name) {\n if (!name || name.length == 0)\n return null;\n var value = this.getDataValueCore(this.valuesHash, name);\n return this.getUnbindValue(value);\n };\n /**\n * Sets a question value (answer). It runs all triggers and conditions (`visibleIf` properties).\n *\n * Goes to the next page if `goNextPageAutomatic` is `true` and all questions on the current page are answered correctly.\n * @param name A question name\n * @param newValue A new question value\n * @see data\n * @see getValue\n * @see PageModel.visibleIf\n * @see Question.visibleIf\n * @see goNextPageAutomatic\n */\n SurveyModel.prototype.setValue = function (name, newQuestionValue, locNotification, allowNotifyValueChanged) {\n if (locNotification === void 0) { locNotification = false; }\n if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n var newValue = newQuestionValue;\n if (allowNotifyValueChanged) {\n newValue = this.questionOnValueChanging(name, newQuestionValue);\n }\n if (this.isValidateOnValueChanging &&\n this.checkErrorsOnValueChanging(name, newValue))\n return;\n if (!this.editingObj &&\n this.isValueEqual(name, newValue) &&\n this.isTwoValueEquals(newValue, newQuestionValue))\n return;\n var oldValue = this.getValue(name);\n if (this.isValueEmpty(newValue)) {\n this.deleteDataValueCore(this.valuesHash, name);\n }\n else {\n newValue = this.getUnbindValue(newValue);\n this.setDataValueCore(this.valuesHash, name, newValue);\n }\n this.updateOnSetValue(name, newValue, oldValue, locNotification, allowNotifyValueChanged);\n };\n SurveyModel.prototype.updateOnSetValue = function (name, newValue, oldValue, locNotification, allowNotifyValueChanged) {\n if (locNotification === void 0) { locNotification = false; }\n if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n this.updateQuestionValue(name, newValue);\n if (locNotification === true || this.isDisposed)\n return;\n var triggerKeys = {};\n triggerKeys[name] = { newValue: newValue, oldValue: oldValue };\n this.runConditionOnValueChanged(name, newValue);\n this.checkTriggers(triggerKeys, false);\n if (allowNotifyValueChanged)\n this.notifyQuestionOnValueChanged(name, newValue);\n if (locNotification !== \"text\") {\n this.tryGoNextPageAutomatic(name);\n }\n this.updateProgressText(true);\n };\n SurveyModel.prototype.isValueEqual = function (name, newValue) {\n if (newValue === \"\" || newValue === undefined)\n newValue = null;\n var oldValue = this.getValue(name);\n if (oldValue === \"\" || oldValue === undefined)\n oldValue = null;\n if (newValue === null || oldValue === null)\n return newValue === oldValue;\n return this.isTwoValueEquals(newValue, oldValue);\n };\n SurveyModel.prototype.doOnPageAdded = function (page) {\n page.setSurveyImpl(this);\n if (!page.name)\n page.name = this.generateNewName(this.pages, \"page\");\n this.questionHashesPanelAdded(page);\n this.updateVisibleIndexes();\n if (this.isDesignMode) {\n this.updateProgressText();\n }\n var options = { page: page };\n this.onPageAdded.fire(this, options);\n };\n SurveyModel.prototype.doOnPageRemoved = function (page) {\n page.setSurveyImpl(null);\n this.updateVisibleIndexes();\n if (this.isDesignMode) {\n this.updateProgressText();\n }\n this.updateLazyRenderingRowsOnRemovingElements();\n };\n SurveyModel.prototype.generateNewName = function (elements, baseName) {\n var keys = {};\n for (var i = 0; i < elements.length; i++)\n keys[elements[i][\"name\"]] = true;\n var index = 1;\n while (keys[baseName + index])\n index++;\n return baseName + index;\n };\n SurveyModel.prototype.tryGoNextPageAutomatic = function (name) {\n if (!!this.isEndLoadingFromJson ||\n !this.goNextPageAutomatic ||\n !this.currentPage)\n return;\n var question = this.getQuestionByValueName(name);\n if (!question ||\n (!!question &&\n (!question.visible || !question.supportGoNextPageAutomatic())))\n return;\n if (question.hasErrors(false) && !question.supportGoNextPageError())\n return;\n var questions = this.getCurrentPageQuestions();\n if (questions.indexOf(question) < 0)\n return;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].hasInput && questions[i].isEmpty())\n return;\n }\n if (!this.checkIsCurrentPageHasErrors(false)) {\n if (!this.isLastPage) {\n this.nextPage();\n }\n else {\n if (this.goNextPageAutomatic === true &&\n this.allowCompleteSurveyAutomatic) {\n this.completeLastPage();\n }\n }\n }\n };\n /**\n * Returns the comment value.\n * @param name A comment's name.\n * @see setComment\n */\n SurveyModel.prototype.getComment = function (name) {\n var result = this.data[name + this.commentPrefix];\n if (result == null)\n result = \"\";\n return result;\n };\n /**\n * Sets a comment value.\n * @param name A comment name.\n * @param newValue A new comment value.\n * @see getComment\n */\n SurveyModel.prototype.setComment = function (name, newValue, locNotification) {\n if (locNotification === void 0) { locNotification = false; }\n if (!newValue)\n newValue = \"\";\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, this.getComment(name)))\n return;\n var commentName = name + this.commentPrefix;\n if (this.isValueEmpty(newValue)) {\n this.deleteDataValueCore(this.valuesHash, commentName);\n }\n else {\n this.setDataValueCore(this.valuesHash, commentName, newValue);\n }\n var questions = this.getQuestionsByValueName(name);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n questions[i].updateCommentFromSurvey(newValue);\n this.checkQuestionErrorOnValueChanged(questions[i]);\n }\n }\n if (locNotification !== \"text\") {\n this.tryGoNextPageAutomatic(name);\n }\n var question = this.getQuestionByName(name);\n if (question) {\n this.onValueChanged.fire(this, {\n name: commentName,\n question: question,\n value: newValue,\n });\n }\n };\n /**\n * Removes a value from the survey results.\n * @param {string} name The name of the value. Typically it is a question name.\n */\n SurveyModel.prototype.clearValue = function (name) {\n this.setValue(name, null);\n this.setComment(name, null);\n };\n Object.defineProperty(SurveyModel.prototype, \"clearValueOnDisableItems\", {\n /**\n * Gets or sets whether to clear value on disable items in checkbox, dropdown and radiogroup questions.\n * By default, values are not cleared on disabled the corresponded items. This property is not persisted in survey JSON and you have to set it in code.\n */\n get: function () {\n return this.getPropertyValue(\"clearValueOnDisableItems\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"clearValueOnDisableItems\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isClearValueOnHidden\", {\n get: function () {\n return (this.clearInvisibleValues == \"onHidden\" ||\n this.isClearValueOnHiddenContainer);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isClearValueOnHiddenContainer\", {\n get: function () {\n return (this.clearInvisibleValues == \"onHiddenContainer\" &&\n !this.isShowingPreview &&\n !this.runningPages);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) {\n this.updateVisibleIndexes();\n this.onVisibleChanged.fire(this, {\n question: question,\n name: question.name,\n visible: newValue,\n });\n };\n SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) {\n if (this.isLoadingFromJson)\n return;\n if (newValue && !this.currentPageValue) {\n this.currentPageValue = this.currentPage;\n }\n this.updateVisibleIndexes();\n this.onPageVisibleChanged.fire(this, {\n page: page,\n visible: newValue,\n });\n };\n SurveyModel.prototype.panelVisibilityChanged = function (panel, newValue) {\n this.updateVisibleIndexes();\n this.onPanelVisibleChanged.fire(this, {\n panel: panel,\n visible: newValue,\n });\n };\n SurveyModel.prototype.questionCreated = function (question) {\n this.onQuestionCreated.fire(this, { question: question });\n };\n SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) {\n if (!question.name) {\n question.name = this.generateNewName(this.getAllQuestions(false, true), \"question\");\n }\n if (!!question.page) {\n this.questionHashesAdded(question);\n }\n this.updateVisibleIndexes();\n this.onQuestionAdded.fire(this, {\n question: question,\n name: question.name,\n index: index,\n parentPanel: parentPanel,\n rootPanel: rootPanel,\n });\n };\n SurveyModel.prototype.questionRemoved = function (question) {\n this.questionHashesRemoved(question, question.name, question.getValueName());\n this.updateVisibleIndexes();\n this.onQuestionRemoved.fire(this, {\n question: question,\n name: question.name,\n });\n this.updateLazyRenderingRowsOnRemovingElements();\n };\n SurveyModel.prototype.questionRenamed = function (question, oldName, oldValueName) {\n this.questionHashesRemoved(question, oldName, oldValueName);\n this.questionHashesAdded(question);\n };\n SurveyModel.prototype.questionHashesClear = function () {\n this.questionHashes.names = {};\n this.questionHashes.namesInsensitive = {};\n this.questionHashes.valueNames = {};\n this.questionHashes.valueNamesInsensitive = {};\n };\n SurveyModel.prototype.questionHashesPanelAdded = function (panel) {\n if (this.isLoadingFromJson)\n return;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n this.questionHashesAdded(questions[i]);\n }\n };\n SurveyModel.prototype.questionHashesAdded = function (question) {\n this.questionHashAddedCore(this.questionHashes.names, question, question.name);\n this.questionHashAddedCore(this.questionHashes.namesInsensitive, question, question.name.toLowerCase());\n this.questionHashAddedCore(this.questionHashes.valueNames, question, question.getValueName());\n this.questionHashAddedCore(this.questionHashes.valueNamesInsensitive, question, question.getValueName().toLowerCase());\n };\n SurveyModel.prototype.questionHashesRemoved = function (question, name, valueName) {\n if (!!name) {\n this.questionHashRemovedCore(this.questionHashes.names, question, name);\n this.questionHashRemovedCore(this.questionHashes.namesInsensitive, question, name.toLowerCase());\n }\n if (!!valueName) {\n this.questionHashRemovedCore(this.questionHashes.valueNames, question, valueName);\n this.questionHashRemovedCore(this.questionHashes.valueNamesInsensitive, question, valueName.toLowerCase());\n }\n };\n SurveyModel.prototype.questionHashAddedCore = function (hash, question, name) {\n var res = hash[name];\n if (!!res) {\n var res = hash[name];\n if (res.indexOf(question) < 0) {\n res.push(question);\n }\n }\n else {\n hash[name] = [question];\n }\n };\n SurveyModel.prototype.questionHashRemovedCore = function (hash, question, name) {\n var res = hash[name];\n if (!res)\n return;\n var index = res.indexOf(question);\n if (index > -1) {\n res.splice(index, 1);\n }\n if (res.length == 0) {\n delete hash[name];\n }\n };\n SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) {\n if (!panel.name) {\n panel.name = this.generateNewName(this.getAllPanels(false, true), \"panel\");\n }\n this.questionHashesPanelAdded(panel);\n this.updateVisibleIndexes();\n this.onPanelAdded.fire(this, {\n panel: panel,\n name: panel.name,\n index: index,\n parentPanel: parentPanel,\n rootPanel: rootPanel,\n });\n };\n SurveyModel.prototype.panelRemoved = function (panel) {\n this.updateVisibleIndexes();\n this.onPanelRemoved.fire(this, { panel: panel, name: panel.name });\n this.updateLazyRenderingRowsOnRemovingElements();\n };\n SurveyModel.prototype.validateQuestion = function (question) {\n if (this.onValidateQuestion.isEmpty)\n return null;\n var options = {\n name: question.name,\n question: question,\n value: question.value,\n error: null,\n };\n this.onValidateQuestion.fire(this, options);\n return options.error ? new _error__WEBPACK_IMPORTED_MODULE_10__[\"CustomError\"](options.error, this) : null;\n };\n SurveyModel.prototype.validatePanel = function (panel) {\n if (this.onValidatePanel.isEmpty)\n return null;\n var options = {\n name: panel.name,\n panel: panel,\n error: null,\n };\n this.onValidatePanel.fire(this, options);\n return options.error ? new _error__WEBPACK_IMPORTED_MODULE_10__[\"CustomError\"](options.error, this) : null;\n };\n SurveyModel.prototype.processHtml = function (html) {\n var options = { html: html };\n this.onProcessHtml.fire(this, options);\n return this.processText(options.html, true);\n };\n SurveyModel.prototype.processText = function (text, returnDisplayValue) {\n return this.processTextEx(text, returnDisplayValue, false).text;\n };\n SurveyModel.prototype.processTextEx = function (text, returnDisplayValue, doEncoding) {\n var res = {\n text: this.processTextCore(text, returnDisplayValue, doEncoding),\n hasAllValuesOnLastRun: true,\n };\n res.hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n return res;\n };\n SurveyModel.prototype.processTextCore = function (text, returnDisplayValue, doEncoding) {\n if (doEncoding === void 0) { doEncoding = false; }\n if (this.isDesignMode)\n return text;\n return this.textPreProcessor.process(text, returnDisplayValue, doEncoding);\n };\n SurveyModel.prototype.getSurveyMarkdownHtml = function (element, text, name) {\n var options = {\n element: element,\n text: text,\n name: name,\n html: null,\n };\n this.onTextMarkdown.fire(this, options);\n return options.html;\n };\n /**\n * Returns an amount of corrected quiz answers.\n */\n SurveyModel.prototype.getCorrectedAnswerCount = function () {\n return this.getCorrectedAnswerCountCore(true);\n };\n /**\n * Returns quiz question number. It may be different from `getQuizQuestions.length` because some widgets like matrix may have several questions.\n * @see getQuizQuestions\n */\n SurveyModel.prototype.getQuizQuestionCount = function () {\n var questions = this.getQuizQuestions();\n var res = 0;\n for (var i = 0; i < questions.length; i++) {\n res += questions[i].quizQuestionCount;\n }\n return res;\n };\n /**\n * Returns an amount of incorrect quiz answers.\n */\n SurveyModel.prototype.getInCorrectedAnswerCount = function () {\n return this.getCorrectedAnswerCountCore(false);\n };\n SurveyModel.prototype.getCorrectedAnswerCountCore = function (isCorrect) {\n var questions = this.getQuizQuestions();\n var counter = 0;\n var options = {\n question: null,\n result: false,\n correctAnswers: 0,\n incorrectAnswers: 0,\n };\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var quizQuestionCount = q.quizQuestionCount;\n options.question = q;\n options.correctAnswers = q.correctAnswerCount;\n options.incorrectAnswers = quizQuestionCount - options.correctAnswers;\n options.result = options.question.isAnswerCorrect();\n this.onIsAnswerCorrect.fire(this, options);\n if (isCorrect) {\n if (options.result || options.correctAnswers < quizQuestionCount) {\n var addCount = options.correctAnswers;\n if (addCount == 0 && options.result)\n addCount = 1;\n counter += addCount;\n }\n }\n else {\n if (!options.result || options.incorrectAnswers < quizQuestionCount) {\n counter += options.incorrectAnswers;\n }\n }\n }\n return counter;\n };\n SurveyModel.prototype.getCorrectedAnswers = function () {\n return this.getCorrectedAnswerCount();\n };\n SurveyModel.prototype.getInCorrectedAnswers = function () {\n return this.getInCorrectedAnswerCount();\n };\n Object.defineProperty(SurveyModel.prototype, \"showTimerPanel\", {\n /**\n * Gets or sets a timer panel position. The timer panel displays information about how much time an end user spends on a survey/page.\n *\n * The available options:\n * - `top` - display timer panel in the top.\n * - `bottom` - display timer panel in the bottom.\n * - `none` - do not display a timer panel.\n *\n * If the value is not equal to 'none', the survey calls the `startTimer()` method on survey rendering.\n * @see showTimerPanelMode\n * @see startTimer\n * @see stopTimer\n */\n get: function () {\n return this.getPropertyValue(\"showTimerPanel\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTimerPanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnTop\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnBottom\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"bottom\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showTimerPanelMode\", {\n /**\n * Gets or set a value that specifies whether the timer displays information for the page or for the entire survey.\n *\n * The available options:\n *\n * - `page` - show timer information for page\n * - `survey` - show timer information for survey\n *\n * Use the `onTimerPanelInfoText` event to change the default text.\n * @see showTimerPanel\n * @see onTimerPanelInfoText\n */\n get: function () {\n return this.getPropertyValue(\"showTimerPanelMode\", \"all\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTimerPanelMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"timerInfoText\", {\n get: function () {\n var options = { text: this.getTimerInfoText() };\n this.onTimerPanelInfoText.fire(this, options);\n var loc = new _localizablestring__WEBPACK_IMPORTED_MODULE_11__[\"LocalizableString\"](this, true);\n loc.text = options.text;\n return loc.textOrHtml;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getTimerInfoText = function () {\n var page = this.currentPage;\n if (!page)\n return \"\";\n var pageSpent = this.getDisplayTime(page.timeSpent);\n var surveySpent = this.getDisplayTime(this.timeSpent);\n var pageLimitSec = this.getPageMaxTimeToFinish(page);\n var pageLimit = this.getDisplayTime(pageLimitSec);\n var surveyLimit = this.getDisplayTime(this.maxTimeToFinish);\n if (this.showTimerPanelMode == \"page\")\n return this.getTimerInfoPageText(page, pageSpent, pageLimit);\n if (this.showTimerPanelMode == \"survey\")\n return this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n if (this.showTimerPanelMode == \"all\") {\n if (pageLimitSec <= 0 && this.maxTimeToFinish <= 0) {\n return this.getLocString(\"timerSpentAll\")[\"format\"](pageSpent, surveySpent);\n }\n if (pageLimitSec > 0 && this.maxTimeToFinish > 0) {\n return this.getLocString(\"timerLimitAll\")[\"format\"](pageSpent, pageLimit, surveySpent, surveyLimit);\n }\n var pageText = this.getTimerInfoPageText(page, pageSpent, pageLimit);\n var surveyText = this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n return pageText + \" \" + surveyText;\n }\n return \"\";\n };\n SurveyModel.prototype.getTimerInfoPageText = function (page, pageSpent, pageLimit) {\n return this.getPageMaxTimeToFinish(page) > 0\n ? this.getLocString(\"timerLimitPage\")[\"format\"](pageSpent, pageLimit)\n : this.getLocString(\"timerSpentPage\")[\"format\"](pageSpent, pageLimit);\n };\n SurveyModel.prototype.getTimerInfoSurveyText = function (surveySpent, surveyLimit) {\n return this.maxTimeToFinish > 0\n ? this.getLocString(\"timerLimitSurvey\")[\"format\"](surveySpent, surveyLimit)\n : this.getLocString(\"timerSpentSurvey\")[\"format\"](surveySpent, surveyLimit);\n };\n SurveyModel.prototype.getDisplayTime = function (val) {\n var min = Math.floor(val / 60);\n var sec = val % 60;\n var res = \"\";\n if (min > 0) {\n res += min + \" \" + this.getLocString(\"timerMin\");\n }\n if (res && sec == 0)\n return res;\n if (res)\n res += \" \";\n return res + sec + \" \" + this.getLocString(\"timerSec\");\n };\n /**\n * Starts a timer that will calculate how much time end-user spends on the survey or on pages.\n * @see stopTimer\n * @see timeSpent\n */\n SurveyModel.prototype.startTimer = function () {\n if (this.isTimerStarted || this.isDesignMode)\n return;\n var self = this;\n this.timerFunc = function () {\n self.doTimer();\n };\n this.isTimerStarted = true;\n _surveytimer__WEBPACK_IMPORTED_MODULE_13__[\"SurveyTimer\"].instance.start(this.timerFunc);\n };\n SurveyModel.prototype.startTimerFromUI = function () {\n if (this.showTimerPanel != \"none\" && this.state === \"running\") {\n this.startTimer();\n }\n };\n /**\n * Stops the timer.\n * @see startTimer\n * @see timeSpent\n */\n SurveyModel.prototype.stopTimer = function () {\n if (!this.isTimerStarted)\n return;\n this.isTimerStarted = false;\n _surveytimer__WEBPACK_IMPORTED_MODULE_13__[\"SurveyTimer\"].instance.stop(this.timerFunc);\n };\n Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinish\", {\n /**\n * Gets or sets the maximum time in seconds that end user has to complete a survey. If the value is 0 or less, an end user has no time limit to finish a survey.\n * @see startTimer\n * @see maxTimeToFinishPage\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinish\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinish\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinishPage\", {\n /**\n * Gets or sets the maximum time in seconds that end user has to complete a page in the survey. If the value is 0 or less, an end user has no time limit.\n *\n * You may override this value for every page.\n * @see startTimer\n * @see maxTimeToFinish\n * @see PageModel.maxTimeToFinish\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinishPage\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinishPage\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getPageMaxTimeToFinish = function (page) {\n if (!page || page.maxTimeToFinish < 0)\n return 0;\n return page.maxTimeToFinish > 0\n ? page.maxTimeToFinish\n : this.maxTimeToFinishPage;\n };\n SurveyModel.prototype.doTimer = function () {\n var page = this.currentPage;\n if (page) {\n page.timeSpent = page.timeSpent + 1;\n }\n this.timeSpent = this.timeSpent + 1;\n this.onTimer.fire(this, {});\n if (this.maxTimeToFinish > 0 && this.maxTimeToFinish == this.timeSpent) {\n this.completeLastPage();\n }\n if (page) {\n var pageLimit = this.getPageMaxTimeToFinish(page);\n if (pageLimit > 0 && pageLimit == page.timeSpent) {\n if (this.isLastPage) {\n this.completeLastPage();\n }\n else {\n this.nextPage();\n }\n }\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"inSurvey\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n //ISurveyImplementor\n SurveyModel.prototype.getSurveyData = function () {\n return this;\n };\n SurveyModel.prototype.getSurvey = function () {\n return this;\n };\n SurveyModel.prototype.getTextProcessor = function () {\n return this;\n };\n //ISurveyTriggerOwner\n SurveyModel.prototype.getObjects = function (pages, questions) {\n var result = [];\n Array.prototype.push.apply(result, this.getPagesByNames(pages));\n Array.prototype.push.apply(result, this.getQuestionsByNames(questions));\n return result;\n };\n SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) {\n if (!name)\n return;\n if (isVariable) {\n this.setVariable(name, value);\n }\n else {\n var question = this.getQuestionByName(name);\n if (!!question) {\n question.value = value;\n }\n else {\n var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"ProcessValue\"]();\n var firstName = processor.getFirstName(name);\n if (firstName == name) {\n this.setValue(name, value);\n }\n else {\n if (!this.getQuestionByName(firstName))\n return;\n var data = this.getUnbindValue(this.getFilteredValues());\n processor.setValue(data, name, value);\n this.setValue(firstName, data[firstName]);\n }\n }\n }\n };\n SurveyModel.prototype.copyTriggerValue = function (name, fromName) {\n if (!name || !fromName)\n return;\n var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_7__[\"ProcessValue\"]();\n var value = processor.getValue(fromName, this.getFilteredValues());\n this.setTriggerValue(name, value, false);\n };\n SurveyModel.prototype.focusQuestion = function (name) {\n var question = this.getQuestionByName(name, true);\n if (!question || !question.isVisible || !question.page)\n return false;\n this.isFocusingQuestion = true;\n this.currentPage = question.page;\n question.focus();\n this.isFocusingQuestion = false;\n return true;\n };\n SurveyModel.prototype.getElementWrapperComponentName = function (element, reason) {\n if (reason === \"logo-image\") {\n return \"sv-logo-image\";\n }\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getRowWrapperComponentName = function (row) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getElementWrapperComponentData = function (element, reason) {\n return element;\n };\n SurveyModel.prototype.getRowWrapperComponentData = function (row) {\n return row;\n };\n SurveyModel.prototype.getItemValueWrapperComponentName = function (item, question) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getItemValueWrapperComponentData = function (item, question) {\n return item;\n };\n SurveyModel.prototype.getMatrixCellTemplateData = function (cell) {\n return cell.question;\n };\n SurveyModel.prototype.searchText = function (text) {\n if (!!text)\n text = text.toLowerCase();\n var res = [];\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].searchText(text, res);\n }\n return res;\n };\n /**\n * Use this method to dispose survey model properly.\n */\n SurveyModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.editingObj = null;\n if (!this.pages)\n return;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].dispose();\n }\n this.pages.splice(0, this.pages.length);\n this.currentPage = null;\n };\n SurveyModel.TemplateRendererComponentName = \"sv-template-renderer\";\n SurveyModel.stylesManager = null;\n SurveyModel.platform = \"unknown\";\n return SurveyModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"survey\", [\n {\n name: \"locale\",\n choices: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].getLocales(true);\n },\n onGetValue: function (obj) {\n return obj.locale == _surveyStrings__WEBPACK_IMPORTED_MODULE_9__[\"surveyLocalization\"].defaultLocale ? null : obj.locale;\n },\n },\n { name: \"title\", serializationProperty: \"locTitle\", dependsOn: \"locale\" },\n {\n name: \"description:text\",\n serializationProperty: \"locDescription\",\n dependsOn: \"locale\",\n },\n { name: \"logo\", serializationProperty: \"locLogo\" },\n { name: \"logoWidth\", default: \"300px\", minValue: 0 },\n { name: \"logoHeight\", default: \"200px\", minValue: 0 },\n {\n name: \"logoFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n {\n name: \"logoPosition\",\n default: \"left\",\n choices: [\"none\", \"left\", \"right\", \"top\", \"bottom\"],\n },\n { name: \"focusFirstQuestionAutomatic:boolean\", default: true },\n { name: \"focusOnFirstError:boolean\", default: true },\n { name: \"completedHtml:html\", serializationProperty: \"locCompletedHtml\" },\n {\n name: \"completedBeforeHtml:html\",\n serializationProperty: \"locCompletedBeforeHtml\",\n },\n {\n name: \"completedHtmlOnCondition:htmlconditions\",\n className: \"htmlconditionitem\",\n },\n { name: \"loadingHtml:html\", serializationProperty: \"locLoadingHtml\" },\n { name: \"pages:surveypages\", className: \"page\" },\n {\n name: \"questions\",\n alternativeName: \"elements\",\n baseClassName: \"question\",\n visible: false,\n isLightSerializable: false,\n onGetValue: function (obj) {\n return null;\n },\n onSetValue: function (obj, value, jsonConverter) {\n var page = obj.addNewPage(\"\");\n jsonConverter.toObject({ questions: value }, page);\n },\n },\n {\n name: \"triggers:triggers\",\n baseClassName: \"surveytrigger\",\n classNamePart: \"trigger\",\n },\n {\n name: \"calculatedValues:calculatedvalues\",\n className: \"calculatedvalue\",\n },\n { name: \"surveyId\", visible: false },\n { name: \"surveyPostId\", visible: false },\n { name: \"surveyShowDataSaving:boolean\", visible: false },\n \"cookieName\",\n \"sendResultOnPageNext:boolean\",\n {\n name: \"showNavigationButtons\",\n default: \"bottom\",\n choices: [\"none\", \"top\", \"bottom\", \"both\"],\n },\n { name: \"showPrevButton:boolean\", default: true },\n { name: \"showTitle:boolean\", default: true },\n { name: \"showPageTitles:boolean\", default: true },\n { name: \"showCompletedPage:boolean\", default: true },\n \"navigateToUrl\",\n {\n name: \"navigateToUrlOnCondition:urlconditions\",\n className: \"urlconditionitem\",\n },\n {\n name: \"questionsOrder\",\n default: \"initial\",\n choices: [\"initial\", \"random\"],\n },\n \"showPageNumbers:boolean\",\n {\n name: \"showQuestionNumbers\",\n default: \"on\",\n choices: [\"on\", \"onPage\", \"off\"],\n },\n {\n name: \"questionTitleLocation\",\n default: \"top\",\n choices: [\"top\", \"bottom\", \"left\"],\n },\n {\n name: \"questionDescriptionLocation\",\n default: \"underTitle\",\n choices: [\"underInput\", \"underTitle\"],\n },\n { name: \"questionErrorLocation\", default: \"top\", choices: [\"top\", \"bottom\"] },\n {\n name: \"showProgressBar\",\n default: \"off\",\n choices: [\"off\", \"top\", \"bottom\", \"both\"],\n },\n {\n name: \"progressBarType\",\n default: \"pages\",\n choices: [\n \"pages\",\n \"questions\",\n \"requiredQuestions\",\n \"correctQuestions\",\n \"buttons\",\n ],\n },\n { name: \"mode\", default: \"edit\", choices: [\"edit\", \"display\"] },\n { name: \"storeOthersAsComment:boolean\", default: true },\n { name: \"maxTextLength:number\", default: 0, minValue: 0 },\n { name: \"maxOthersLength:number\", default: 0, minValue: 0 },\n \"goNextPageAutomatic:boolean\",\n {\n name: \"clearInvisibleValues\",\n default: \"onComplete\",\n choices: [\"none\", \"onComplete\", \"onHidden\", \"onHiddenContainer\"],\n },\n {\n name: \"checkErrorsMode\",\n default: \"onNextPage\",\n choices: [\"onNextPage\", \"onValueChanged\", \"onValueChanging\", \"onComplete\"],\n },\n {\n name: \"textUpdateMode\",\n default: \"onBlur\",\n choices: [\"onBlur\", \"onTyping\"],\n },\n { name: \"startSurveyText\", serializationProperty: \"locStartSurveyText\" },\n { name: \"pagePrevText\", serializationProperty: \"locPagePrevText\" },\n { name: \"pageNextText\", serializationProperty: \"locPageNextText\" },\n { name: \"completeText\", serializationProperty: \"locCompleteText\" },\n { name: \"previewText\", serializationProperty: \"locPreviewText\" },\n { name: \"editText\", serializationProperty: \"locEditText\" },\n { name: \"requiredText\", default: \"*\" },\n {\n name: \"questionStartIndex\",\n dependsOn: [\"showQuestionNumbers\"],\n visibleIf: function (survey) {\n return !survey || survey.showQuestionNumbers !== \"off\";\n },\n },\n {\n name: \"questionTitlePattern\",\n default: \"numTitleRequire\",\n dependsOn: [\"questionStartIndex\", \"requiredText\"],\n choices: function (obj) {\n if (!obj)\n return [];\n return obj.getQuestionTitlePatternOptions();\n },\n },\n {\n name: \"questionTitleTemplate\",\n visible: false,\n isSerializable: false,\n serializationProperty: \"locQuestionTitleTemplate\",\n },\n { name: \"firstPageIsStarted:boolean\", default: false },\n {\n name: \"isSinglePage:boolean\",\n default: false,\n visible: false,\n isSerializable: false,\n },\n {\n name: \"questionsOnPageMode\",\n default: \"standard\",\n choices: [\"singlePage\", \"standard\", \"questionPerPage\"],\n },\n {\n name: \"showPreviewBeforeComplete\",\n default: \"noPreview\",\n choices: [\"noPreview\", \"showAllQuestions\", \"showAnsweredQuestions\"],\n },\n { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 },\n { name: \"maxTimeToFinishPage:number\", default: 0, minValue: 0 },\n {\n name: \"showTimerPanel\",\n default: \"none\",\n choices: [\"none\", \"top\", \"bottom\"],\n },\n {\n name: \"showTimerPanelMode\",\n default: \"all\",\n choices: [\"all\", \"page\", \"survey\"],\n },\n]);\n\n\n/***/ }),\n\n/***/ \"./src/surveyProgressButtons.ts\":\n/*!**************************************!*\\\n !*** ./src/surveyProgressButtons.ts ***!\n \\**************************************/\n/*! exports provided: SurveyProgressButtonsModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return SurveyProgressButtonsModel; });\nvar SurveyProgressButtonsModel = /** @class */ (function () {\n function SurveyProgressButtonsModel(survey) {\n this.survey = survey;\n }\n SurveyProgressButtonsModel.prototype.isListElementClickable = function (index) {\n if (!this.survey.onServerValidateQuestions ||\n this.survey.onServerValidateQuestions.isEmpty ||\n this.survey.checkErrorsMode === \"onComplete\") {\n return true;\n }\n return index <= this.survey.currentPageNo + 1;\n };\n SurveyProgressButtonsModel.prototype.getListElementCss = function (index) {\n if (index >= this.survey.visiblePages.length)\n return;\n var elementCss = this.survey.visiblePages[index].passed ?\n this.survey.css.progressButtonsListElementPassed : \"\";\n if (this.survey.currentPageNo === index) {\n elementCss += elementCss !== \"\" ? \" \" : \"\";\n elementCss += this.survey.css.progressButtonsListElementCurrent;\n }\n if (!this.isListElementClickable(index)) {\n elementCss += elementCss !== \"\" ? \" \" : \"\";\n elementCss += this.survey.css.progressButtonsListElementNonClickable;\n }\n return elementCss;\n };\n SurveyProgressButtonsModel.prototype.clickListElement = function (index) {\n if (this.survey.isDesignMode)\n return;\n if (index < this.survey.currentPageNo) {\n this.survey.currentPageNo = index;\n }\n else if (index > this.survey.currentPageNo) {\n for (var i = this.survey.currentPageNo; i < index; i++) {\n if (!this.survey.nextPage())\n break;\n }\n }\n };\n return SurveyProgressButtonsModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/surveyStrings.ts\":\n/*!******************************!*\\\n !*** ./src/surveyStrings.ts ***!\n \\******************************/\n/*! exports provided: surveyLocalization, surveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return surveyLocalization; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return surveyStrings; });\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localization/english */ \"./src/localization/english.ts\");\n\nvar surveyLocalization = {\n currentLocaleValue: \"\",\n defaultLocaleValue: \"en\",\n locales: {},\n localeNames: {},\n supportedLocales: [],\n get currentLocale() {\n return this.currentLocaleValue === this.defaultLocaleValue\n ? \"\"\n : this.currentLocaleValue;\n },\n set currentLocale(val) {\n if (val === \"cz\")\n val = \"cs\";\n this.currentLocaleValue = val;\n },\n get defaultLocale() {\n return this.defaultLocaleValue;\n },\n set defaultLocale(val) {\n if (val === \"cz\")\n val = \"cs\";\n this.defaultLocaleValue = val;\n },\n getLocaleStrings: function (loc) {\n return this.locales[loc];\n },\n getCurrentStrings: function () {\n var loc = this.currentLocale\n ? this.locales[this.currentLocale]\n : this.locales[this.defaultLocale];\n if (!loc)\n loc = this.locales[this.defaultLocale];\n return loc;\n },\n getString: function (strName) {\n var loc = this.getCurrentStrings();\n if (!loc[strName])\n loc = this.locales[this.defaultLocale];\n var result = loc[strName];\n if (result === undefined) {\n result = this.locales[\"en\"][strName];\n }\n return result;\n },\n getLocales: function (removeDefaultLoc) {\n if (removeDefaultLoc === void 0) { removeDefaultLoc = false; }\n var res = [];\n res.push(\"\");\n var locs = this.locales;\n if (this.supportedLocales && this.supportedLocales.length > 0) {\n locs = {};\n for (var i = 0; i < this.supportedLocales.length; i++) {\n locs[this.supportedLocales[i]] = true;\n }\n }\n for (var key in locs) {\n if (removeDefaultLoc && key == this.defaultLocale)\n continue;\n res.push(key);\n }\n var locName = function (loc) {\n if (!loc)\n return \"\";\n var res = surveyLocalization.localeNames[loc];\n if (!res)\n res = loc;\n return res.toLowerCase();\n };\n res.sort(function (a, b) {\n var str1 = locName(a);\n var str2 = locName(b);\n if (str1 === str2)\n return 0;\n return str1 < str2 ? -1 : 1;\n });\n return res;\n },\n};\nvar surveyStrings = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.locales[\"en\"] = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.localeNames[\"en\"] = \"english\";\n\n\n/***/ }),\n\n/***/ \"./src/surveyWindow.ts\":\n/*!*****************************!*\\\n !*** ./src/surveyWindow.ts ***!\n \\*****************************/\n/*! exports provided: SurveyWindowModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return SurveyWindowModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey */ \"./src/survey.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A Model for a survey running in the Window.\n */\nvar SurveyWindowModel = /** @class */ (function (_super) {\n __extends(SurveyWindowModel, _super);\n function SurveyWindowModel(jsonObj, initialModel) {\n if (initialModel === void 0) { initialModel = null; }\n var _this = _super.call(this) || this;\n /**\n * Set this value to negative value, for example -1, to avoid closing the window on completing the survey. Leave it equals to 0 (default value) to close the window immediately, or set it to 3, 5, 10, ... to close the window in 3, 5, 10 seconds.\n */\n _this.closeOnCompleteTimeout = 0;\n if (initialModel) {\n _this.surveyValue = initialModel;\n }\n else {\n _this.surveyValue = _this.createSurvey(jsonObj);\n }\n _this.surveyValue.showTitle = false;\n if (\"undefined\" !== typeof document) {\n _this.windowElement = document.createElement(\"div\");\n }\n var self = _this;\n _this.survey.onComplete.add(function (survey, options) {\n self.onSurveyComplete();\n });\n return _this;\n }\n SurveyWindowModel.prototype.getType = function () {\n return \"window\";\n };\n Object.defineProperty(SurveyWindowModel.prototype, \"survey\", {\n /**\n * A survey object.\n * @see SurveyModel\n */\n get: function () {\n return this.surveyValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"isShowing\", {\n /**\n * Returns true if the window is currently showing. Set it to true to show the window and false to hide it.\n * @see show\n * @see hide\n */\n get: function () {\n return this.getPropertyValue(\"isShowing\", false);\n },\n set: function (val) {\n if (this.isShowing == val)\n return;\n this.setPropertyValue(\"isShowing\", val);\n if (this.showingChangedCallback)\n this.showingChangedCallback();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Show the window\n * @see hide\n * @see isShowing\n */\n SurveyWindowModel.prototype.show = function () {\n this.isShowing = true;\n };\n /**\n * Hide the window\n * @see show\n * @see isShowing\n */\n SurveyWindowModel.prototype.hide = function () {\n this.isShowing = false;\n };\n Object.defineProperty(SurveyWindowModel.prototype, \"isExpanded\", {\n /**\n * Returns true if the window is expanded. Set it to true to expand the window or false to collapse it.\n * @see expand\n * @see collapse\n */\n get: function () {\n return this.getPropertyValue(\"isExpanded\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isExpanded\", val);\n if (!this.isLoadingFromJson && this.expandedChangedCallback)\n this.expandedChangedCallback();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"title\", {\n /**\n * The window and survey title.\n */\n get: function () {\n return this.survey.title;\n },\n set: function (value) {\n this.survey.title = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"locTitle\", {\n get: function () {\n return this.survey.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Expand the window to show the survey.\n */\n SurveyWindowModel.prototype.expand = function () {\n this.expandcollapse(true);\n };\n /**\n * Collapse the window and show survey title only.\n */\n SurveyWindowModel.prototype.collapse = function () {\n this.expandcollapse(false);\n };\n SurveyWindowModel.prototype.createSurvey = function (jsonObj) {\n return new _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"](jsonObj);\n };\n SurveyWindowModel.prototype.expandcollapse = function (value) {\n this.isExpanded = value;\n };\n SurveyWindowModel.prototype.onSurveyComplete = function () {\n if (this.closeOnCompleteTimeout < 0)\n return;\n if (this.closeOnCompleteTimeout == 0) {\n this.closeWindowOnComplete();\n }\n else {\n var self = this;\n var timerId = null;\n var func = function () {\n self.closeWindowOnComplete();\n if (typeof window !== \"undefined\") {\n window.clearInterval(timerId);\n }\n };\n timerId =\n typeof window !== \"undefined\"\n ? window.setInterval(func, this.closeOnCompleteTimeout * 1000)\n : 0;\n }\n };\n SurveyWindowModel.prototype.closeWindowOnComplete = function () {\n if (!!this.closeWindowOnCompleteCallback) {\n this.closeWindowOnCompleteCallback();\n }\n };\n SurveyWindowModel.surveyElementName = \"windowSurveyJS\";\n return SurveyWindowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/surveytimer.ts\":\n/*!****************************!*\\\n !*** ./src/surveytimer.ts ***!\n \\****************************/\n/*! exports provided: surveyTimerFunctions, SurveyTimer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyTimerFunctions\", function() { return surveyTimerFunctions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return SurveyTimer; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n\nvar surveyTimerFunctions = {\n setTimeout: function (func) {\n if (typeof window === \"undefined\")\n return 0;\n return window.setTimeout(func, 1000);\n },\n clearTimeout: function (timerId) {\n if (typeof window === \"undefined\")\n return;\n window.clearTimeout(timerId);\n },\n};\nvar SurveyTimer = /** @class */ (function () {\n function SurveyTimer() {\n this.listenerCounter = 0;\n this.timerId = -1;\n this.onTimer = new _base__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]();\n }\n Object.defineProperty(SurveyTimer, \"instance\", {\n get: function () {\n if (!SurveyTimer.instanceValue) {\n SurveyTimer.instanceValue = new SurveyTimer();\n }\n return SurveyTimer.instanceValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTimer.prototype.start = function (func) {\n var _this = this;\n if (func === void 0) { func = null; }\n if (func) {\n this.onTimer.add(func);\n }\n if (this.timerId < 0) {\n this.timerId = surveyTimerFunctions.setTimeout(function () {\n _this.doTimer();\n });\n }\n this.listenerCounter++;\n };\n SurveyTimer.prototype.stop = function (func) {\n if (func === void 0) { func = null; }\n if (func) {\n this.onTimer.remove(func);\n }\n this.listenerCounter--;\n if (this.listenerCounter == 0 && this.timerId > -1) {\n surveyTimerFunctions.clearTimeout(this.timerId);\n this.timerId = -1;\n }\n };\n SurveyTimer.prototype.doTimer = function () {\n var _this = this;\n if (this.timerId < 0)\n return;\n this.onTimer.fire(this, {});\n this.timerId = surveyTimerFunctions.setTimeout(function () {\n _this.doTimer();\n });\n };\n SurveyTimer.instanceValue = null;\n return SurveyTimer;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/template-renderer.ts\":\n/*!**********************************!*\\\n !*** ./src/template-renderer.ts ***!\n \\**********************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n\n\n/***/ }),\n\n/***/ \"./src/textPreProcessor.ts\":\n/*!*********************************!*\\\n !*** ./src/textPreProcessor.ts ***!\n \\*********************************/\n/*! exports provided: TextPreProcessorItem, TextPreProcessorValue, TextPreProcessor, QuestionTextProcessor */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessorItem\", function() { return TextPreProcessorItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessorValue\", function() { return TextPreProcessorValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return TextPreProcessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextProcessor\", function() { return QuestionTextProcessor; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n\n\nvar TextPreProcessorItem = /** @class */ (function () {\n function TextPreProcessorItem() {\n }\n return TextPreProcessorItem;\n}());\n\nvar TextPreProcessorValue = /** @class */ (function () {\n function TextPreProcessorValue(name, returnDisplayValue) {\n this.name = name;\n this.returnDisplayValue = returnDisplayValue;\n this.isExists = false;\n this.canProcess = true;\n }\n return TextPreProcessorValue;\n}());\n\nvar TextPreProcessor = /** @class */ (function () {\n function TextPreProcessor() {\n }\n TextPreProcessor.prototype.process = function (text, returnDisplayValue, doEncoding) {\n if (returnDisplayValue === void 0) { returnDisplayValue = false; }\n if (doEncoding === void 0) { doEncoding = false; }\n this.hasAllValuesOnLastRunValue = true;\n if (!text)\n return text;\n if (!this.onProcess)\n return text;\n var items = this.getItems(text);\n for (var i = items.length - 1; i >= 0; i--) {\n var item = items[i];\n var name = this.getName(text.substring(item.start + 1, item.end));\n if (!name)\n continue;\n var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n this.onProcess(textValue);\n if (!textValue.isExists) {\n if (textValue.canProcess) {\n this.hasAllValuesOnLastRunValue = false;\n }\n continue;\n }\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(textValue.value)) {\n this.hasAllValuesOnLastRunValue = false;\n }\n var replacedValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(textValue.value)\n ? textValue.value\n : \"\";\n if (doEncoding) {\n replacedValue = encodeURIComponent(replacedValue);\n }\n text =\n text.substr(0, item.start) + replacedValue + text.substr(item.end + 1);\n }\n return text;\n };\n TextPreProcessor.prototype.processValue = function (name, returnDisplayValue) {\n var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n if (!!this.onProcess) {\n this.onProcess(textValue);\n }\n return textValue;\n };\n Object.defineProperty(TextPreProcessor.prototype, \"hasAllValuesOnLastRun\", {\n get: function () {\n return !!this.hasAllValuesOnLastRunValue;\n },\n enumerable: false,\n configurable: true\n });\n TextPreProcessor.prototype.getItems = function (text) {\n var items = [];\n var length = text.length;\n var start = -1;\n var ch = \"\";\n for (var i = 0; i < length; i++) {\n ch = text[i];\n if (ch == \"{\")\n start = i;\n if (ch == \"}\") {\n if (start > -1) {\n var item = new TextPreProcessorItem();\n item.start = start;\n item.end = i;\n items.push(item);\n }\n start = -1;\n }\n }\n return items;\n };\n TextPreProcessor.prototype.getName = function (name) {\n if (!name)\n return;\n return name.trim();\n };\n return TextPreProcessor;\n}());\n\nvar QuestionTextProcessor = /** @class */ (function () {\n function QuestionTextProcessor(variableName) {\n var _this = this;\n this.variableName = variableName;\n this.textPreProcessor = new TextPreProcessor();\n this.textPreProcessor.onProcess = function (textValue) {\n _this.getProcessedTextValue(textValue);\n };\n }\n QuestionTextProcessor.prototype.processValue = function (name, returnDisplayValue) {\n return this.textPreProcessor.processValue(name, returnDisplayValue);\n };\n Object.defineProperty(QuestionTextProcessor.prototype, \"survey\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextProcessor.prototype, \"panel\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextProcessor.prototype.getValues = function () {\n return !!this.panel ? this.panel.getValue() : null;\n };\n QuestionTextProcessor.prototype.getQuestionByName = function (name) {\n return !!this.panel\n ? this.panel.getQuestionByValueName(name)\n : null;\n };\n QuestionTextProcessor.prototype.onCustomProcessText = function (textValue) {\n return false;\n };\n //ITextProcessor\n QuestionTextProcessor.prototype.getProcessedTextValue = function (textValue) {\n if (!textValue)\n return;\n if (this.onCustomProcessText(textValue))\n return;\n var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n textValue.isExists = firstName == this.variableName;\n textValue.canProcess = textValue.isExists;\n if (!textValue.canProcess)\n return;\n //name should start with the variable name\n textValue.name = textValue.name.replace(this.variableName + \".\", \"\");\n var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n var question = this.getQuestionByName(firstName);\n var values = {};\n if (question) {\n values[firstName] = textValue.returnDisplayValue\n ? question.displayValue\n : question.value;\n }\n else {\n var allValues = !!this.panel ? this.getValues() : null;\n if (allValues) {\n values[firstName] = allValues[firstName];\n }\n }\n textValue.value = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getValue(textValue.name, values);\n };\n QuestionTextProcessor.prototype.processText = function (text, returnDisplayValue) {\n text = this.textPreProcessor.process(text, returnDisplayValue);\n var survey = this.survey;\n return survey ? survey.processText(text, returnDisplayValue) : text;\n };\n QuestionTextProcessor.prototype.processTextEx = function (text, returnDisplayValue) {\n text = this.processText(text, returnDisplayValue);\n var hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n var res = { hasAllValuesOnLastRun: true, text: text };\n if (this.survey) {\n res = this.survey.processTextEx(text, returnDisplayValue, false);\n }\n res.hasAllValuesOnLastRun =\n res.hasAllValuesOnLastRun && hasAllValuesOnLastRun;\n return res;\n };\n return QuestionTextProcessor;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/trigger.ts\":\n/*!************************!*\\\n !*** ./src/trigger.ts ***!\n \\************************/\n/*! exports provided: Trigger, SurveyTrigger, SurveyTriggerVisible, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerSkip, SurveyTriggerRunExpression, SurveyTriggerCopyValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return Trigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return SurveyTrigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return SurveyTriggerVisible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return SurveyTriggerComplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return SurveyTriggerSetValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSkip\", function() { return SurveyTriggerSkip; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return SurveyTriggerRunExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return SurveyTriggerCopyValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * A base class for all triggers.\n * A trigger calls a method when the expression change the result: from false to true or from true to false.\n * Please note, it runs only one changing the expression result.\n */\nvar Trigger = /** @class */ (function (_super) {\n __extends(Trigger, _super);\n function Trigger() {\n var _this = _super.call(this) || this;\n _this.usedNames = [];\n var self = _this;\n _this.registerFunctionOnPropertiesValueChanged([\"operator\", \"value\", \"name\"], function () {\n self.oldPropertiesChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"expression\", function () {\n self.onExpressionChanged();\n });\n return _this;\n }\n Object.defineProperty(Trigger, \"operators\", {\n get: function () {\n if (Trigger.operatorsValue != null)\n return Trigger.operatorsValue;\n Trigger.operatorsValue = {\n empty: function (value, expectedValue) {\n return !value;\n },\n notempty: function (value, expectedValue) {\n return !!value;\n },\n equal: function (value, expectedValue) {\n return value == expectedValue;\n },\n notequal: function (value, expectedValue) {\n return value != expectedValue;\n },\n contains: function (value, expectedValue) {\n return value && value[\"indexOf\"] && value.indexOf(expectedValue) > -1;\n },\n notcontains: function (value, expectedValue) {\n return (!value || !value[\"indexOf\"] || value.indexOf(expectedValue) == -1);\n },\n greater: function (value, expectedValue) {\n return value > expectedValue;\n },\n less: function (value, expectedValue) {\n return value < expectedValue;\n },\n greaterorequal: function (value, expectedValue) {\n return value >= expectedValue;\n },\n lessorequal: function (value, expectedValue) {\n return value <= expectedValue;\n },\n };\n return Trigger.operatorsValue;\n },\n enumerable: false,\n configurable: true\n });\n Trigger.prototype.getType = function () {\n return \"triggerbase\";\n };\n Trigger.prototype.toString = function () {\n var res = this.getType().replace(\"trigger\", \"\");\n var exp = !!this.expression ? this.expression : this.buildExpression();\n if (exp) {\n res += \", \" + exp;\n }\n return res;\n };\n Object.defineProperty(Trigger.prototype, \"operator\", {\n get: function () {\n return this.getPropertyValue(\"operator\", \"equal\");\n },\n set: function (value) {\n if (!value)\n return;\n value = value.toLowerCase();\n if (!Trigger.operators[value])\n return;\n this.setPropertyValue(\"operator\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"value\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"name\", {\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"name\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"expression\", {\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Trigger.prototype.checkExpression = function (keys, values, properties) {\n if (properties === void 0) { properties = null; }\n if (!this.isCheckRequired(keys))\n return;\n if (!!this.conditionRunner) {\n this.perform(values, properties);\n }\n };\n Trigger.prototype.check = function (value) {\n var triggerResult = Trigger.operators[this.operator](value, this.value);\n if (triggerResult) {\n this.onSuccess({}, null);\n }\n else {\n this.onFailure();\n }\n };\n Trigger.prototype.perform = function (values, properties) {\n var _this = this;\n this.conditionRunner.onRunComplete = function (res) {\n _this.triggerResult(res, values, properties);\n };\n this.conditionRunner.run(values, properties);\n };\n Trigger.prototype.triggerResult = function (res, values, properties) {\n if (res) {\n this.onSuccess(values, properties);\n }\n else {\n this.onFailure();\n }\n };\n Trigger.prototype.onSuccess = function (values, properties) { };\n Trigger.prototype.onFailure = function () { };\n Trigger.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.oldPropertiesChanged();\n };\n Trigger.prototype.oldPropertiesChanged = function () {\n this.onExpressionChanged();\n };\n Trigger.prototype.onExpressionChanged = function () {\n this.usedNames = [];\n this.hasFunction = false;\n this.conditionRunner = null;\n };\n Trigger.prototype.buildExpression = function () {\n if (!this.name)\n return \"\";\n if (this.isValueEmpty(this.value) && this.isRequireValue)\n return \"\";\n return (\"{\" +\n this.name +\n \"} \" +\n this.operator +\n \" \" +\n _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__[\"OperandMaker\"].toOperandString(this.value));\n };\n Trigger.prototype.isCheckRequired = function (keys) {\n if (!keys)\n return false;\n this.buildUsedNames();\n if (this.hasFunction === true)\n return true;\n var processValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__[\"ProcessValue\"]();\n for (var i = 0; i < this.usedNames.length; i++) {\n var name = this.usedNames[i];\n if (keys.hasOwnProperty(name))\n return true;\n var firstName = processValue.getFirstName(name);\n if (!keys.hasOwnProperty(firstName))\n continue;\n if (name == firstName)\n return true;\n var keyValue = keys[firstName];\n if (keyValue == undefined)\n continue;\n if (!keyValue.hasOwnProperty(\"oldValue\") ||\n !keyValue.hasOwnProperty(\"newValue\"))\n return true;\n var v = {};\n v[firstName] = keyValue[\"oldValue\"];\n var oldValue = processValue.getValue(name, v);\n v[firstName] = keyValue[\"newValue\"];\n var newValue = processValue.getValue(name, v);\n return !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(oldValue, newValue);\n }\n return false;\n };\n Trigger.prototype.buildUsedNames = function () {\n if (!!this.conditionRunner)\n return;\n var expression = this.expression;\n if (!expression) {\n expression = this.buildExpression();\n }\n if (!expression)\n return;\n this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](expression);\n this.hasFunction = this.conditionRunner.hasFunction();\n this.usedNames = this.conditionRunner.getVariables();\n };\n Object.defineProperty(Trigger.prototype, \"isRequireValue\", {\n get: function () {\n return this.operator !== \"empty\" && this.operator != \"notempty\";\n },\n enumerable: false,\n configurable: true\n });\n Trigger.operatorsValue = null;\n return Trigger;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n/**\n * It extends the Trigger base class and add properties required for SurveyJS classes.\n */\nvar SurveyTrigger = /** @class */ (function (_super) {\n __extends(SurveyTrigger, _super);\n function SurveyTrigger() {\n var _this = _super.call(this) || this;\n _this.ownerValue = null;\n return _this;\n }\n Object.defineProperty(SurveyTrigger.prototype, \"owner\", {\n get: function () {\n return this.ownerValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTrigger.prototype.setOwner = function (owner) {\n this.ownerValue = owner;\n };\n SurveyTrigger.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.owner && !!this.owner[\"getSurvey\"]\n ? this.owner.getSurvey()\n : null;\n };\n Object.defineProperty(SurveyTrigger.prototype, \"isOnNextPage\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n return SurveyTrigger;\n}(Trigger));\n\n/**\n * If expression returns true, it makes questions/pages visible.\n * Ohterwise it makes them invisible.\n */\nvar SurveyTriggerVisible = /** @class */ (function (_super) {\n __extends(SurveyTriggerVisible, _super);\n function SurveyTriggerVisible() {\n var _this = _super.call(this) || this;\n _this.pages = [];\n _this.questions = [];\n return _this;\n }\n SurveyTriggerVisible.prototype.getType = function () {\n return \"visibletrigger\";\n };\n SurveyTriggerVisible.prototype.onSuccess = function (values, properties) {\n this.onTrigger(this.onItemSuccess);\n };\n SurveyTriggerVisible.prototype.onFailure = function () {\n this.onTrigger(this.onItemFailure);\n };\n SurveyTriggerVisible.prototype.onTrigger = function (func) {\n if (!this.owner)\n return;\n var objects = this.owner.getObjects(this.pages, this.questions);\n for (var i = 0; i < objects.length; i++) {\n func(objects[i]);\n }\n };\n SurveyTriggerVisible.prototype.onItemSuccess = function (item) {\n item.visible = true;\n };\n SurveyTriggerVisible.prototype.onItemFailure = function (item) {\n item.visible = false;\n };\n return SurveyTriggerVisible;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, it completes the survey.\n */\nvar SurveyTriggerComplete = /** @class */ (function (_super) {\n __extends(SurveyTriggerComplete, _super);\n function SurveyTriggerComplete() {\n return _super.call(this) || this;\n }\n SurveyTriggerComplete.prototype.getType = function () {\n return \"completetrigger\";\n };\n Object.defineProperty(SurveyTriggerComplete.prototype, \"isOnNextPage\", {\n get: function () {\n return !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].executeCompleteTriggerOnValueChanged;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerComplete.prototype.onSuccess = function (values, properties) {\n if (this.owner)\n this.owner.setCompleted();\n };\n return SurveyTriggerComplete;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from property **setValue** will be set to **setToName**\n */\nvar SurveyTriggerSetValue = /** @class */ (function (_super) {\n __extends(SurveyTriggerSetValue, _super);\n function SurveyTriggerSetValue() {\n return _super.call(this) || this;\n }\n SurveyTriggerSetValue.prototype.getType = function () {\n return \"setvaluetrigger\";\n };\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"setValue\", {\n get: function () {\n return this.getPropertyValue(\"setValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"setValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"isVariable\", {\n get: function () {\n return this.getPropertyValue(\"isVariable\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isVariable\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerSetValue.prototype.onSuccess = function (values, properties) {\n if (!this.setToName || !this.owner)\n return;\n this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable);\n };\n return SurveyTriggerSetValue;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the survey go to question **gotoName** and focus it.\n */\nvar SurveyTriggerSkip = /** @class */ (function (_super) {\n __extends(SurveyTriggerSkip, _super);\n function SurveyTriggerSkip() {\n return _super.call(this) || this;\n }\n SurveyTriggerSkip.prototype.getType = function () {\n return \"skiptrigger\";\n };\n Object.defineProperty(SurveyTriggerSkip.prototype, \"gotoName\", {\n get: function () {\n return this.getPropertyValue(\"gotoName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"gotoName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSkip.prototype, \"isOnNextPage\", {\n get: function () {\n return !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].executeSkipTriggerOnValueChanged;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerSkip.prototype.onSuccess = function (values, properties) {\n if (!this.gotoName || !this.owner)\n return;\n this.owner.focusQuestion(this.gotoName);\n };\n return SurveyTriggerSkip;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the **runExpression** will be run. If **setToName** property is not empty then the result of **runExpression** will be set to it.\n */\nvar SurveyTriggerRunExpression = /** @class */ (function (_super) {\n __extends(SurveyTriggerRunExpression, _super);\n function SurveyTriggerRunExpression() {\n return _super.call(this) || this;\n }\n SurveyTriggerRunExpression.prototype.getType = function () {\n return \"runexpressiontrigger\";\n };\n Object.defineProperty(SurveyTriggerRunExpression.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerRunExpression.prototype, \"runExpression\", {\n get: function () {\n return this.getPropertyValue(\"runExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"runExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerRunExpression.prototype.onSuccess = function (values, properties) {\n var _this = this;\n if (!this.owner || !this.runExpression)\n return;\n var expression = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ExpressionRunner\"](this.runExpression);\n if (expression.canRun) {\n expression.onRunComplete = function (res) {\n _this.onCompleteRunExpression(res);\n };\n expression.run(values, properties);\n }\n };\n SurveyTriggerRunExpression.prototype.onCompleteRunExpression = function (newValue) {\n if (!!this.setToName && newValue !== undefined) {\n this.owner.setTriggerValue(this.setToName, newValue, false);\n }\n };\n return SurveyTriggerRunExpression;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from question **fromName** will be set into **setToName**.\n */\nvar SurveyTriggerCopyValue = /** @class */ (function (_super) {\n __extends(SurveyTriggerCopyValue, _super);\n function SurveyTriggerCopyValue() {\n return _super.call(this) || this;\n }\n Object.defineProperty(SurveyTriggerCopyValue.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerCopyValue.prototype, \"fromName\", {\n get: function () {\n return this.getPropertyValue(\"fromName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"fromName\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerCopyValue.prototype.getType = function () {\n return \"copyvaluetrigger\";\n };\n SurveyTriggerCopyValue.prototype.onSuccess = function (values, properties) {\n if (!this.setToName || !this.owner)\n return;\n this.owner.copyTriggerValue(this.setToName, this.fromName);\n };\n return SurveyTriggerCopyValue;\n}(SurveyTrigger));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"trigger\", [\n { name: \"operator\", default: \"equal\", visible: false },\n { name: \"value\", visible: false },\n \"expression:condition\",\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"surveytrigger\", [{ name: \"name\", visible: false }], null, \"trigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"visibletrigger\", [\"pages:pages\", \"questions:questions\"], function () {\n return new SurveyTriggerVisible();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"completetrigger\", [], function () {\n return new SurveyTriggerComplete();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"setvaluetrigger\", [\n { name: \"!setToName:questionvalue\" },\n {\n name: \"setValue:triggervalue\",\n dependsOn: \"setToName\",\n visibleIf: function (obj) {\n return !!obj && !!obj[\"setToName\"];\n },\n },\n { name: \"isVariable:boolean\", visible: false },\n], function () {\n return new SurveyTriggerSetValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"copyvaluetrigger\", [{ name: \"!setToName:questionvalue\" }, { name: \"!fromName:questionvalue\" }], function () {\n return new SurveyTriggerCopyValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"skiptrigger\", [{ name: \"!gotoName:question\" }], function () {\n return new SurveyTriggerSkip();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"runexpressiontrigger\", [{ name: \"setToName:questionvalue\" }, \"runExpression:expression\"], function () {\n return new SurveyTriggerRunExpression();\n}, \"surveytrigger\");\n\n\n/***/ }),\n\n/***/ \"./src/utils/is-mobile.ts\":\n/*!********************************!*\\\n !*** ./src/utils/is-mobile.ts ***!\n \\********************************/\n/*! exports provided: IsMobile */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return IsMobile; });\nvar _isMobile = false;\nvar vendor = null;\nif (typeof navigator !== \"undefined\" &&\n typeof window !== \"undefined\" &&\n navigator &&\n window) {\n vendor = navigator.userAgent || navigator.vendor || window.opera;\n}\n(function (a) {\n if (!a)\n return;\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)))\n _isMobile = true;\n})(vendor);\nvar IsMobile = _isMobile;\n\n\n/***/ }),\n\n/***/ \"./src/utils/popup.ts\":\n/*!****************************!*\\\n !*** ./src/utils/popup.ts ***!\n \\****************************/\n/*! exports provided: PopupUtils */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupUtils\", function() { return PopupUtils; });\nvar PopupUtils = /** @class */ (function () {\n function PopupUtils() {\n }\n PopupUtils.calculatePosition = function (targetRect, height, width, verticalPosition, horizontalPosition, showPointer) {\n if (horizontalPosition == \"center\")\n var left = (targetRect.left + targetRect.right - width) / 2;\n else if (horizontalPosition == \"left\")\n left = targetRect.left - width;\n else\n left = targetRect.right;\n if (verticalPosition == \"middle\")\n var top = (targetRect.top + targetRect.bottom - height) / 2;\n else if (verticalPosition == \"top\")\n top = targetRect.top - height;\n else\n top = targetRect.bottom;\n if (showPointer) {\n if (horizontalPosition != \"center\" && verticalPosition != \"middle\") {\n if (verticalPosition == \"top\") {\n top = top + targetRect.height;\n }\n else {\n top = top - targetRect.height;\n }\n }\n }\n return { left: Math.round(left), top: Math.round(top) };\n };\n PopupUtils.updateVerticalDimensions = function (top, height, windowHeight) {\n var result;\n if (top < 0) {\n result = { height: height + top, top: 0 };\n }\n else if (height + top > windowHeight) {\n result = { height: windowHeight - top, top: top };\n }\n return result;\n };\n PopupUtils.updateVerticalPosition = function (targetRect, height, verticalPosition, showPointer, windowHeight) {\n var deltaTop = height - (targetRect.top + (showPointer ? targetRect.height : 0));\n var deltaBottom = height +\n targetRect.bottom -\n (showPointer ? targetRect.height : 0) -\n windowHeight;\n if (deltaTop > 0 && deltaBottom <= 0 && verticalPosition == \"top\") {\n verticalPosition = \"bottom\";\n }\n else if (deltaBottom > 0 &&\n deltaTop <= 0 &&\n verticalPosition == \"bottom\") {\n verticalPosition = \"top\";\n }\n else if (deltaBottom > 0 && deltaTop > 0) {\n verticalPosition = deltaTop < deltaBottom ? \"top\" : \"bottom\";\n }\n return verticalPosition;\n };\n PopupUtils.calculatePopupDirection = function (verticalPosition, horizontalPosition) {\n var popupDirection;\n if (horizontalPosition == \"center\" && verticalPosition != \"middle\") {\n popupDirection = verticalPosition;\n }\n else if (horizontalPosition != \"center\") {\n popupDirection = horizontalPosition;\n }\n return popupDirection;\n };\n //called when showPointer is true\n PopupUtils.calculatePointerTarget = function (targetRect, top, left, verticalPosition, horizontalPosition) {\n var targetPos = {};\n if (horizontalPosition != \"center\") {\n targetPos.top = targetRect.top + targetRect.height / 2;\n targetPos.left = targetRect[horizontalPosition];\n }\n else if (verticalPosition != \"middle\") {\n targetPos.top = targetRect[verticalPosition];\n targetPos.left = targetRect.left + targetRect.width / 2;\n }\n targetPos.left = Math.round(targetPos.left - left);\n targetPos.top = Math.round(targetPos.top - top);\n return targetPos;\n };\n return PopupUtils;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/responsivity-manager.ts\":\n/*!*******************************************!*\\\n !*** ./src/utils/responsivity-manager.ts ***!\n \\*******************************************/\n/*! exports provided: ResponsivityManager, VerticalResponsivityManager */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return ResponsivityManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return VerticalResponsivityManager; });\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar ResponsivityManager = /** @class */ (function () {\n function ResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n var _this = this;\n if (dotsItemSize === void 0) { dotsItemSize = 48; }\n this.container = container;\n this.model = model;\n this.itemsSelector = itemsSelector;\n this.dotsItemSize = dotsItemSize;\n this.resizeObserver = undefined;\n this.isInilized = false;\n this.minDimensionConst = 56;\n this.separatorSize = 17;\n this.getComputedStyle = window.getComputedStyle.bind(window);\n this.resizeObserver = new ResizeObserver(function (_) { return _this.process(); });\n this.resizeObserver.observe(this.container.parentElement);\n }\n Object.defineProperty(ResponsivityManager.prototype, \"items\", {\n get: function () {\n return this.model.actions.filter(function (item) { return item.visible !== false; });\n },\n enumerable: false,\n configurable: true\n });\n ResponsivityManager.prototype.getDimensions = function (element) {\n return {\n scroll: element.scrollWidth,\n offset: element.offsetWidth,\n };\n };\n ResponsivityManager.prototype.getAvailableSpace = function () {\n var style = this.getComputedStyle(this.container);\n var space = this.container.offsetWidth;\n if (style.boxSizing === \"border-box\") {\n space -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n }\n return space;\n };\n ResponsivityManager.prototype.calcItemSize = function (item) {\n return item.offsetWidth;\n };\n ResponsivityManager.prototype.calcItemsSizes = function () {\n var _this = this;\n var actions = this.model.actions;\n this.container\n .querySelectorAll(this.itemsSelector)\n .forEach(function (item, index) {\n var currentAction = actions[index];\n currentAction.maxDimension = _this.calcItemSize(item);\n currentAction.minDimension = currentAction.canShrink\n ? _this.minDimensionConst +\n (currentAction.needSeparator ? _this.separatorSize : 0)\n : currentAction.maxDimension;\n });\n };\n ResponsivityManager.prototype.getVisibleItemsCount = function (size) {\n var itemsSizes = this.items.map(function (item) { return item.minDimension; });\n var currSize = 0;\n for (var i = 0; i < itemsSizes.length; i++) {\n currSize += itemsSizes[i];\n if (currSize > size)\n return i;\n }\n return i;\n };\n ResponsivityManager.prototype.updateItemMode = function (dimension, minSize, maxSize) {\n var items = this.items;\n for (var index = items.length - 1; index >= 0; index--) {\n if (minSize <= dimension && dimension < maxSize) {\n maxSize -= items[index].maxDimension - items[index].minDimension;\n items[index].mode = \"small\";\n }\n else {\n items[index].mode = \"large\";\n }\n }\n };\n ResponsivityManager.prototype.fit = function (dimension) {\n if (dimension <= 0)\n return;\n this.model.removeDotsButton();\n var minSize = 0;\n var maxSize = 0;\n var items = this.items;\n items.forEach(function (item) {\n minSize += item.minDimension;\n maxSize += item.maxDimension;\n });\n if (dimension >= maxSize) {\n items.forEach(function (item) { return (item.mode = \"large\"); });\n }\n else if (dimension < minSize) {\n items.forEach(function (item) { return (item.mode = \"small\"); });\n this.model.showFirstN(this.getVisibleItemsCount(dimension - this.dotsItemSize));\n }\n else {\n this.updateItemMode(dimension, minSize, maxSize);\n }\n };\n ResponsivityManager.prototype.process = function () {\n if (!this.isInilized) {\n this.calcItemsSizes();\n this.isInilized = true;\n }\n this.fit(this.getAvailableSpace());\n };\n ResponsivityManager.prototype.dispose = function () {\n this.resizeObserver.disconnect();\n };\n return ResponsivityManager;\n}());\n\nvar VerticalResponsivityManager = /** @class */ (function (_super) {\n __extends(VerticalResponsivityManager, _super);\n function VerticalResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n var _this = _super.call(this, container, model, itemsSelector, dotsItemSize) || this;\n _this.minDimensionConst = 40;\n return _this;\n }\n VerticalResponsivityManager.prototype.getDimensions = function () {\n return {\n scroll: this.container.scrollHeight,\n offset: this.container.offsetHeight,\n };\n };\n VerticalResponsivityManager.prototype.getAvailableSpace = function () {\n var style = this.getComputedStyle(this.container);\n var space = this.container.offsetHeight;\n if (style.boxSizing === \"border-box\") {\n space -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n }\n return space;\n };\n VerticalResponsivityManager.prototype.calcItemSize = function (item) {\n return item.offsetHeight;\n };\n return VerticalResponsivityManager;\n}(ResponsivityManager));\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/utils.ts\":\n/*!****************************!*\\\n !*** ./src/utils/utils.ts ***!\n \\****************************/\n/*! exports provided: unwrap, getSize, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, scrollElementByChildId, createSvg, doKey2Click, getIconNameFromProxy */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return unwrap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSize\", function() { return getSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"compareVersions\", function() { return compareVersions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return confirmAction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return detectIEOrEdge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectIEBrowser\", function() { return detectIEBrowser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return loadFileFromBase64; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isMobile\", function() { return isMobile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isElementVisible\", function() { return isElementVisible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"findScrollableParent\", function() { return findScrollableParent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scrollElementByChildId\", function() { return scrollElementByChildId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return createSvg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doKey2Click\", function() { return doKey2Click; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getIconNameFromProxy\", function() { return getIconNameFromProxy; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../settings */ \"./src/settings.ts\");\n\nfunction compareVersions(a, b) {\n var regExStrip0 = /(\\.0+)+$/;\n var segmentsA = a.replace(regExStrip0, \"\").split(\".\");\n var segmentsB = b.replace(regExStrip0, \"\").split(\".\");\n var len = Math.min(segmentsA.length, segmentsB.length);\n for (var i = 0; i < len; i++) {\n var diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10);\n if (diff) {\n return diff;\n }\n }\n return segmentsA.length - segmentsB.length;\n}\nfunction confirmAction(message) {\n if (!!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"] && !!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc)\n return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc(message);\n return confirm(message);\n}\nfunction detectIEBrowser() {\n if (typeof window === \"undefined\")\n return false;\n var ua = window.navigator.userAgent;\n var oldIe = ua.indexOf(\"MSIE \");\n var elevenIe = ua.indexOf(\"Trident/\");\n return oldIe > -1 || elevenIe > -1;\n}\nfunction detectIEOrEdge() {\n if (typeof window === \"undefined\")\n return false;\n if (typeof detectIEOrEdge.isIEOrEdge === \"undefined\") {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf(\"MSIE \");\n var trident = ua.indexOf(\"Trident/\");\n var edge = ua.indexOf(\"Edge/\");\n detectIEOrEdge.isIEOrEdge = edge > 0 || trident > 0 || msie > 0;\n }\n return detectIEOrEdge.isIEOrEdge;\n}\nfunction loadFileFromBase64(b64Data, fileName) {\n try {\n var byteString = atob(b64Data.split(\",\")[1]);\n // separate out the mime component\n var mimeString = b64Data\n .split(\",\")[0]\n .split(\":\")[1]\n .split(\";\")[0];\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n var ia = new Uint8Array(ab);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n // write the ArrayBuffer to a blob, and you're done\n var bb = new Blob([ab], { type: mimeString });\n if (typeof window !== \"undefined\" &&\n window.navigator &&\n window.navigator.msSaveBlob) {\n window.navigator.msSaveOrOpenBlob(bb, fileName);\n }\n }\n catch (err) { }\n}\nfunction isMobile() {\n return (typeof window !== \"undefined\" && typeof window.orientation !== \"undefined\");\n}\nfunction isElementVisible(element, threshold) {\n if (threshold === void 0) { threshold = 0; }\n if (typeof document === \"undefined\") {\n return false;\n }\n var elementRect = element.getBoundingClientRect();\n var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n var topWin = -threshold;\n var bottomWin = viewHeight + threshold;\n var topEl = elementRect.top;\n var bottomEl = elementRect.bottom;\n var maxTop = Math.max(topWin, topEl);\n var minBottom = Math.min(bottomWin, bottomEl);\n return maxTop <= minBottom;\n}\nfunction findScrollableParent(element) {\n if (!element) {\n return document.documentElement;\n }\n if (element.scrollHeight > element.clientHeight &&\n (getComputedStyle(element).overflowY === \"scroll\" ||\n getComputedStyle(element).overflowY === \"auto\")) {\n return element;\n }\n else {\n return findScrollableParent(element.parentElement);\n }\n}\nfunction scrollElementByChildId(id) {\n if (!document)\n return;\n var el = document.getElementById(id);\n if (!el)\n return;\n var scrollableEl = findScrollableParent(el);\n if (!!scrollableEl) {\n scrollableEl.dispatchEvent(new CustomEvent(\"scroll\"));\n }\n}\nfunction getIconNameFromProxy(iconName) {\n if (!iconName)\n return iconName;\n var proxyName = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].customIcons[iconName];\n return !!proxyName ? proxyName : iconName;\n}\nfunction createSvg(size, width, height, iconName, svgElem) {\n svgElem.style.width = (size || width || 16) + \"px\";\n svgElem.style.height = (size || height || 16) + \"px\";\n var node = svgElem.childNodes[0];\n var realIconName = getIconNameFromProxy(iconName);\n node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + realIconName);\n}\nfunction unwrap(value) {\n if (typeof value !== \"function\") {\n return value;\n }\n else {\n return value();\n }\n}\nfunction getSize(value) {\n if (typeof value === \"number\") {\n return \"\" + value + \"px\";\n }\n if (!!value && typeof value === \"string\" && value.length > 0) {\n var lastSymbol = value[value.length - 1];\n if ((lastSymbol >= \"0\" && lastSymbol <= \"9\") || lastSymbol == \".\") {\n try {\n var num = parseFloat(value);\n return \"\" + num + \"px\";\n }\n catch (_a) { }\n }\n }\n return value;\n}\nfunction doKey2Click(ev) {\n var el = ev.target;\n if (!el)\n return;\n var char = ev.which || ev.keyCode;\n if (char === 13 || char === 32) {\n if (el.click)\n el.click();\n }\n else if (char === 27) {\n if (el.blur)\n el.blur();\n }\n}\n\n\n\n/***/ }),\n\n/***/ \"./src/validator.ts\":\n/*!**************************!*\\\n !*** ./src/validator.ts ***!\n \\**************************/\n/*! exports provided: ValidatorResult, SurveyValidator, ValidatorRunner, NumericValidator, TextValidator, AnswerCountValidator, RegexValidator, EmailValidator, ExpressionValidator */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return ValidatorResult; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return SurveyValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return ValidatorRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return NumericValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return TextValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return AnswerCountValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return RegexValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return EmailValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return ExpressionValidator; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\nvar ValidatorResult = /** @class */ (function () {\n function ValidatorResult(value, error) {\n if (error === void 0) { error = null; }\n this.value = value;\n this.error = error;\n }\n return ValidatorResult;\n}());\n\n/**\n * Base SurveyJS validator class.\n */\nvar SurveyValidator = /** @class */ (function (_super) {\n __extends(SurveyValidator, _super);\n function SurveyValidator() {\n var _this = _super.call(this) || this;\n _this.createLocalizableString(\"text\", _this, true);\n return _this;\n }\n SurveyValidator.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.errorOwner && !!this.errorOwner[\"getSurvey\"]\n ? this.errorOwner.getSurvey()\n : null;\n };\n Object.defineProperty(SurveyValidator.prototype, \"text\", {\n get: function () {\n return this.getLocalizableStringText(\"text\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"text\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isValidateAllValues\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"locText\", {\n get: function () {\n return this.getLocalizableString(\"text\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyValidator.prototype.getErrorText = function (name) {\n if (this.text)\n return this.text;\n return this.getDefaultErrorText(name);\n };\n SurveyValidator.prototype.getDefaultErrorText = function (name) {\n return \"\";\n };\n SurveyValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n return null;\n };\n Object.defineProperty(SurveyValidator.prototype, \"isRunning\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isAsync\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n SurveyValidator.prototype.getLocale = function () {\n return !!this.errorOwner ? this.errorOwner.getLocale() : \"\";\n };\n SurveyValidator.prototype.getMarkdownHtml = function (text, name) {\n return !!this.errorOwner\n ? this.errorOwner.getMarkdownHtml(text, name)\n : null;\n };\n SurveyValidator.prototype.getRenderer = function (name) {\n return !!this.errorOwner ? this.errorOwner.getRenderer(name) : null;\n };\n SurveyValidator.prototype.getProcessedText = function (text) {\n return !!this.errorOwner ? this.errorOwner.getProcessedText(text) : text;\n };\n SurveyValidator.prototype.createCustomError = function (name) {\n return new _error__WEBPACK_IMPORTED_MODULE_1__[\"CustomError\"](this.getErrorText(name), this.errorOwner);\n };\n SurveyValidator.prototype.toString = function () {\n var res = this.getType().replace(\"validator\", \"\");\n if (!!this.text) {\n res += \", \" + this.text;\n }\n return res;\n };\n return SurveyValidator;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar ValidatorRunner = /** @class */ (function () {\n function ValidatorRunner() {\n }\n ValidatorRunner.prototype.run = function (owner) {\n var _this = this;\n var res = [];\n var values = null;\n var properties = null;\n this.prepareAsyncValidators();\n var asyncResults = [];\n var validators = owner.getValidators();\n for (var i = 0; i < validators.length; i++) {\n var validator = validators[i];\n if (!values && validator.isValidateAllValues) {\n values = owner.getDataFilteredValues();\n properties = owner.getDataFilteredProperties();\n }\n if (validator.isAsync) {\n this.asyncValidators.push(validator);\n validator.onAsyncCompleted = function (result) {\n if (!!result && !!result.error)\n asyncResults.push(result.error);\n if (!_this.onAsyncCompleted)\n return;\n for (var i = 0; i < _this.asyncValidators.length; i++) {\n if (_this.asyncValidators[i].isRunning)\n return;\n }\n _this.onAsyncCompleted(asyncResults);\n };\n }\n }\n validators = owner.getValidators();\n for (var i = 0; i < validators.length; i++) {\n var validator = validators[i];\n var validatorResult = validator.validate(owner.validatedValue, owner.getValidatorTitle(), values, properties);\n if (!!validatorResult && !!validatorResult.error) {\n res.push(validatorResult.error);\n }\n }\n if (this.asyncValidators.length == 0 && !!this.onAsyncCompleted)\n this.onAsyncCompleted([]);\n return res;\n };\n ValidatorRunner.prototype.prepareAsyncValidators = function () {\n if (!!this.asyncValidators) {\n for (var i = 0; i < this.asyncValidators.length; i++) {\n this.asyncValidators[i].onAsyncCompleted = null;\n }\n }\n this.asyncValidators = [];\n };\n return ValidatorRunner;\n}());\n\n/**\n * Validate numeric values.\n */\nvar NumericValidator = /** @class */ (function (_super) {\n __extends(NumericValidator, _super);\n function NumericValidator(minValue, maxValue) {\n if (minValue === void 0) { minValue = null; }\n if (maxValue === void 0) { maxValue = null; }\n var _this = _super.call(this) || this;\n _this.minValue = minValue;\n _this.maxValue = maxValue;\n return _this;\n }\n NumericValidator.prototype.getType = function () {\n return \"numericvalidator\";\n };\n NumericValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (this.isValueEmpty(value))\n return null;\n if (!_helpers__WEBPACK_IMPORTED_MODULE_5__[\"Helpers\"].isNumber(value)) {\n return new ValidatorResult(null, new _error__WEBPACK_IMPORTED_MODULE_1__[\"RequreNumericError\"](null, this.errorOwner));\n }\n var result = new ValidatorResult(parseFloat(value));\n if (this.minValue !== null && this.minValue > result.value) {\n result.error = this.createCustomError(name);\n return result;\n }\n if (this.maxValue !== null && this.maxValue < result.value) {\n result.error = this.createCustomError(name);\n return result;\n }\n return typeof value === \"number\" ? null : result;\n };\n NumericValidator.prototype.getDefaultErrorText = function (name) {\n var vName = name ? name : _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"value\");\n if (this.minValue !== null && this.maxValue !== null) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMinMax\")[\"format\"](vName, this.minValue, this.maxValue);\n }\n else {\n if (this.minValue !== null) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMin\")[\"format\"](vName, this.minValue);\n }\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMax\")[\"format\"](vName, this.maxValue);\n }\n };\n Object.defineProperty(NumericValidator.prototype, \"minValue\", {\n /**\n * The minValue property.\n */\n get: function () {\n return this.getPropertyValue(\"minValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"minValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NumericValidator.prototype, \"maxValue\", {\n /**\n * The maxValue property.\n */\n get: function () {\n return this.getPropertyValue(\"maxValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n return NumericValidator;\n}(SurveyValidator));\n\n/**\n * Validate text values.\n */\nvar TextValidator = /** @class */ (function (_super) {\n __extends(TextValidator, _super);\n function TextValidator(minLength, maxLength, allowDigits) {\n if (minLength === void 0) { minLength = 0; }\n if (maxLength === void 0) { maxLength = 0; }\n if (allowDigits === void 0) { allowDigits = true; }\n var _this = _super.call(this) || this;\n _this.minLength = minLength;\n _this.maxLength = maxLength;\n _this.allowDigits = allowDigits;\n return _this;\n }\n TextValidator.prototype.getType = function () {\n return \"textvalidator\";\n };\n TextValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (this.isValueEmpty(value))\n return null;\n if (!this.allowDigits) {\n var reg = /^[A-Za-z\\s]*$/;\n if (!reg.test(value)) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n }\n if (this.minLength > 0 && value.length < this.minLength) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n if (this.maxLength > 0 && value.length > this.maxLength) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n return null;\n };\n TextValidator.prototype.getDefaultErrorText = function (name) {\n if (this.minLength > 0 && this.maxLength > 0)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMinMaxLength\")[\"format\"](this.minLength, this.maxLength);\n if (this.minLength > 0)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMinLength\")[\"format\"](this.minLength);\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMaxLength\")[\"format\"](this.maxLength);\n };\n Object.defineProperty(TextValidator.prototype, \"minLength\", {\n /**\n * The minLength property.\n */\n get: function () {\n return this.getPropertyValue(\"minLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"minLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TextValidator.prototype, \"maxLength\", {\n /**\n * The maxLength property.\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TextValidator.prototype, \"allowDigits\", {\n /**\n * The allowDigits property.\n */\n get: function () {\n return this.getPropertyValue(\"allowDigits\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n return TextValidator;\n}(SurveyValidator));\n\nvar AnswerCountValidator = /** @class */ (function (_super) {\n __extends(AnswerCountValidator, _super);\n function AnswerCountValidator(minCount, maxCount) {\n if (minCount === void 0) { minCount = null; }\n if (maxCount === void 0) { maxCount = null; }\n var _this = _super.call(this) || this;\n _this.minCount = minCount;\n _this.maxCount = maxCount;\n return _this;\n }\n AnswerCountValidator.prototype.getType = function () {\n return \"answercountvalidator\";\n };\n AnswerCountValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (value == null || value.constructor != Array)\n return null;\n var count = value.length;\n if (count == 0)\n return null;\n if (this.minCount && count < this.minCount) {\n return new ValidatorResult(null, this.createCustomError(_surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"minSelectError\")[\"format\"](this.minCount)));\n }\n if (this.maxCount && count > this.maxCount) {\n return new ValidatorResult(null, this.createCustomError(_surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"maxSelectError\")[\"format\"](this.maxCount)));\n }\n return null;\n };\n AnswerCountValidator.prototype.getDefaultErrorText = function (name) {\n return name;\n };\n Object.defineProperty(AnswerCountValidator.prototype, \"minCount\", {\n /**\n * The minCount property.\n */\n get: function () {\n return this.getPropertyValue(\"minCount\");\n },\n set: function (val) {\n this.setPropertyValue(\"minCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AnswerCountValidator.prototype, \"maxCount\", {\n /**\n * The maxCount property.\n */\n get: function () {\n return this.getPropertyValue(\"maxCount\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n return AnswerCountValidator;\n}(SurveyValidator));\n\n/**\n * Use it to validate the text by regular expressions.\n */\nvar RegexValidator = /** @class */ (function (_super) {\n __extends(RegexValidator, _super);\n function RegexValidator(regex) {\n if (regex === void 0) { regex = null; }\n var _this = _super.call(this) || this;\n _this.regex = regex;\n return _this;\n }\n RegexValidator.prototype.getType = function () {\n return \"regexvalidator\";\n };\n RegexValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!this.regex || this.isValueEmpty(value))\n return null;\n var re = new RegExp(this.regex);\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n var res = this.hasError(re, value[i], name);\n if (res)\n return res;\n }\n }\n return this.hasError(re, value, name);\n };\n RegexValidator.prototype.hasError = function (re, value, name) {\n if (re.test(value))\n return null;\n return new ValidatorResult(value, this.createCustomError(name));\n };\n Object.defineProperty(RegexValidator.prototype, \"regex\", {\n /**\n * The regex property.\n */\n get: function () {\n return this.getPropertyValue(\"regex\");\n },\n set: function (val) {\n this.setPropertyValue(\"regex\", val);\n },\n enumerable: false,\n configurable: true\n });\n return RegexValidator;\n}(SurveyValidator));\n\n/**\n * Validate e-mail address in the text input\n */\nvar EmailValidator = /** @class */ (function (_super) {\n __extends(EmailValidator, _super);\n function EmailValidator() {\n var _this = _super.call(this) || this;\n _this.re = /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()=[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()=[\\]\\.,;:\\s@\\\"]{2,})$/i;\n return _this;\n }\n EmailValidator.prototype.getType = function () {\n return \"emailvalidator\";\n };\n EmailValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!value)\n return null;\n if (this.re.test(value))\n return null;\n return new ValidatorResult(value, this.createCustomError(name));\n };\n EmailValidator.prototype.getDefaultErrorText = function (name) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"invalidEmail\");\n };\n return EmailValidator;\n}(SurveyValidator));\n\n/**\n * Show error if expression returns false\n */\nvar ExpressionValidator = /** @class */ (function (_super) {\n __extends(ExpressionValidator, _super);\n function ExpressionValidator(expression) {\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.conditionRunner = null;\n _this.isRunningValue = false;\n _this.expression = expression;\n return _this;\n }\n ExpressionValidator.prototype.getType = function () {\n return \"expressionvalidator\";\n };\n Object.defineProperty(ExpressionValidator.prototype, \"isValidateAllValues\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ExpressionValidator.prototype, \"isAsync\", {\n get: function () {\n if (!this.ensureConditionRunner())\n return false;\n return this.conditionRunner.isAsync;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ExpressionValidator.prototype, \"isRunning\", {\n get: function () {\n return this.isRunningValue;\n },\n enumerable: false,\n configurable: true\n });\n ExpressionValidator.prototype.validate = function (value, name, values, properties) {\n var _this = this;\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!this.ensureConditionRunner())\n return null;\n this.conditionRunner.onRunComplete = function (res) {\n _this.isRunningValue = false;\n if (!!_this.onAsyncCompleted) {\n _this.onAsyncCompleted(_this.generateError(res, value, name));\n }\n };\n this.isRunningValue = true;\n var res = this.conditionRunner.run(values, properties);\n if (this.conditionRunner.isAsync)\n return null;\n this.isRunningValue = false;\n return this.generateError(res, value, name);\n };\n ExpressionValidator.prototype.generateError = function (res, value, name) {\n if (!res) {\n return new ValidatorResult(value, this.createCustomError(name));\n }\n return null;\n };\n ExpressionValidator.prototype.getDefaultErrorText = function (name) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"invalidExpression\")[\"format\"](this.expression);\n };\n ExpressionValidator.prototype.ensureConditionRunner = function () {\n if (!!this.conditionRunner) {\n this.conditionRunner.expression = this.expression;\n return true;\n }\n if (!this.expression)\n return false;\n this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ConditionRunner\"](this.expression);\n return true;\n };\n Object.defineProperty(ExpressionValidator.prototype, \"expression\", {\n /**\n * The expression property.\n */\n get: function () {\n return this.getPropertyValue(\"expression\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n return ExpressionValidator;\n}(SurveyValidator));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"surveyvalidator\", [\n { name: \"text\", serializationProperty: \"locText\" },\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"numericvalidator\", [\"minValue:number\", \"maxValue:number\"], function () {\n return new NumericValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"textvalidator\", [\"minLength:number\", \"maxLength:number\", \"allowDigits:boolean\"], function () {\n return new TextValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"answercountvalidator\", [\"minCount:number\", \"maxCount:number\"], function () {\n return new AnswerCountValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"regexvalidator\", [\"regex\"], function () {\n return new RegexValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"emailvalidator\", [], function () {\n return new EmailValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"expressionvalidator\", [\"expression:condition\"], function () {\n return new ExpressionValidator();\n}, \"surveyvalidator\");\n\n\n/***/ }),\n\n/***/ \"./src/vue/base.ts\":\n/*!*************************!*\\\n !*** ./src/vue/base.ts ***!\n \\*************************/\n/*! exports provided: BaseVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseVue\", function() { return BaseVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar BaseVue = /** @class */ (function (_super) {\n __extends(BaseVue, _super);\n function BaseVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BaseVue.prototype.getModel = function () {\n return null;\n };\n BaseVue.prototype.setIsRendering = function (val) {\n var model = this.getModel();\n if (!!model) {\n model.isRendering = val;\n }\n };\n BaseVue.prototype.getIsRendering = function () {\n var model = this.getModel();\n return !!model && !!model.isRendering;\n };\n BaseVue.prototype.onMounted = function () { };\n BaseVue.prototype.onUpdated = function () { };\n BaseVue.prototype.onDestroyed = function () { };\n BaseVue.prototype.onCreated = function () {\n var _this = this;\n var model = this.getModel();\n if (!model)\n return;\n model.iteratePropertiesHash(function (hash, key) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(hash, key, hash[key]);\n });\n model.setPropertyValueCoreHandler = function (propertiesHash, name, val) {\n if (!propertiesHash.hasOwnProperty(name) || !_this.getIsRendering())\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(propertiesHash, name, val);\n else\n propertiesHash[name] = val;\n };\n };\n BaseVue.prototype.created = function () {\n this.onCreated();\n };\n BaseVue.prototype.beforeMount = function () {\n this.setIsRendering(true);\n };\n BaseVue.prototype.beforeUpdate = function () {\n this.setIsRendering(true);\n };\n BaseVue.prototype.mounted = function () {\n this.setIsRendering(false);\n this.onMounted();\n };\n BaseVue.prototype.updated = function () {\n this.setIsRendering(false);\n this.onUpdated();\n };\n BaseVue.prototype.destroyed = function () {\n this.onDestroyed();\n };\n BaseVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BaseVue);\n return BaseVue;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue\":\n/*!**************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue ***!\n \\**************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony import */ var _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-checkbox.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************/\n/*! exports provided: default, BooleanCheckbox */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanCheckbox\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue\":\n/*!************************************!*\\\n !*** ./src/vue/boolean-switch.vue ***!\n \\************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony import */ var _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boolean-switch.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-switch.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, BooleanSwitch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanSwitch\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean.ts\":\n/*!****************************!*\\\n !*** ./src/vue/boolean.ts ***!\n \\****************************/\n/*! exports provided: Boolean */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return Boolean; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Boolean = /** @class */ (function (_super) {\n __extends(Boolean, _super);\n function Boolean() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Boolean.prototype, \"itemClass\", {\n get: function () {\n var question = this.question;\n var cssClasses = question.cssClasses;\n var isChecked = question.checkedValue;\n var isDisabled = question.isReadOnly;\n var itemClass = cssClasses.item;\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n else if (isChecked === null)\n itemClass += \" \" + cssClasses.itemIndeterminate;\n return itemClass;\n },\n enumerable: false,\n configurable: true\n });\n Boolean.prototype.getLabelClass = function (checked) {\n var question = this.question;\n var cssClasses = this.question.cssClasses;\n return (cssClasses.label +\n \" \" +\n (question.checkedValue === !checked || question.isReadOnly\n ? question.cssClasses.disabledLabel\n : \"\"));\n };\n Boolean.prototype.preventDefaults = function (event) {\n event.preventDefault();\n event.stopPropagation();\n };\n Boolean.prototype.onSwitchClick = function (event) {\n if (this.question.isIndeterminate) {\n this.preventDefaults(event);\n var isRightClick = event.offsetX / event.target.offsetWidth > 0.5;\n var isRtl = document.defaultView.getComputedStyle(event.target).direction == \"rtl\";\n this.question.checkedValue = isRtl ? !isRightClick : isRightClick;\n }\n };\n Boolean.prototype.onLabelClick = function (event, value) {\n if (this.question.isIndeterminate) {\n this.preventDefaults(event);\n this.question.checkedValue = value;\n }\n };\n Boolean = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], Boolean);\n return Boolean;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/buttongroup.vue ***!\n \\*********************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony import */ var _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buttongroup.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, ButtonGroup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/buttongroupitem.vue ***!\n \\*************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony import */ var _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroupitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, ButtonGroupItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue\":\n/*!******************************!*\\\n !*** ./src/vue/checkbox.vue ***!\n \\******************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checkbox.vue?vue&type=template&id=cad276f6& */ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony import */ var _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Checkbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkbox.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Checkbox */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Checkbox\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=template&id=cad276f6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/checkboxitem.vue ***!\n \\**********************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony import */ var _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkboxitem.vue?vue&type=script&lang=ts& */ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkboxitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, CheckboxItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CheckboxItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue\":\n/*!*****************************!*\\\n !*** ./src/vue/comment.vue ***!\n \\*****************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./comment.vue?vue&type=template&id=099c2c8d& */ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony import */ var _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./comment.vue?vue&type=script&lang=ts& */ \"./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Comment\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/comment.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n !*** ./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n \\******************************************************/\n/*! exports provided: default, Comment */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Comment\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!************************************************************!*\\\n !*** ./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=template&id=099c2c8d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\":\n/*!********************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue ***!\n \\********************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item-dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************/\n/*! exports provided: default, ActionBarItemDropdownViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!***************************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n \\***************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue\":\n/*!***********************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue ***!\n \\***********************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony import */ var _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************/\n/*! exports provided: default, ActionBarItemViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!******************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n \\******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue\":\n/*!****************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue ***!\n \\****************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony import */ var _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-separator.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************/\n/*! exports provided: default, ActionBarSeparatorViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!***********************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n \\***********************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue\":\n/*!******************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue ***!\n \\******************************************************/\n/*! exports provided: ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar.vue?vue&type=template&id=313bf210& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony import */ var _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************/\n/*! exports provided: default, ActionViewModel, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=template&id=313bf210& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue\":\n/*!**************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue ***!\n \\**************************************************/\n/*! exports provided: ActionViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action.vue?vue&type=template&id=2fe54632& */ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\n/* harmony import */ var _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************/\n/*! exports provided: default, ActionViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\n/*!*********************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632& ***!\n \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action.vue?vue&type=template&id=2fe54632& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue\":\n/*!************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue ***!\n \\************************************************************/\n/*! exports provided: DefaultTitle, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./default-title.vue?vue&type=template&id=7f6117dc& */ \"./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\");\n/* harmony import */ var _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./default-title.vue?vue&type=script&lang=ts& */ \"./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DefaultTitle\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/default-title/default-title.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************/\n/*! exports provided: default, DefaultTitle */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./default-title.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitle\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\":\n/*!*******************************************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc& ***!\n \\*******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./default-title.vue?vue&type=template&id=7f6117dc& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/components/list/list.vue ***!\n \\******************************************/\n/*! exports provided: List, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./list.vue?vue&type=template&id=cc17a010& */ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony import */ var _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./list.vue?vue&type=script&lang=ts& */ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/list/list.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, List */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"List\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=template&id=cc17a010& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue ***!\n \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony import */ var _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./detail-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/detail-button/detail-button.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDetailButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!**********************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\":\n/*!*****************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue ***!\n \\*****************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag-drop-icon.vue?vue&type=template&id=4f55d298& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\n/* harmony import */ var _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicDragDropIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\n/*!************************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\n \\************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-icon.vue?vue&type=template&id=4f55d298& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue ***!\n \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony import */ var _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./remove-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/remove-button/remove-button.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicRemoveButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!**********************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue\":\n/*!******************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue ***!\n \\******************************************************/\n/*! exports provided: PopupContainer, showModal, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony import */ var _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./popup-container.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"showModal\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup-container.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************/\n/*! exports provided: default, PopupContainer, showModal */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"showModal\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue\":\n/*!********************************************!*\\\n !*** ./src/vue/components/popup/popup.vue ***!\n \\********************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./popup.vue?vue&type=template&id=ef11265c& */ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony import */ var _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./popup.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Popup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************/\n/*! exports provided: default, Popup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Popup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n \\***************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=template&id=ef11265c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue\":\n/*!**************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue ***!\n \\**************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./svg-icon.vue?vue&type=template&id=684776f8& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony import */ var _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svg-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SvgIcon\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/svg-icon/svg-icon.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************/\n/*! exports provided: default, SvgIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SvgIcon\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!*********************************************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=template&id=684776f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue\":\n/*!************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue ***!\n \\************************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./title-actions.vue?vue&type=template&id=b72886ec& */ \"./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\");\n/* harmony import */ var _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title-actions.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleActions\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/title-actions/title-actions.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************/\n/*! exports provided: default, TitleActions */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleActions\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\":\n/*!*******************************************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec& ***!\n \\*******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=template&id=b72886ec& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue\":\n/*!*******************************!*\\\n !*** ./src/vue/composite.vue ***!\n \\*******************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./composite.vue?vue&type=template&id=1a9e2196& */ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony import */ var _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./composite.vue?vue&type=script&lang=ts& */ \"./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Composite\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/composite.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n !*** ./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n \\********************************************************/\n/*! exports provided: default, Composite */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Composite\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=template&id=1a9e2196& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue\":\n/*!****************************!*\\\n !*** ./src/vue/custom.vue ***!\n \\****************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./custom.vue?vue&type=template&id=d4aae09a& */ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony import */ var _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom.vue?vue&type=script&lang=ts& */ \"./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Custom\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/custom.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Custom */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Custom\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=template&id=d4aae09a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/customwidget.vue ***!\n \\**********************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony import */ var _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./customwidget.vue?vue&type=script&lang=ts& */ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/customwidget.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, CustomWidget */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CustomWidget\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue\":\n/*!******************************!*\\\n !*** ./src/vue/dropdown.vue ***!\n \\******************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony import */ var _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Dropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Dropdown */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Dropdown\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue\":\n/*!*****************************!*\\\n !*** ./src/vue/element.vue ***!\n \\*****************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element.vue?vue&type=template&id=973472ac& */ \"./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony import */ var _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element.vue?vue&type=script&lang=ts& */ \"./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/element.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n !*** ./src/vue/element.vue?vue&type=script&lang=ts& ***!\n \\******************************************************/\n/*! exports provided: default, SurveyElementVue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementVue\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!************************************************************!*\\\n !*** ./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=template&id=973472ac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/elementheader.vue ***!\n \\***********************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./elementheader.vue?vue&type=template&id=27adc537& */ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony import */ var _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./elementheader.vue?vue&type=script&lang=ts& */ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ElementHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/elementheader.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, ElementHeader */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ElementHeader\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=template&id=27adc537& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue\":\n/*!***************************!*\\\n !*** ./src/vue/empty.vue ***!\n \\***************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./empty.vue?vue&type=template&id=05052c0a& */ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony import */ var _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty.vue?vue&type=script&lang=ts& */ \"./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Empty\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/empty.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, Empty */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Empty\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=template&id=05052c0a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue\":\n/*!****************************!*\\\n !*** ./src/vue/errors.vue ***!\n \\****************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./errors.vue?vue&type=template&id=5682e6ad& */ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony import */ var _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors.vue?vue&type=script&lang=ts& */ \"./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Errors\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/errors.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Errors */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Errors\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=template&id=5682e6ad& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue\":\n/*!********************************!*\\\n !*** ./src/vue/expression.vue ***!\n \\********************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expression.vue?vue&type=template&id=1d20865a& */ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony import */ var _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./expression.vue?vue&type=script&lang=ts& */ \"./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Expression\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/expression.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Expression */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Expression\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=template&id=1d20865a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue\":\n/*!**************************!*\\\n !*** ./src/vue/file.vue ***!\n \\**************************/\n/*! exports provided: File, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./file.vue?vue&type=template&id=20f70284& */ \"./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony import */ var _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file.vue?vue&type=script&lang=ts& */ \"./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"File\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/file.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/file.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, File */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"File\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=template&id=20f70284& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue\":\n/*!*******************************!*\\\n !*** ./src/vue/flowpanel.vue ***!\n \\*******************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony import */ var _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./flowpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n !*** ./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n \\********************************************************/\n/*! exports provided: default, FlowPanel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue\":\n/*!**************************************!*\\\n !*** ./src/vue/flowpanelelement.vue ***!\n \\**************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony import */ var _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanelelement.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************/\n/*! exports provided: default, FlowPanelElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelElement\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue\":\n/*!****************************!*\\\n !*** ./src/vue/header.vue ***!\n \\****************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header.vue?vue&type=template&id=69cff8cf& */ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony import */ var _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header.vue?vue&type=script&lang=ts& */ \"./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/header.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/header.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, SurveyHeader */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyHeader\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=template&id=69cff8cf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue\":\n/*!**************************!*\\\n !*** ./src/vue/html.vue ***!\n \\**************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./html.vue?vue&type=template&id=0742e16d& */ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony import */ var _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./html.vue?vue&type=script&lang=ts& */ \"./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Html\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/html.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/html.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, Html */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Html\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=template&id=0742e16d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue\":\n/*!***************************!*\\\n !*** ./src/vue/image.vue ***!\n \\***************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image.vue?vue&type=template&id=1dc8d709& */ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony import */ var _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./image.vue?vue&type=script&lang=ts& */ \"./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionImage\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/image.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/image.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, QuestionImage */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionImage\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=template&id=1dc8d709& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/imagepicker.vue ***!\n \\*********************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imagepicker.vue?vue&type=template&id=153fe052& */ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony import */ var _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./imagepicker.vue?vue&type=script&lang=ts& */ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ImagePicker\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/imagepicker.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, ImagePicker */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ImagePicker\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=template&id=153fe052& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue\":\n/*!****************************!*\\\n !*** ./src/vue/matrix.vue ***!\n \\****************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrix.vue?vue&type=template&id=7fa2f403& */ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony import */ var _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrix.vue?vue&type=script&lang=ts& */ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Matrix\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrix.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Matrix */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Matrix\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=template&id=7fa2f403& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue\":\n/*!********************************!*\\\n !*** ./src/vue/matrixcell.vue ***!\n \\********************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony import */ var _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixcell.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixCell\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixcell.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, MatrixCell */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixCell\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue\":\n/*!************************************!*\\\n !*** ./src/vue/matrixdropdown.vue ***!\n \\************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony import */ var _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, MatrixDropdown */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdown\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/matrixdynamic.vue ***!\n \\***********************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony import */ var _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdynamic.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, MatrixDynamic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamic\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/matrixtable.vue ***!\n \\*********************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony import */ var _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixtable.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixTable\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixtable.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, MatrixTable */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixTable\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/multipletext.vue ***!\n \\**********************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony import */ var _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multipletext.vue?vue&type=script&lang=ts& */ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MultipleText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/multipletext.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, MultipleText */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MultipleText\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue\":\n/*!********************************!*\\\n !*** ./src/vue/navigation.vue ***!\n \\********************************/\n/*! exports provided: Navigation, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./navigation.vue?vue&type=template&id=75eadfd6& */ \"./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\");\n/* harmony import */ var _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./navigation.vue?vue&type=script&lang=ts& */ \"./src/vue/navigation.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Navigation\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/navigation.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/navigation.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Navigation */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./navigation.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Navigation\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/navigation.vue?vue&type=template&id=75eadfd6& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./navigation.vue?vue&type=template&id=75eadfd6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/otherChoice.vue ***!\n \\*********************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./otherChoice.vue?vue&type=template&id=2ed776ff& */ \"./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\");\n/* harmony import */ var _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./otherChoice.vue?vue&type=script&lang=ts& */ \"./src/vue/otherChoice.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"OtherChoice\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/otherChoice.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/otherChoice.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, OtherChoice */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./otherChoice.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"OtherChoice\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./otherChoice.vue?vue&type=template&id=2ed776ff& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue\":\n/*!**************************!*\\\n !*** ./src/vue/page.vue ***!\n \\**************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./page.vue?vue&type=template&id=4e962a51& */ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony import */ var _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./page.vue?vue&type=script&lang=ts& */ \"./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Page\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/page.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/page.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, Page */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Page\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=template&id=4e962a51& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue\":\n/*!***************************!*\\\n !*** ./src/vue/panel.vue ***!\n \\***************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./panel.vue?vue&type=template&id=0c78899c& */ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony import */ var _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel.vue?vue&type=script&lang=ts& */ \"./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Panel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/panel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, Panel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Panel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=template&id=0c78899c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/paneldynamic.vue ***!\n \\**********************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony import */ var _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamic.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, PanelDynamic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamic\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue ***!\n \\******************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicprogress.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, PanelDynamicProgress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicProgress\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue\":\n/*!****************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue ***!\n \\****************************************/\n/*! exports provided: PanelDynamicRemove, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamicremove.vue?vue&type=template&id=db6b2f7e& */ \"./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\");\n/* harmony import */ var _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamicremove.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicRemove\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicremove.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************/\n/*! exports provided: default, PanelDynamicRemove */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicremove.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicRemove\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\":\n/*!***********************************************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e& ***!\n \\***********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicremove.vue?vue&type=template&id=db6b2f7e& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue\":\n/*!******************************!*\\\n !*** ./src/vue/progress.vue ***!\n \\******************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./progress.vue?vue&type=template&id=27e325ef& */ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony import */ var _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progress.vue?vue&type=script&lang=ts& */ \"./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Progress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progress.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Progress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Progress\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=template&id=27e325ef& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/progressButtons.vue ***!\n \\*************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony import */ var _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progressButtons.vue?vue&type=script&lang=ts& */ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progressButtons.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, ProgressButtons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ProgressButtons\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/question.ts\":\n/*!*****************************!*\\\n !*** ./src/vue/question.ts ***!\n \\*****************************/\n/*! exports provided: QuestionVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionVue\", function() { return QuestionVue; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar QuestionVue = /** @class */ (function (_super) {\n __extends(QuestionVue, _super);\n function QuestionVue() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.innerValue = null;\n return _this;\n }\n QuestionVue.prototype.changeQuestion = function (new_val, old_val) {\n this.innerValue = null;\n };\n QuestionVue.prototype.getModel = function () {\n return this.question;\n };\n QuestionVue.prototype.onMounted = function () {\n if (this.question) {\n this.question.afterRenderQuestionElement(this.$el);\n }\n };\n QuestionVue.prototype.beforeDestroy = function () {\n if (this.question) {\n this.question.beforeDestroyQuestionElement(this.$el);\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], QuestionVue.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], QuestionVue.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Watch\"])(\"question\")\n ], QuestionVue.prototype, \"changeQuestion\", null);\n QuestionVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], QuestionVue);\n return QuestionVue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"BaseVue\"]));\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue\":\n/*!********************************!*\\\n !*** ./src/vue/radiogroup.vue ***!\n \\********************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony import */ var _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./radiogroup.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Radiogroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Radiogroup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Radiogroup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue\":\n/*!************************************!*\\\n !*** ./src/vue/radiogroupitem.vue ***!\n \\************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony import */ var _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroupitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, RadiogroupItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RadiogroupItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue ***!\n \\******************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ranking-item.vue?vue&type=template&id=2faded76& */ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony import */ var _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ranking-item.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RankingItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking-item.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, RankingItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RankingItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=template&id=2faded76& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/ranking/ranking.vue ***!\n \\*************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ranking.vue?vue&type=template&id=19074eea& */ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony import */ var _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ranking.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Ranking\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, Ranking */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Ranking\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=template&id=19074eea& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue\":\n/*!****************************!*\\\n !*** ./src/vue/rating.vue ***!\n \\****************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rating.vue?vue&type=template&id=7092bfdf& */ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony import */ var _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rating.vue?vue&type=script&lang=ts& */ \"./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Rating\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/rating.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Rating */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Rating\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=template&id=7092bfdf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue\":\n/*!*************************!*\\\n !*** ./src/vue/row.vue ***!\n \\*************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./row.vue?vue&type=template&id=7cc0bd88& */ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony import */ var _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./row.vue?vue&type=script&lang=ts& */ \"./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Row\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/row.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!**************************************************!*\\\n !*** ./src/vue/row.vue?vue&type=script&lang=ts& ***!\n \\**************************************************/\n/*! exports provided: default, Row */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Row\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!********************************************************!*\\\n !*** ./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n \\********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=template&id=7cc0bd88& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/signaturepad.vue ***!\n \\**********************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./signaturepad.vue?vue&type=template&id=0462349d& */ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony import */ var _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./signaturepad.vue?vue&type=script&lang=ts& */ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SignaturePad\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/signaturepad.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, SignaturePad */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SignaturePad\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=template&id=0462349d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/string-editor.vue ***!\n \\***********************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string-editor.vue?vue&type=template&id=9639f152& */ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony import */ var _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string-editor.vue?vue&type=script&lang=ts& */ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-editor.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, SurveyStringEditor */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringEditor\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=template&id=9639f152& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/string-viewer.vue ***!\n \\***********************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string-viewer.vue?vue&type=template&id=7d918508& */ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony import */ var _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string-viewer.vue?vue&type=script&lang=ts& */ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-viewer.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, SurveyStringViewer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringViewer\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=template&id=7d918508& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue\":\n/*!****************************!*\\\n !*** ./src/vue/string.vue ***!\n \\****************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string.vue?vue&type=template&id=d3a3d75a& */ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony import */ var _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string.vue?vue&type=script&lang=ts& */ \"./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyString\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/string.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, SurveyString */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyString\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=template&id=d3a3d75a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue\":\n/*!****************************!*\\\n !*** ./src/vue/survey.vue ***!\n \\****************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./survey.vue?vue&type=template&id=6874e1c8& */ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony import */ var _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey.vue?vue&type=script&lang=ts& */ \"./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/survey.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Survey */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Survey\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=template&id=6874e1c8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/surveyModel.ts\":\n/*!********************************!*\\\n !*** ./src/vue/surveyModel.ts ***!\n \\********************************/\n/*! exports provided: VueSurveyModel, VueSurveyWindowModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VueSurveyModel\", function() { return VueSurveyModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VueSurveyWindowModel\", function() { return VueSurveyWindowModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar VueSurveyModel = /** @class */ (function (_super) {\n __extends(VueSurveyModel, _super);\n function VueSurveyModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n VueSurveyModel.prototype.render = function () {\n if (this.renderCallback) {\n this.renderCallback();\n }\n };\n VueSurveyModel.prototype.onLoadSurveyFromService = function () {\n this.render();\n };\n VueSurveyModel.prototype.onLoadingSurveyFromService = function () {\n this.render();\n };\n Object.defineProperty(VueSurveyModel.prototype, \"css\", {\n get: function () {\n return survey_core__WEBPACK_IMPORTED_MODULE_1__[\"surveyCss\"].getCss();\n },\n set: function (value) {\n this.mergeValues(value, this.css);\n },\n enumerable: false,\n configurable: true\n });\n VueSurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(valuesHash, key, value);\n };\n VueSurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.delete(valuesHash, key);\n };\n VueSurveyModel.prototype.doAfterRenderSurvey = function (el) {\n this.afterRenderSurvey(el);\n };\n VueSurveyModel.prototype.doAfterRenderHeader = function (el) {\n this.afterRenderHeader(el);\n };\n return VueSurveyModel;\n}(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"]));\n\nvar VueSurveyWindowModel = /** @class */ (function (_super) {\n __extends(VueSurveyWindowModel, _super);\n function VueSurveyWindowModel(jsonObj, initialModel) {\n if (initialModel === void 0) { initialModel = null; }\n return _super.call(this, jsonObj, initialModel) || this;\n }\n VueSurveyWindowModel.prototype.createSurvey = function (jsonObj) {\n return new VueSurveyModel(jsonObj);\n };\n return VueSurveyWindowModel;\n}(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyWindowModel\"]));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"].platform = \"vue\";\n\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue\":\n/*!**************************!*\\\n !*** ./src/vue/text.vue ***!\n \\**************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text.vue?vue&type=template&id=40ece422& */ \"./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony import */ var _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text.vue?vue&type=script&lang=ts& */ \"./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/text.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/text.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, QuestionText */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionText\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=template&id=40ece422& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue\":\n/*!********************************!*\\\n !*** ./src/vue/timerpanel.vue ***!\n \\********************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony import */ var _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timerpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TimerPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/timerpanel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, TimerPanel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TimerPanel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/titlecontent.vue ***!\n \\**********************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./titlecontent.vue?vue&type=template&id=cd49b83a& */ \"./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\");\n/* harmony import */ var _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./titlecontent.vue?vue&type=script&lang=ts& */ \"./src/vue/titlecontent.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleContent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/titlecontent.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/titlecontent.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, TitleContent */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./titlecontent.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleContent\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./titlecontent.vue?vue&type=template&id=cd49b83a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/window.vue\":\n/*!****************************!*\\\n !*** ./src/vue/window.vue ***!\n \\****************************/\n/*! exports provided: Window, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./window.vue?vue&type=template&id=62f588b2& */ \"./src/vue/window.vue?vue&type=template&id=62f588b2&\");\n/* harmony import */ var _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./window.vue?vue&type=script&lang=ts& */ \"./src/vue/window.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Window\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/window.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/window.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/window.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Window */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./window.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Window\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/window.vue?vue&type=template&id=62f588b2&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/window.vue?vue&type=template&id=62f588b2& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./window.vue?vue&type=template&id=62f588b2& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=template&id=62f588b2&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"vue\":\n/*!******************************************************************************!*\\\n !*** external {\"root\":\"Vue\",\"commonjs2\":\"vue\",\"commonjs\":\"vue\",\"amd\":\"vue\"} ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_vue__;\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXkvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1N1cnZleS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvc2lnbmF0dXJlX3BhZC9kaXN0L3NpZ25hdHVyZV9wYWQubWpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy9zb3J0YWJsZWpzL21vZHVsYXIvc29ydGFibGUuZXNtLmpzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/MGVjZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT84YWRjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2EzOTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP2I2NTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/YmQxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/M2RkMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlP2UzNjIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT85YmE4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/MDliNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/YmUxZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT9hNDFkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/NTgzYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT8wYTNkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP2JlOTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/YmEzZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP2M2Y2IiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/MTQ3MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT9mZmRhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/NzQxYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlPzE0OTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlLWFjdGlvbnMvdGl0bGUtYWN0aW9ucy52dWU/ZDFhOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/NGYwYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/MTNlYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/Mjk0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT9kOThlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/MDc1MCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlPzhmZjgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/OWUzNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/MjRjOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlPzhkNTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9hMTM2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT9lYjk4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/YjM1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2hlYWRlci52dWU/Y2U2YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2h0bWwudnVlP2IzNDciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZS52dWU/NjI0YSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9kZGI1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZT8wOTg3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/ZGViYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT83YjY3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/YjI0ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT9mNzI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9jNjAxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/YmRkNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mNDYyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFnZS52dWU/NTcyZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsLnZ1ZT82ZjUxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT9jNTJhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlPzVkZGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP2ZhMzUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/NTU2MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/MGEwMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzNlYWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/ZTdhOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT8xMjNjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT8xNDM0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZT9kZDNkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcm93LnZ1ZT8yYTNhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT8yYmNkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/YmRlZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP2NkNDgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlPzhiNmEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdXJ2ZXkudnVlPzQxOWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zMWE5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/MzA2NiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpdGxlY29udGVudC52dWU/N2QxNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/YjRlMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLWNsYXNzLWNvbXBvbmVudC9kaXN0L3Z1ZS1jbGFzcy1jb21wb25lbnQuZXNtLmpzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/NmI0OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT8zNDcwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2E2NWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlPzY1ZGMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/NWQ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/N2MxNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlP2E1NmIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT85MTE4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/MGRlYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/ZjM3MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT9jYjYxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/N2Y0OSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT85MDRiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlPzRhMjUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/MjM1YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlPzM4ZjEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/MDRmZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT80NGFmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/YWJhOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlPzllNTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlLWFjdGlvbnMvdGl0bGUtYWN0aW9ucy52dWU/MTZmYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/NGVhMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/ODIzYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/MGE4NCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT8wMGE0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/MWQyZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlP2E1MDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/NjZiOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/ZmYwZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlP2FjZTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9jNGJjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT9iZWMyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/ZTQwYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2hlYWRlci52dWU/YjU4MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2h0bWwudnVlPzJiOWEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZS52dWU/YzA4NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9jNmU0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZT83MDc4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/MDdkOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT85MGQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/N2UwYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT83MmQ1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9mYTQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/NTgxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mNGY5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFnZS52dWU/MTk0MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsLnZ1ZT83MjQwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT83NWI1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlPzU5ZTIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlPzYyNzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/YzNmNSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWU/MDI1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzczZGEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/NGU1MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT8yY2M0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT81ZDRlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZT85ZDU0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcm93LnZ1ZT8xOGZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT8zMDZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/ZDc2YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlP2RjOWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlP2UxYzEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdXJ2ZXkudnVlPzdhMGYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zYTVhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/Y2M0MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpdGxlY29udGVudC52dWU/NzNkMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/N2IxMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0VtaXQuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvSW5qZWN0LmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0luamVjdFJlYWN0aXZlLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL01vZGVsU3luYy5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm9wLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3BTeW5jLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3ZpZGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvdmlkZVJlYWN0aXZlLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1JlZi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9WTW9kZWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvV2F0Y2guanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2hlbHBlcnMvcHJvdmlkZUluamVjdC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2FjdGlvbnMvYWN0aW9uLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvYWN0aW9ucy9jb250YWluZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2Jhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2NhbGN1bGF0ZWRWYWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY2hvaWNlc1Jlc3RmdWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY29uZGl0aW9ucy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY29uZGl0aW9uc1BhcnNlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwbWF0ZXJpYWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RlZmF1bHRDc3MvY3NzbW9kZXJuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9kcmFnZHJvcGhlbHBlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZHhTdXJ2ZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL2NodW5rcy9sb2NhbGl6YXRpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2VudHJpZXMvY2h1bmtzL21vZGVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL2NvcmUudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2VudHJpZXMvdnVlLXVpLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL3Z1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZXJyb3IudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2V4cHJlc3Npb25JdGVtcy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZXhwcmVzc2lvbnMvZXhwcmVzc2lvblBhcnNlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZXhwcmVzc2lvbnMvZXhwcmVzc2lvbnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2Zsb3dwYW5lbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZnVuY3Rpb25zZmFjdG9yeS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvaXRlbXZhbHVlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9qc29ub2JqZWN0LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9saXN0LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YWJsZXN0cmluZy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2FyYWJpYy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2Jhc3F1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2J1bGdhcmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2NhdGFsYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9jcm9hdGlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2N6ZWNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZGFuaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZHV0Y2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9lbmdsaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZXN0b25pYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZ2VvcmdpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2hlYnJldy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2hpbmRpLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaHVuZ2FyaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaWNlbGFuZGljLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaW5kb25lc2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2l0YWxpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9qYXBhbmVzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2themFraC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2tvcmVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2xhdHZpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9saXRodWFuaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vbWFjZWRvbmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL25vcndlZ2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3BlcnNpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlLWJyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3JvbWFuaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3NlcmJpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9zcGFuaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vc3dhaGlsaS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3N3ZWRpc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi90YWppay50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3RoYWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi90cmFkaXRpb25hbC1jaGluZXNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vdHVya2lzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3VrcmFpbmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi93ZWxzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbWFpbi5zY3NzPzNiYzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL21hcnRpeEJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3BhZ2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3BhbmVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9wb3B1cC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYm9vbGVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYnV0dG9uZ3JvdXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9jdXN0b20udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9lbXB0eS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fZXhwcmVzc2lvbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fZmlsZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25faHRtbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25faW1hZ2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2ltYWdlcGlja2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9tYXRyaXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYW5raW5nLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fdGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fdGV4dGJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25ub252YWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcmVuZGVyZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3R5bGVzbWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5LWVsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleS1lcnJvci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleVN0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleVdpbmRvdy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5dGltZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3RyaWdnZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3V0aWxzL2lzLW1vYmlsZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdXRpbHMvcG9wdXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdmFsaWRhdG9yLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYmFzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/ODI3OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlPzQ4OTMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/OTZlMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT9hOWI0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT9iNWI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2RlZTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT9kMTgzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT9iMDZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlPzBiMzYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/MjBhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlPzUyNzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlP2UyODQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlPzJiZGYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT80MTBkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT9jZDA5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/NDg0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/NmRlMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlPzI0MjEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT83ODA5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT8zN2FlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlPzAxMWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/ZDQwMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/ZGFlZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlP2I4MjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWU/YzliYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT9hYTZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP2QxNTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/NzJhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT9hNTllIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlPzA4ZjQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP2NiYmUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZT9mZTM3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlPzc0YjciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/YzUzMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT9hMmZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlP2FjZmQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlPzEwZDYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT85OTczIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT9jNzcwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/ZjBhMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZT9lNTcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS1hY3Rpb25zL3RpdGxlLWFjdGlvbnMudnVlPzFiZTAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9zaXRlLnZ1ZT9iZGExIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9zaXRlLnZ1ZT9kZmU3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9tLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/ZmJhZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/OTgzYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlPzQ5ZmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlP2Q1YWIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/MjE4NiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT8wY2VkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT9lZTUxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/ODRiMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/NDE0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlPzhjMzgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/OWEwOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VtcHR5LnZ1ZT84N2UzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXJyb3JzLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/NTMxMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/MjIxNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/ZDY5YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlPzZjYjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ZpbGUudnVlPzFiMWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9iZDFmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/OGY5YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/NWM1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/YjNmOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlPzY2YTciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9oZWFkZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZT8wZjE2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZT9jNGNiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9odG1sLnZ1ZT8wMTEyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWU/ZDJlZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZT9lMzZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2UudnVlP2Y5ODEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/YTA3ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9hZjNmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/ZGJkMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/ZWU5ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/NWY3OSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlPzU3MzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/NDJjZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT85NDk0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT9iOTJjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/NWM1ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT83NjllIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4dGFibGUudnVlPzMzZDQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9kY2ZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT82ZjVmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZT80NzdjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/MWFkMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mZTI0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvb3RoZXJDaG9pY2UudnVlPzRjYTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhZ2UudnVlP2UzMzkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZT9mOWE3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlPzc3ZjAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbC52dWU/YmU3MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlPzliZmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlP2E5Y2MiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/MDEwNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT8xOTFhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/M2MxYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/NjZhOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT9mNzI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlP2MxOGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT8yOTE5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT9iZWM1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzcwMTQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT81OTQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlPzgwYjMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/MzIyMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT9mYjZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlPzU3M2YiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT85OWM1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT9hNTUyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/MzhkNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/OGJkYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Jvdy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzkxNjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzIwOTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT9kMzdiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT85MzIwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT9kZjUzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/M2I1NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/N2U1OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlPzdmNGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT9kMTcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT84NjZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/N2VmMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/YzU2MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleU1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zMzdjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWU/MzhlYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/ZmI3NyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP2JmM2YiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90aXRsZWNvbnRlbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGl0bGVjb250ZW50LnZ1ZT85YjcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGl0bGVjb250ZW50LnZ1ZT83MDMwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvd2luZG93LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/MjliOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/OGZkZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvZXh0ZXJuYWwge1wicm9vdFwiOlwiVnVlXCIsXCJjb21tb25qczJcIjpcInZ1ZVwiLFwiY29tbW9uanNcIjpcInZ1ZVwiLFwiYW1kXCI6XCJ2dWVcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsYUFBYTtBQUN4RztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaLFlBQVk7O0FBRVo7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHdCQUF3QjtBQUN6Qzs7QUFFQTtBQUNBLHFCQUFxQixrQkFBa0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVILG1DQUFtQztBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsMkVBQVksRUFBQzs7Ozs7Ozs7Ozs7OztBQ3psQjVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQsZ0JBQWdCOztBQUVqRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLFVBQVU7QUFDdEIsWUFBWSxVQUFVO0FBQ3RCLFlBQVksVUFBVTtBQUN0QixZQUFZLGNBQWM7QUFDMUIsWUFBWSxPQUFPO0FBQ25COzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVksWUFBWTtBQUN4Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCLFlBQVksT0FBTztBQUNuQixZQUFZLE9BQU87QUFDbkIsWUFBWSxZQUFZO0FBQ3hCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLFNBQVM7QUFDckIsWUFBWSxZQUFZO0FBQ3hCOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCLFlBQVksU0FBUztBQUNyQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLE1BQU07QUFDbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksT0FBTztBQUNuQixZQUFZLE9BQU87QUFDbkI7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCx1Q0FBdUMsb0RBQW9EOzs7QUFHM0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLFlBQVksT0FBTztBQUNuQixZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEIsWUFBWSxPQUFPO0FBQ25COzs7QUFHQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFOztBQUVBLGVBQWU7O0FBRWYsc0NBQXNDLFdBQVc7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7OztBQUd6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjs7QUFFMUIsaUZBQWlGOztBQUVqRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCOzs7QUFHL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EseURBQXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7OztBQUdULDRDQUE0Qzs7O0FBRzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFOzs7QUFHWDtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdNQUFnTTs7QUFFaE07QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUCxLQUFLOzs7QUFHTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFD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QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQiw4QkFBOEI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Es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LHNCQUFDO0FBQUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUM5SUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBbUM7QUFDQTtBQUNHO0FBQ0Y7QUFDQztBQUNIO0FBQ0M7QUFDRDtBQUNHO0FBQ0Q7QUFDRDtBQUNFO0FBQ0Y7QUFDRDtBQUNDO0FBQ0Q7QUFDSTtBQUNBO0FBQ0M7QUFDSDtBQUNDO0FBQ0Y7QUFDQTtBQUNDO0FBQ0c7QUFDQTtBQUNEO0FBQ0Y7QUFDRDtBQUNJO0FBQ0c7QUFDTDtBQUNEO0FBQ0E7QUFDVztBQUNYO0FBQ0E7QUFDQTtBQUNGO0FBQ0Q7QUFDZTtBQUNaO0FBQ0U7QUFDQztBQUNMOzs7Ozs7Ozs7Ozs7O0FDNUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBUztBQUNnQjtBQUN6Qiw2QkFBNkI7QUFFdEIsSUFBSSxPQUFlLENBQUM7QUFDM0IsT0FBTyxHQUFHLEtBQUcsUUFBcUIsQ0FBQztBQUVPO0FBQ1M7QUFXMUI7QUFDbUI7QUFDVztBQVFOO0FBQ0k7QUFDRztBQU9uQztBQU1ZO0FBQzJDO0FBQ0w7QUFDSTtBQUNOO0FBUTlCO0FBQ21CO0FBQ0M7QUFlakM7QUFVaUI7QUFJSjtBQUlEO0FBTVA7QUFJTTtBQUNzQztBQUMxQjtBQUNWO0FBQ0M7QUFDRTtBQUNnQjtBQUNBO0FBSXZCO0FBQzZCO0FBQ0Y7QUFDQTtBQUNFO0FBQ1E7QUFDaEI7QUFDQTtBQUNZO0FBQ1I7QUFDUTtBQUNaO0FBQ007QUFJMUI7QUFDc0I7QUFDYztBQUluQztBQUNXO0FBQ3lCO0FBQzlCO0FBU3BCO0FBQ2dDO0FBQ0c7QUFFRjtBQUNJO0FBQ1k7QUFDeEUsbURBQW1EO0FBSWQ7QUFNTjtBQUVxQjtBQUNiO0FBQ3NCO0FBS3pCO0FBQ2E7QUFPdEI7QUFFOEI7QUFDekQsZ0RBQWdEO0FBQ2hELDJFQUEyRTtBQUVyQjs7Ozs7Ozs7Ozs7OztBQzFMdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVE7QUFDdUI7QUFFL0IsZUFBZTtBQUNnQjtBQUUvQix1QkFBdUI7QUFDd0M7QUFDL0Qsd0JBQXdCO0FBQ3lDO0FBQ2pFLG1DQUFtQztBQUM4QztBQUNqRixxQkFBcUI7QUFDK0I7QUFFcEQsUUFBUTtBQUMyQjtBQUNXO0FBQ047QUFDTjtBQUNZO0FBQ1Q7Ozs7Ozs7Ozs7Ozs7QUNyQnJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRDtBQUNqQjtBQUN1QjtBQUNYO0FBQ0o7QUFDWTtBQUNOO0FBQ2E7QUFDQTtBQUNSO0FBQ1g7QUFDSjtBQUNZO0FBQ1E7QUFDTjtBQUNWO0FBQ0U7QUFDUTtBQUNTO0FBQ2Y7QUFDUTtBQUNGO0FBQ1E7QUFDZDtBQUNOO0FBQ2lCO0FBQ0k7QUFDckI7QUFDYztBQUNaO0FBQ0k7QUFDUjtBQUNZO0FBQ0U7QUFDTTtBQUNGO0FBQ2Q7QUFDSjtBQUNZO0FBQ0U7QUFDRTtBQUNZO0FBQ0k7QUFDcEI7QUFDSjtBQUNjO0FBQ1Y7QUFDVjtBQUNRO0FBQ2M7QUFDMUI7QUFDb0I7QUFDUjtBQUNNO0FBQ047QUFDTjtBQUNNO0FBRU07QUFDMEI7QUFDQTtBQUNBO0FBQ2Y7QUFDUjtBQUNIO0FBQ29FO0FBQ1A7QUFDUzs7Ozs7Ozs7Ozs7OztBQ25FN0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF1QjtBQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRDRCO0FBQ1I7QUFHN0M7SUFBeUMsdUNBQVc7SUFDbEQsNkJBQ1MsSUFBbUIsRUFDMUIsVUFBb0M7UUFEN0Isa0NBQW1CO1FBQzFCLDhDQUFvQztRQUZ0QyxZQUlFLGtCQUFNLElBQUksRUFBRSxVQUFVLENBQUMsU0FD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RUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2FBQzNDO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGdEQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FB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QUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtB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QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDZSxnRjs7Ozs7Ozs7Ozs7O0FDdENmO0FBQUE7QUFBQTtBQUFBO0FBQXVLLENBQWdCLHlPQUFHLEVBQUMsQzs7Ozs7Ozs7Ozs7O0FDQTNMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7O0FDQUEsaUQiLCJmaWxlIjoic3VydmV5LnZ1ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInZ1ZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInN1cnZleS12dWVcIiwgW1widnVlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInN1cnZleS12dWVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleVwiXSA9IGZhY3Rvcnkocm9vdFtcIlZ1ZVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Z1ZV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy92dWUudHNcIik7XG4iLCIvKiFcbiAqIFNpZ25hdHVyZSBQYWQgdjIuMy4yXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3ppbWVrL3NpZ25hdHVyZV9wYWRcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNyBTenltb24gTm93YWtcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICpcbiAqIFRoZSBtYWluIGlkZWEgYW5kIHNvbWUgcGFydHMgb2YgdGhlIGNvZGUgKGUuZy4gZHJhd2luZyB2YXJpYWJsZSB3aWR0aCBCw6l6aWVyIGN1cnZlKSBhcmUgdGFrZW4gZnJvbTpcbiAqIGh0dHA6Ly9jb3JuZXIuc3F1YXJldXAuY29tLzIwMTIvMDcvc21vb3RoZXItc2lnbmF0dXJlcy5odG1sXG4gKlxuICogSW1wbGVtZW50YXRpb24gb2YgaW50ZXJwb2xhdGlvbiB1c2luZyBjdWJpYyBCw6l6aWVyIGN1cnZlcyBpcyB0YWtlbiBmcm9tOlxuICogaHR0cDovL2Jlbmtub3dzY29kZS53b3JkcHJlc3MuY29tLzIwMTIvMDkvMTQvcGF0aC1pbnRlcnBvbGF0aW9uLXVzaW5nLWN1YmljLWJlemllci1hbmQtY29udHJvbC1wb2ludC1lc3RpbWF0aW9uLWluLWphdmFzY3JpcHRcbiAqXG4gKiBBbGdvcml0aG0gZm9yIGFwcHJveGltYXRlZCBsZW5ndGggb2YgYSBCw6l6aWVyIGN1cnZlIGlzIHRha2VuIGZyb206XG4gKiBodHRwOi8vd3d3LmxlbW9kYS5uZXQvbWF0aHMvYmV6aWVyLWxlbmd0aC9pbmRleC5odG1sXG4gKlxuICovXG5cbmZ1bmN0aW9uIFBvaW50KHgsIHksIHRpbWUpIHtcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbiAgdGhpcy50aW1lID0gdGltZSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuUG9pbnQucHJvdG90eXBlLnZlbG9jaXR5RnJvbSA9IGZ1bmN0aW9uIChzdGFydCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSBzdGFydC50aW1lID8gdGhpcy5kaXN0YW5jZVRvKHN0YXJ0KSAvICh0aGlzLnRpbWUgLSBzdGFydC50aW1lKSA6IDE7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGlzdGFuY2VUbyA9IGZ1bmN0aW9uIChzdGFydCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMueCAtIHN0YXJ0LngsIDIpICsgTWF0aC5wb3codGhpcy55IC0gc3RhcnQueSwgMikpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICByZXR1cm4gdGhpcy54ID09PSBvdGhlci54ICYmIHRoaXMueSA9PT0gb3RoZXIueSAmJiB0aGlzLnRpbWUgPT09IG90aGVyLnRpbWU7XG59O1xuXG5mdW5jdGlvbiBCZXppZXIoc3RhcnRQb2ludCwgY29udHJvbDEsIGNvbnRyb2wyLCBlbmRQb2ludCkge1xuICB0aGlzLnN0YXJ0UG9pbnQgPSBzdGFydFBvaW50O1xuICB0aGlzLmNvbnRyb2wxID0gY29udHJvbDE7XG4gIHRoaXMuY29udHJvbDIgPSBjb250cm9sMjtcbiAgdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50O1xufVxuXG4vLyBSZXR1cm5zIGFwcHJveGltYXRlZCBsZW5ndGguXG5CZXppZXIucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0ZXBzID0gMTA7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgcHggPSB2b2lkIDA7XG4gIHZhciBweSA9IHZvaWQgMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8PSBzdGVwczsgaSArPSAxKSB7XG4gICAgdmFyIHQgPSBpIC8gc3RlcHM7XG4gICAgdmFyIGN4ID0gdGhpcy5fcG9pbnQodCwgdGhpcy5zdGFydFBvaW50LngsIHRoaXMuY29udHJvbDEueCwgdGhpcy5jb250cm9sMi54LCB0aGlzLmVuZFBvaW50LngpO1xuICAgIHZhciBjeSA9IHRoaXMuX3BvaW50KHQsIHRoaXMuc3RhcnRQb2ludC55LCB0aGlzLmNvbnRyb2wxLnksIHRoaXMuY29udHJvbDIueSwgdGhpcy5lbmRQb2ludC55KTtcbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIHZhciB4ZGlmZiA9IGN4IC0gcHg7XG4gICAgICB2YXIgeWRpZmYgPSBjeSAtIHB5O1xuICAgICAgbGVuZ3RoICs9IE1hdGguc3FydCh4ZGlmZiAqIHhkaWZmICsgeWRpZmYgKiB5ZGlmZik7XG4gICAgfVxuICAgIHB4ID0gY3g7XG4gICAgcHkgPSBjeTtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1tdWx0aS1zcGFjZXMsIHNwYWNlLWluLXBhcmVucyAqL1xuQmV6aWVyLnByb3RvdHlwZS5fcG9pbnQgPSBmdW5jdGlvbiAodCwgc3RhcnQsIGMxLCBjMiwgZW5kKSB7XG4gIHJldHVybiBzdGFydCAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSArIDMuMCAqIGMxICogKDEuMCAtIHQpICogKDEuMCAtIHQpICogdCArIDMuMCAqIGMyICogKDEuMCAtIHQpICogdCAqIHQgKyBlbmQgKiB0ICogdCAqIHQ7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzA3ODQwMS84MTU1MDdcbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24gbGF0ZXIoKSB7XG4gICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IERhdGUubm93KCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFNpZ25hdHVyZVBhZChjYW52YXMsIG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCA9IG9wdHMudmVsb2NpdHlGaWx0ZXJXZWlnaHQgfHwgMC43O1xuICB0aGlzLm1pbldpZHRoID0gb3B0cy5taW5XaWR0aCB8fCAwLjU7XG4gIHRoaXMubWF4V2lkdGggPSBvcHRzLm1heFdpZHRoIHx8IDIuNTtcbiAgdGhpcy50aHJvdHRsZSA9ICd0aHJvdHRsZScgaW4gb3B0cyA/IG9wdHMudGhyb3R0bGUgOiAxNjsgLy8gaW4gbWlsaXNlY29uZHNcbiAgdGhpcy5taW5EaXN0YW5jZSA9ICdtaW5EaXN0YW5jZScgaW4gb3B0cyA/IG9wdHMubWluRGlzdGFuY2UgOiA1O1xuXG4gIGlmICh0aGlzLnRocm90dGxlKSB7XG4gICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZSA9IHRocm90dGxlKFNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZSwgdGhpcy50aHJvdHRsZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZSA9IFNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZTtcbiAgfVxuXG4gIHRoaXMuZG90U2l6ZSA9IG9wdHMuZG90U2l6ZSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLm1pbldpZHRoICsgdGhpcy5tYXhXaWR0aCkgLyAyO1xuICB9O1xuICB0aGlzLnBlbkNvbG9yID0gb3B0cy5wZW5Db2xvciB8fCAnYmxhY2snO1xuICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdHMuYmFja2dyb3VuZENvbG9yIHx8ICdyZ2JhKDAsMCwwLDApJztcbiAgdGhpcy5vbkJlZ2luID0gb3B0cy5vbkJlZ2luO1xuICB0aGlzLm9uRW5kID0gb3B0cy5vbkVuZDtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2N0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICB0aGlzLmNsZWFyKCk7XG5cbiAgLy8gV2UgbmVlZCBhZGQgdGhlc2UgaW5saW5lIHNvIHRoZXkgYXJlIGF2YWlsYWJsZSB0byB1bmJpbmQgd2hpbGUgc3RpbGwgaGF2aW5nXG4gIC8vIGFjY2VzcyB0byAnc2VsZicgd2UgY291bGQgdXNlIF8uYmluZCBidXQgaXQncyBub3Qgd29ydGggYWRkaW5nIGEgZGVwZW5kZW5jeS5cbiAgdGhpcy5faGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LndoaWNoID09PSAxKSB7XG4gICAgICBzZWxmLl9tb3VzZUJ1dHRvbkRvd24gPSB0cnVlO1xuICAgICAgc2VsZi5fc3Ryb2tlQmVnaW4oZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLl9oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoc2VsZi5fbW91c2VCdXR0b25Eb3duKSB7XG4gICAgICBzZWxmLl9zdHJva2VNb3ZlVXBkYXRlKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gMSAmJiBzZWxmLl9tb3VzZUJ1dHRvbkRvd24pIHtcbiAgICAgIHNlbGYuX21vdXNlQnV0dG9uRG93biA9IGZhbHNlO1xuICAgICAgc2VsZi5fc3Ryb2tlRW5kKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICBzZWxmLl9zdHJva2VCZWdpbih0b3VjaCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuX2hhbmRsZVRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB2YXIgdG91Y2ggPSBldmVudC50YXJnZXRUb3VjaGVzWzBdO1xuICAgIHNlbGYuX3N0cm9rZU1vdmVVcGRhdGUodG91Y2gpO1xuICB9O1xuXG4gIHRoaXMuX2hhbmRsZVRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHdhc0NhbnZhc1RvdWNoZWQgPSBldmVudC50YXJnZXQgPT09IHNlbGYuX2NhbnZhcztcbiAgICBpZiAod2FzQ2FudmFzVG91Y2hlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNlbGYuX3N0cm9rZUVuZChldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEVuYWJsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnQgaGFuZGxlcnNcbiAgdGhpcy5vbigpO1xufVxuXG4vLyBQdWJsaWMgbWV0aG9kc1xuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN0eCA9IHRoaXMuX2N0eDtcbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICBjdHguZmlsbFN0eWxlID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgdGhpcy5fZGF0YSA9IFtdO1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLl9pc0VtcHR5ID0gdHJ1ZTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuZnJvbURhdGFVUkwgPSBmdW5jdGlvbiAoZGF0YVVybCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgdmFyIHJhdGlvID0gb3B0aW9ucy5yYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IHRoaXMuX2NhbnZhcy53aWR0aCAvIHJhdGlvO1xuICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgdGhpcy5fY2FudmFzLmhlaWdodCAvIHJhdGlvO1xuXG4gIHRoaXMuX3Jlc2V0KCk7XG4gIGltYWdlLnNyYyA9IGRhdGFVcmw7XG4gIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfdGhpcy5fY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gIH07XG4gIHRoaXMuX2lzRW1wdHkgPSBmYWxzZTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUudG9EYXRhVVJMID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgdmFyIF9jYW52YXM7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW1hZ2Uvc3ZnK3htbCc6XG4gICAgICByZXR1cm4gdGhpcy5fdG9TVkcoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG9wdGlvbnMgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIG9wdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKF9jYW52YXMgPSB0aGlzLl9jYW52YXMpLnRvRGF0YVVSTC5hcHBseShfY2FudmFzLCBbdHlwZV0uY29uY2F0KG9wdGlvbnMpKTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5faGFuZGxlTW91c2VFdmVudHMoKTtcbiAgdGhpcy5faGFuZGxlVG91Y2hFdmVudHMoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5faGFuZGxlTW91c2VEb3duKTtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSk7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcblxuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQpO1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlVG91Y2hNb3ZlKTtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5faGFuZGxlVG91Y2hFbmQpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5faXNFbXB0eTtcbn07XG5cbi8vIFByaXZhdGUgbWV0aG9kc1xuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlQmVnaW4gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdGhpcy5fZGF0YS5wdXNoKFtdKTtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5fc3Ryb2tlVXBkYXRlKGV2ZW50KTtcblxuICBpZiAodHlwZW9mIHRoaXMub25CZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25CZWdpbihldmVudCk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICB2YXIgeCA9IGV2ZW50LmNsaWVudFg7XG4gIHZhciB5ID0gZXZlbnQuY2xpZW50WTtcblxuICB2YXIgcG9pbnQgPSB0aGlzLl9jcmVhdGVQb2ludCh4LCB5KTtcbiAgdmFyIGxhc3RQb2ludEdyb3VwID0gdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdO1xuICB2YXIgbGFzdFBvaW50ID0gbGFzdFBvaW50R3JvdXAgJiYgbGFzdFBvaW50R3JvdXBbbGFzdFBvaW50R3JvdXAubGVuZ3RoIC0gMV07XG4gIHZhciBpc0xhc3RQb2ludFRvb0Nsb3NlID0gbGFzdFBvaW50ICYmIHBvaW50LmRpc3RhbmNlVG8obGFzdFBvaW50KSA8IHRoaXMubWluRGlzdGFuY2U7XG5cbiAgLy8gU2tpcCB0aGlzIHBvaW50IGlmIGl0J3MgdG9vIGNsb3NlIHRvIHRoZSBwcmV2aW91cyBvbmVcbiAgaWYgKCEobGFzdFBvaW50ICYmIGlzTGFzdFBvaW50VG9vQ2xvc2UpKSB7XG4gICAgdmFyIF9hZGRQb2ludCA9IHRoaXMuX2FkZFBvaW50KHBvaW50KSxcbiAgICAgICAgY3VydmUgPSBfYWRkUG9pbnQuY3VydmUsXG4gICAgICAgIHdpZHRocyA9IF9hZGRQb2ludC53aWR0aHM7XG5cbiAgICBpZiAoY3VydmUgJiYgd2lkdGhzKSB7XG4gICAgICB0aGlzLl9kcmF3Q3VydmUoY3VydmUsIHdpZHRocy5zdGFydCwgd2lkdGhzLmVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdLnB1c2goe1xuICAgICAgeDogcG9pbnQueCxcbiAgICAgIHk6IHBvaW50LnksXG4gICAgICB0aW1lOiBwb2ludC50aW1lLFxuICAgICAgY29sb3I6IHRoaXMucGVuQ29sb3JcbiAgICB9KTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHZhciBjYW5EcmF3Q3VydmUgPSB0aGlzLnBvaW50cy5sZW5ndGggPiAyO1xuICB2YXIgcG9pbnQgPSB0aGlzLnBvaW50c1swXTsgLy8gUG9pbnQgaW5zdGFuY2VcblxuICBpZiAoIWNhbkRyYXdDdXJ2ZSAmJiBwb2ludCkge1xuICAgIHRoaXMuX2RyYXdEb3QocG9pbnQpO1xuICB9XG5cbiAgaWYgKHBvaW50KSB7XG4gICAgdmFyIGxhc3RQb2ludEdyb3VwID0gdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdO1xuICAgIHZhciBsYXN0UG9pbnQgPSBsYXN0UG9pbnRHcm91cFtsYXN0UG9pbnRHcm91cC5sZW5ndGggLSAxXTsgLy8gcGxhaW4gb2JqZWN0XG5cbiAgICAvLyBXaGVuIGRyYXdpbmcgYSBkb3QsIHRoZXJlJ3Mgb25seSBvbmUgcG9pbnQgaW4gYSBncm91cCwgc28gd2l0aG91dCB0aGlzIGNoZWNrXG4gICAgLy8gc3VjaCBncm91cCB3b3VsZCBlbmQgdXAgd2l0aCBleGFjdGx5IHRoZSBzYW1lIDIgcG9pbnRzLlxuICAgIGlmICghcG9pbnQuZXF1YWxzKGxhc3RQb2ludCkpIHtcbiAgICAgIGxhc3RQb2ludEdyb3VwLnB1c2goe1xuICAgICAgICB4OiBwb2ludC54LFxuICAgICAgICB5OiBwb2ludC55LFxuICAgICAgICB0aW1lOiBwb2ludC50aW1lLFxuICAgICAgICBjb2xvcjogdGhpcy5wZW5Db2xvclxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0aGlzLm9uRW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5vbkVuZChldmVudCk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9tb3VzZUJ1dHRvbkRvd24gPSBmYWxzZTtcblxuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5faGFuZGxlTW91c2VEb3duKTtcbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSk7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBQYXNzIHRvdWNoIGV2ZW50cyB0byBjYW52YXMgZWxlbWVudCBvbiBtb2JpbGUgSUUxMSBhbmQgRWRnZS5cbiAgdGhpcy5fY2FudmFzLnN0eWxlLm1zVG91Y2hBY3Rpb24gPSAnbm9uZSc7XG4gIHRoaXMuX2NhbnZhcy5zdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJztcblxuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQpO1xuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlVG91Y2hNb3ZlKTtcbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5faGFuZGxlVG91Y2hFbmQpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucG9pbnRzID0gW107XG4gIHRoaXMuX2xhc3RWZWxvY2l0eSA9IDA7XG4gIHRoaXMuX2xhc3RXaWR0aCA9ICh0aGlzLm1pbldpZHRoICsgdGhpcy5tYXhXaWR0aCkgLyAyO1xuICB0aGlzLl9jdHguZmlsbFN0eWxlID0gdGhpcy5wZW5Db2xvcjtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2NyZWF0ZVBvaW50ID0gZnVuY3Rpb24gKHgsIHksIHRpbWUpIHtcbiAgdmFyIHJlY3QgPSB0aGlzLl9jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIG5ldyBQb2ludCh4IC0gcmVjdC5sZWZ0LCB5IC0gcmVjdC50b3AsIHRpbWUgfHwgbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fYWRkUG9pbnQgPSBmdW5jdGlvbiAocG9pbnQpIHtcbiAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuICB2YXIgdG1wID0gdm9pZCAwO1xuXG4gIHBvaW50cy5wdXNoKHBvaW50KTtcblxuICBpZiAocG9pbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyBUbyByZWR1Y2UgdGhlIGluaXRpYWwgbGFnIG1ha2UgaXQgd29yayB3aXRoIDMgcG9pbnRzXG4gICAgLy8gYnkgY29weWluZyB0aGUgZmlyc3QgcG9pbnQgdG8gdGhlIGJlZ2lubmluZy5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMykgcG9pbnRzLnVuc2hpZnQocG9pbnRzWzBdKTtcblxuICAgIHRtcCA9IHRoaXMuX2NhbGN1bGF0ZUN1cnZlQ29udHJvbFBvaW50cyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTtcbiAgICB2YXIgYzIgPSB0bXAuYzI7XG4gICAgdG1wID0gdGhpcy5fY2FsY3VsYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pO1xuICAgIHZhciBjMyA9IHRtcC5jMTtcbiAgICB2YXIgY3VydmUgPSBuZXcgQmV6aWVyKHBvaW50c1sxXSwgYzIsIGMzLCBwb2ludHNbMl0pO1xuICAgIHZhciB3aWR0aHMgPSB0aGlzLl9jYWxjdWxhdGVDdXJ2ZVdpZHRocyhjdXJ2ZSk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSB0aGUgbGlzdCxcbiAgICAvLyBzbyB0aGF0IHdlIGFsd2F5cyBoYXZlIG5vIG1vcmUgdGhhbiA0IHBvaW50cyBpbiBwb2ludHMgYXJyYXkuXG4gICAgcG9pbnRzLnNoaWZ0KCk7XG5cbiAgICByZXR1cm4geyBjdXJ2ZTogY3VydmUsIHdpZHRoczogd2lkdGhzIH07XG4gIH1cblxuICByZXR1cm4ge307XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9jYWxjdWxhdGVDdXJ2ZUNvbnRyb2xQb2ludHMgPSBmdW5jdGlvbiAoczEsIHMyLCBzMykge1xuICB2YXIgZHgxID0gczEueCAtIHMyLng7XG4gIHZhciBkeTEgPSBzMS55IC0gczIueTtcbiAgdmFyIGR4MiA9IHMyLnggLSBzMy54O1xuICB2YXIgZHkyID0gczIueSAtIHMzLnk7XG5cbiAgdmFyIG0xID0geyB4OiAoczEueCArIHMyLngpIC8gMi4wLCB5OiAoczEueSArIHMyLnkpIC8gMi4wIH07XG4gIHZhciBtMiA9IHsgeDogKHMyLnggKyBzMy54KSAvIDIuMCwgeTogKHMyLnkgKyBzMy55KSAvIDIuMCB9O1xuXG4gIHZhciBsMSA9IE1hdGguc3FydChkeDEgKiBkeDEgKyBkeTEgKiBkeTEpO1xuICB2YXIgbDIgPSBNYXRoLnNxcnQoZHgyICogZHgyICsgZHkyICogZHkyKTtcblxuICB2YXIgZHhtID0gbTEueCAtIG0yLng7XG4gIHZhciBkeW0gPSBtMS55IC0gbTIueTtcblxuICB2YXIgayA9IGwyIC8gKGwxICsgbDIpO1xuICB2YXIgY20gPSB7IHg6IG0yLnggKyBkeG0gKiBrLCB5OiBtMi55ICsgZHltICogayB9O1xuXG4gIHZhciB0eCA9IHMyLnggLSBjbS54O1xuICB2YXIgdHkgPSBzMi55IC0gY20ueTtcblxuICByZXR1cm4ge1xuICAgIGMxOiBuZXcgUG9pbnQobTEueCArIHR4LCBtMS55ICsgdHkpLFxuICAgIGMyOiBuZXcgUG9pbnQobTIueCArIHR4LCBtMi55ICsgdHkpXG4gIH07XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9jYWxjdWxhdGVDdXJ2ZVdpZHRocyA9IGZ1bmN0aW9uIChjdXJ2ZSkge1xuICB2YXIgc3RhcnRQb2ludCA9IGN1cnZlLnN0YXJ0UG9pbnQ7XG4gIHZhciBlbmRQb2ludCA9IGN1cnZlLmVuZFBvaW50O1xuICB2YXIgd2lkdGhzID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgdmFyIHZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCAqIGVuZFBvaW50LnZlbG9jaXR5RnJvbShzdGFydFBvaW50KSArICgxIC0gdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCkgKiB0aGlzLl9sYXN0VmVsb2NpdHk7XG5cbiAgdmFyIG5ld1dpZHRoID0gdGhpcy5fc3Ryb2tlV2lkdGgodmVsb2NpdHkpO1xuXG4gIHdpZHRocy5zdGFydCA9IHRoaXMuX2xhc3RXaWR0aDtcbiAgd2lkdGhzLmVuZCA9IG5ld1dpZHRoO1xuXG4gIHRoaXMuX2xhc3RWZWxvY2l0eSA9IHZlbG9jaXR5O1xuICB0aGlzLl9sYXN0V2lkdGggPSBuZXdXaWR0aDtcblxuICByZXR1cm4gd2lkdGhzO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlV2lkdGggPSBmdW5jdGlvbiAodmVsb2NpdHkpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHRoaXMubWF4V2lkdGggLyAodmVsb2NpdHkgKyAxKSwgdGhpcy5taW5XaWR0aCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9kcmF3UG9pbnQgPSBmdW5jdGlvbiAoeCwgeSwgc2l6ZSkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXG4gIGN0eC5tb3ZlVG8oeCwgeSk7XG4gIGN0eC5hcmMoeCwgeSwgc2l6ZSwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgdGhpcy5faXNFbXB0eSA9IGZhbHNlO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fZHJhd0N1cnZlID0gZnVuY3Rpb24gKGN1cnZlLCBzdGFydFdpZHRoLCBlbmRXaWR0aCkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuICB2YXIgd2lkdGhEZWx0YSA9IGVuZFdpZHRoIC0gc3RhcnRXaWR0aDtcbiAgdmFyIGRyYXdTdGVwcyA9IE1hdGguZmxvb3IoY3VydmUubGVuZ3RoKCkpO1xuXG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYXdTdGVwczsgaSArPSAxKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBCZXppZXIgKHgsIHkpIGNvb3JkaW5hdGUgZm9yIHRoaXMgc3RlcC5cbiAgICB2YXIgdCA9IGkgLyBkcmF3U3RlcHM7XG4gICAgdmFyIHR0ID0gdCAqIHQ7XG4gICAgdmFyIHR0dCA9IHR0ICogdDtcbiAgICB2YXIgdSA9IDEgLSB0O1xuICAgIHZhciB1dSA9IHUgKiB1O1xuICAgIHZhciB1dXUgPSB1dSAqIHU7XG5cbiAgICB2YXIgeCA9IHV1dSAqIGN1cnZlLnN0YXJ0UG9pbnQueDtcbiAgICB4ICs9IDMgKiB1dSAqIHQgKiBjdXJ2ZS5jb250cm9sMS54O1xuICAgIHggKz0gMyAqIHUgKiB0dCAqIGN1cnZlLmNvbnRyb2wyLng7XG4gICAgeCArPSB0dHQgKiBjdXJ2ZS5lbmRQb2ludC54O1xuXG4gICAgdmFyIHkgPSB1dXUgKiBjdXJ2ZS5zdGFydFBvaW50Lnk7XG4gICAgeSArPSAzICogdXUgKiB0ICogY3VydmUuY29udHJvbDEueTtcbiAgICB5ICs9IDMgKiB1ICogdHQgKiBjdXJ2ZS5jb250cm9sMi55O1xuICAgIHkgKz0gdHR0ICogY3VydmUuZW5kUG9pbnQueTtcblxuICAgIHZhciB3aWR0aCA9IHN0YXJ0V2lkdGggKyB0dHQgKiB3aWR0aERlbHRhO1xuICAgIHRoaXMuX2RyYXdQb2ludCh4LCB5LCB3aWR0aCk7XG4gIH1cblxuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9kcmF3RG90ID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gIHZhciBjdHggPSB0aGlzLl9jdHg7XG4gIHZhciB3aWR0aCA9IHR5cGVvZiB0aGlzLmRvdFNpemUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmRvdFNpemUoKSA6IHRoaXMuZG90U2l6ZTtcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIHRoaXMuX2RyYXdQb2ludChwb2ludC54LCBwb2ludC55LCB3aWR0aCk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbiAgY3R4LmZpbGwoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2Zyb21EYXRhID0gZnVuY3Rpb24gKHBvaW50R3JvdXBzLCBkcmF3Q3VydmUsIGRyYXdEb3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludEdyb3Vwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBncm91cCA9IHBvaW50R3JvdXBzW2ldO1xuXG4gICAgaWYgKGdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIHJhd1BvaW50ID0gZ3JvdXBbal07XG4gICAgICAgIHZhciBwb2ludCA9IG5ldyBQb2ludChyYXdQb2ludC54LCByYXdQb2ludC55LCByYXdQb2ludC50aW1lKTtcbiAgICAgICAgdmFyIGNvbG9yID0gcmF3UG9pbnQuY29sb3I7XG5cbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBGaXJzdCBwb2ludCBpbiBhIGdyb3VwLiBOb3RoaW5nIHRvIGRyYXcgeWV0LlxuXG4gICAgICAgICAgLy8gQWxsIHBvaW50cyBpbiB0aGUgZ3JvdXAgaGF2ZSB0aGUgc2FtZSBjb2xvciwgc28gaXQncyBlbm91Z2ggdG8gc2V0XG4gICAgICAgICAgLy8gcGVuQ29sb3IganVzdCBhdCB0aGUgYmVnaW5uaW5nLlxuICAgICAgICAgIHRoaXMucGVuQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICB0aGlzLl9yZXNldCgpO1xuXG4gICAgICAgICAgdGhpcy5fYWRkUG9pbnQocG9pbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGogIT09IGdyb3VwLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBNaWRkbGUgcG9pbnQgaW4gYSBncm91cC5cbiAgICAgICAgICB2YXIgX2FkZFBvaW50MiA9IHRoaXMuX2FkZFBvaW50KHBvaW50KSxcbiAgICAgICAgICAgICAgY3VydmUgPSBfYWRkUG9pbnQyLmN1cnZlLFxuICAgICAgICAgICAgICB3aWR0aHMgPSBfYWRkUG9pbnQyLndpZHRocztcblxuICAgICAgICAgIGlmIChjdXJ2ZSAmJiB3aWR0aHMpIHtcbiAgICAgICAgICAgIGRyYXdDdXJ2ZShjdXJ2ZSwgd2lkdGhzLCBjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIExhc3QgcG9pbnQgaW4gYSBncm91cC4gRG8gbm90aGluZy5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgdmFyIF9yYXdQb2ludCA9IGdyb3VwWzBdO1xuICAgICAgZHJhd0RvdChfcmF3UG9pbnQpO1xuICAgIH1cbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fdG9TVkcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIHZhciBwb2ludEdyb3VwcyA9IHRoaXMuX2RhdGE7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG4gIHZhciByYXRpbyA9IE1hdGgubWF4KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEsIDEpO1xuICB2YXIgbWluWCA9IDA7XG4gIHZhciBtaW5ZID0gMDtcbiAgdmFyIG1heFggPSBjYW52YXMud2lkdGggLyByYXRpbztcbiAgdmFyIG1heFkgPSBjYW52YXMuaGVpZ2h0IC8gcmF0aW87XG4gIHZhciBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuXG4gIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCBjYW52YXMud2lkdGgpO1xuICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2hlaWdodCcsIGNhbnZhcy5oZWlnaHQpO1xuXG4gIHRoaXMuX2Zyb21EYXRhKHBvaW50R3JvdXBzLCBmdW5jdGlvbiAoY3VydmUsIHdpZHRocywgY29sb3IpIHtcbiAgICB2YXIgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3BhdGgnKTtcblxuICAgIC8vIE5lZWQgdG8gY2hlY2sgY3VydmUgZm9yIE5hTiB2YWx1ZXMsIHRoZXNlIHBvcCB1cCB3aGVuIGRyYXdpbmdcbiAgICAvLyBsaW5lcyBvbiB0aGUgY2FudmFzIHRoYXQgYXJlIG5vdCBjb250aW51b3VzLiBFLmcuIFNoYXJwIGNvcm5lcnNcbiAgICAvLyBvciBzdG9wcGluZyBtaWQtc3Ryb2tlIGFuZCB0aGFuIGNvbnRpbnVpbmcgd2l0aG91dCBsaWZ0aW5nIG1vdXNlLlxuICAgIGlmICghaXNOYU4oY3VydmUuY29udHJvbDEueCkgJiYgIWlzTmFOKGN1cnZlLmNvbnRyb2wxLnkpICYmICFpc05hTihjdXJ2ZS5jb250cm9sMi54KSAmJiAhaXNOYU4oY3VydmUuY29udHJvbDIueSkpIHtcbiAgICAgIHZhciBhdHRyID0gJ00gJyArIGN1cnZlLnN0YXJ0UG9pbnQueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuc3RhcnRQb2ludC55LnRvRml4ZWQoMykgKyAnICcgKyAoJ0MgJyArIGN1cnZlLmNvbnRyb2wxLngudG9GaXhlZCgzKSArICcsJyArIGN1cnZlLmNvbnRyb2wxLnkudG9GaXhlZCgzKSArICcgJykgKyAoY3VydmUuY29udHJvbDIueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuY29udHJvbDIueS50b0ZpeGVkKDMpICsgJyAnKSArIChjdXJ2ZS5lbmRQb2ludC54LnRvRml4ZWQoMykgKyAnLCcgKyBjdXJ2ZS5lbmRQb2ludC55LnRvRml4ZWQoMykpO1xuXG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIGF0dHIpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICh3aWR0aHMuZW5kICogMi4yNSkudG9GaXhlZCgzKSk7XG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgY29sb3IpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgJ3JvdW5kJyk7XG5cbiAgICAgIHN2Zy5hcHBlbmRDaGlsZChwYXRoKTtcbiAgICB9XG4gIH0sIGZ1bmN0aW9uIChyYXdQb2ludCkge1xuICAgIHZhciBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjaXJjbGUnKTtcbiAgICB2YXIgZG90U2l6ZSA9IHR5cGVvZiBfdGhpczIuZG90U2l6ZSA9PT0gJ2Z1bmN0aW9uJyA/IF90aGlzMi5kb3RTaXplKCkgOiBfdGhpczIuZG90U2l6ZTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdyJywgZG90U2l6ZSk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnY3gnLCByYXdQb2ludC54KTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeScsIHJhd1BvaW50LnkpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCByYXdQb2ludC5jb2xvcik7XG5cbiAgICBzdmcuYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbiAgfSk7XG5cbiAgdmFyIHByZWZpeCA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCc7XG4gIHZhciBoZWFkZXIgPSAnPHN2ZycgKyAnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIicgKyAnIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiJyArICgnIHZpZXdCb3g9XCInICsgbWluWCArICcgJyArIG1pblkgKyAnICcgKyBtYXhYICsgJyAnICsgbWF4WSArICdcIicpICsgKCcgd2lkdGg9XCInICsgbWF4WCArICdcIicpICsgKCcgaGVpZ2h0PVwiJyArIG1heFkgKyAnXCInKSArICc+JztcbiAgdmFyIGJvZHkgPSBzdmcuaW5uZXJIVE1MO1xuXG4gIC8vIElFIGhhY2sgZm9yIG1pc3NpbmcgaW5uZXJIVE1MIHByb3BlcnR5IG9uIFNWR0VsZW1lbnRcbiAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBkdW1teSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2R1bW15Jyk7XG4gICAgdmFyIG5vZGVzID0gc3ZnLmNoaWxkTm9kZXM7XG4gICAgZHVtbXkuaW5uZXJIVE1MID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBkdW1teS5hcHBlbmRDaGlsZChub2Rlc1tpXS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIH1cblxuICAgIGJvZHkgPSBkdW1teS5pbm5lckhUTUw7XG4gIH1cblxuICB2YXIgZm9vdGVyID0gJzwvc3ZnPic7XG4gIHZhciBkYXRhID0gaGVhZGVyICsgYm9keSArIGZvb3RlcjtcblxuICByZXR1cm4gcHJlZml4ICsgYnRvYShkYXRhKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuZnJvbURhdGEgPSBmdW5jdGlvbiAocG9pbnRHcm91cHMpIHtcbiAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgdGhpcy5jbGVhcigpO1xuXG4gIHRoaXMuX2Zyb21EYXRhKHBvaW50R3JvdXBzLCBmdW5jdGlvbiAoY3VydmUsIHdpZHRocykge1xuICAgIHJldHVybiBfdGhpczMuX2RyYXdDdXJ2ZShjdXJ2ZSwgd2lkdGhzLnN0YXJ0LCB3aWR0aHMuZW5kKTtcbiAgfSwgZnVuY3Rpb24gKHJhd1BvaW50KSB7XG4gICAgcmV0dXJuIF90aGlzMy5fZHJhd0RvdChyYXdQb2ludCk7XG4gIH0pO1xuXG4gIHRoaXMuX2RhdGEgPSBwb2ludEdyb3Vwcztcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUudG9EYXRhID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fZGF0YTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNpZ25hdHVyZVBhZDtcbiIsIi8qKiFcbiAqIFNvcnRhYmxlIDEuMTMuMFxuICogQGF1dGhvclx0UnViYVhhICAgPHRyYXNoQHJ1YmF4YS5vcmc+XG4gKiBAYXV0aG9yXHRvd2VubSAgICA8b3dlbjIzMzU1QGdtYWlsLmNvbT5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxufVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbnZhciB2ZXJzaW9uID0gXCIxLjEzLjBcIjtcblxuZnVuY3Rpb24gdXNlckFnZW50KHBhdHRlcm4pIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gISFcbiAgICAvKkBfX1BVUkVfXyovXG4gICAgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChwYXR0ZXJuKTtcbiAgfVxufVxuXG52YXIgSUUxMU9yTGVzcyA9IHVzZXJBZ2VudCgvKD86VHJpZGVudC4qcnZbIDpdPzExXFwufG1zaWV8aWVtb2JpbGV8V2luZG93cyBQaG9uZSkvaSk7XG52YXIgRWRnZSA9IHVzZXJBZ2VudCgvRWRnZS9pKTtcbnZhciBGaXJlRm94ID0gdXNlckFnZW50KC9maXJlZm94L2kpO1xudmFyIFNhZmFyaSA9IHVzZXJBZ2VudCgvc2FmYXJpL2kpICYmICF1c2VyQWdlbnQoL2Nocm9tZS9pKSAmJiAhdXNlckFnZW50KC9hbmRyb2lkL2kpO1xudmFyIElPUyA9IHVzZXJBZ2VudCgvaVAoYWR8b2R8aG9uZSkvaSk7XG52YXIgQ2hyb21lRm9yQW5kcm9pZCA9IHVzZXJBZ2VudCgvY2hyb21lL2kpICYmIHVzZXJBZ2VudCgvYW5kcm9pZC9pKTtcblxudmFyIGNhcHR1cmVNb2RlID0ge1xuICBjYXB0dXJlOiBmYWxzZSxcbiAgcGFzc2l2ZTogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIG9uKGVsLCBldmVudCwgZm4pIHtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sICFJRTExT3JMZXNzICYmIGNhcHR1cmVNb2RlKTtcbn1cblxuZnVuY3Rpb24gb2ZmKGVsLCBldmVudCwgZm4pIHtcbiAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sICFJRTExT3JMZXNzICYmIGNhcHR1cmVNb2RlKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyhcbi8qKkhUTUxFbGVtZW50Ki9cbmVsLFxuLyoqU3RyaW5nKi9cbnNlbGVjdG9yKSB7XG4gIGlmICghc2VsZWN0b3IpIHJldHVybjtcbiAgc2VsZWN0b3JbMF0gPT09ICc+JyAmJiAoc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSkpO1xuXG4gIGlmIChlbCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZWwubWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gZWwubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgICB9IGVsc2UgaWYgKGVsLm1zTWF0Y2hlc1NlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9IGVsc2UgaWYgKGVsLndlYmtpdE1hdGNoZXNTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRPckhvc3QoZWwpIHtcbiAgcmV0dXJuIGVsLmhvc3QgJiYgZWwgIT09IGRvY3VtZW50ICYmIGVsLmhvc3Qubm9kZVR5cGUgPyBlbC5ob3N0IDogZWwucGFyZW50Tm9kZTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdChcbi8qKkhUTUxFbGVtZW50Ki9cbmVsLFxuLyoqU3RyaW5nKi9cbnNlbGVjdG9yLFxuLyoqSFRNTEVsZW1lbnQqL1xuY3R4LCBpbmNsdWRlQ1RYKSB7XG4gIGlmIChlbCkge1xuICAgIGN0eCA9IGN0eCB8fCBkb2N1bWVudDtcblxuICAgIGRvIHtcbiAgICAgIGlmIChzZWxlY3RvciAhPSBudWxsICYmIChzZWxlY3RvclswXSA9PT0gJz4nID8gZWwucGFyZW50Tm9kZSA9PT0gY3R4ICYmIG1hdGNoZXMoZWwsIHNlbGVjdG9yKSA6IG1hdGNoZXMoZWwsIHNlbGVjdG9yKSkgfHwgaW5jbHVkZUNUWCAmJiBlbCA9PT0gY3R4KSB7XG4gICAgICAgIHJldHVybiBlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsID09PSBjdHgpIGJyZWFrO1xuICAgICAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuICAgIH0gd2hpbGUgKGVsID0gZ2V0UGFyZW50T3JIb3N0KGVsKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJfU1BBQ0UgPSAvXFxzKy9nO1xuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhlbCwgbmFtZSwgc3RhdGUpIHtcbiAgaWYgKGVsICYmIG5hbWUpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICBlbC5jbGFzc0xpc3Rbc3RhdGUgPyAnYWRkJyA6ICdyZW1vdmUnXShuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9ICgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLnJlcGxhY2UoUl9TUEFDRSwgJyAnKS5yZXBsYWNlKCcgJyArIG5hbWUgKyAnICcsICcgJyk7XG4gICAgICBlbC5jbGFzc05hbWUgPSAoY2xhc3NOYW1lICsgKHN0YXRlID8gJyAnICsgbmFtZSA6ICcnKSkucmVwbGFjZShSX1NQQUNFLCAnICcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjc3MoZWwsIHByb3AsIHZhbCkge1xuICB2YXIgc3R5bGUgPSBlbCAmJiBlbC5zdHlsZTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICBpZiAodmFsID09PSB2b2lkIDApIHtcbiAgICAgIGlmIChkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKSB7XG4gICAgICAgIHZhbCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWwsICcnKTtcbiAgICAgIH0gZWxzZSBpZiAoZWwuY3VycmVudFN0eWxlKSB7XG4gICAgICAgIHZhbCA9IGVsLmN1cnJlbnRTdHlsZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3AgPT09IHZvaWQgMCA/IHZhbCA6IHZhbFtwcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEocHJvcCBpbiBzdHlsZSkgJiYgcHJvcC5pbmRleE9mKCd3ZWJraXQnKSA9PT0gLTEpIHtcbiAgICAgICAgcHJvcCA9ICctd2Via2l0LScgKyBwcm9wO1xuICAgICAgfVxuXG4gICAgICBzdHlsZVtwcm9wXSA9IHZhbCArICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/ICcnIDogJ3B4Jyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hdHJpeChlbCwgc2VsZk9ubHkpIHtcbiAgdmFyIGFwcGxpZWRUcmFuc2Zvcm1zID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcHBsaWVkVHJhbnNmb3JtcyA9IGVsO1xuICB9IGVsc2Uge1xuICAgIGRvIHtcbiAgICAgIHZhciB0cmFuc2Zvcm0gPSBjc3MoZWwsICd0cmFuc2Zvcm0nKTtcblxuICAgICAgaWYgKHRyYW5zZm9ybSAmJiB0cmFuc2Zvcm0gIT09ICdub25lJykge1xuICAgICAgICBhcHBsaWVkVHJhbnNmb3JtcyA9IHRyYW5zZm9ybSArICcgJyArIGFwcGxpZWRUcmFuc2Zvcm1zO1xuICAgICAgfVxuICAgICAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXG4gICAgfSB3aGlsZSAoIXNlbGZPbmx5ICYmIChlbCA9IGVsLnBhcmVudE5vZGUpKTtcbiAgfVxuXG4gIHZhciBtYXRyaXhGbiA9IHdpbmRvdy5ET01NYXRyaXggfHwgd2luZG93LldlYktpdENTU01hdHJpeCB8fCB3aW5kb3cuQ1NTTWF0cml4IHx8IHdpbmRvdy5NU0NTU01hdHJpeDtcbiAgLypqc2hpbnQgLVcwNTYgKi9cblxuICByZXR1cm4gbWF0cml4Rm4gJiYgbmV3IG1hdHJpeEZuKGFwcGxpZWRUcmFuc2Zvcm1zKTtcbn1cblxuZnVuY3Rpb24gZmluZChjdHgsIHRhZ05hbWUsIGl0ZXJhdG9yKSB7XG4gIGlmIChjdHgpIHtcbiAgICB2YXIgbGlzdCA9IGN0eC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIG4gPSBsaXN0Lmxlbmd0aDtcblxuICAgIGlmIChpdGVyYXRvcikge1xuICAgICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgaXRlcmF0b3IobGlzdFtpXSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKSB7XG4gIHZhciBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcblxuICBpZiAoc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbn1cbi8qKlxuICogUmV0dXJucyB0aGUgXCJib3VuZGluZyBjbGllbnQgcmVjdFwiIG9mIGdpdmVuIGVsZW1lbnRcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgd2hvc2UgYm91bmRpbmdDbGllbnRSZWN0IGlzIHdhbnRlZFxuICogQHBhcmFtICB7W0Jvb2xlYW5dfSByZWxhdGl2ZVRvQ29udGFpbmluZ0Jsb2NrICBXaGV0aGVyIHRoZSByZWN0IHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY29udGFpbmluZyBibG9jayBvZiAoaW5jbHVkaW5nKSB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gIHtbQm9vbGVhbl19IHJlbGF0aXZlVG9Ob25TdGF0aWNQYXJlbnQgIFdoZXRoZXIgdGhlIHJlY3Qgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSByZWxhdGl2ZSBwYXJlbnQgb2YgKGluY2x1ZGluZykgdGhlIGNvbnRhaWVuclxuICogQHBhcmFtICB7W0Jvb2xlYW5dfSB1bmRvU2NhbGUgICAgICAgICAgICAgICAgICBXaGV0aGVyIHRoZSBjb250YWluZXIncyBzY2FsZSgpIHNob3VsZCBiZSB1bmRvbmVcbiAqIEBwYXJhbSAge1tIVE1MRWxlbWVudF19IGNvbnRhaW5lciAgICAgICAgICAgICAgVGhlIHBhcmVudCB0aGUgZWxlbWVudCB3aWxsIGJlIHBsYWNlZCBpblxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYm91bmRpbmdDbGllbnRSZWN0IG9mIGVsLCB3aXRoIHNwZWNpZmllZCBhZGp1c3RtZW50c1xuICovXG5cblxuZnVuY3Rpb24gZ2V0UmVjdChlbCwgcmVsYXRpdmVUb0NvbnRhaW5pbmdCbG9jaywgcmVsYXRpdmVUb05vblN0YXRpY1BhcmVudCwgdW5kb1NjYWxlLCBjb250YWluZXIpIHtcbiAgaWYgKCFlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgJiYgZWwgIT09IHdpbmRvdykgcmV0dXJuO1xuICB2YXIgZWxSZWN0LCB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQsIGhlaWdodCwgd2lkdGg7XG5cbiAgaWYgKGVsICE9PSB3aW5kb3cgJiYgZWwucGFyZW50Tm9kZSAmJiBlbCAhPT0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpKSB7XG4gICAgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdG9wID0gZWxSZWN0LnRvcDtcbiAgICBsZWZ0ID0gZWxSZWN0LmxlZnQ7XG4gICAgYm90dG9tID0gZWxSZWN0LmJvdHRvbTtcbiAgICByaWdodCA9IGVsUmVjdC5yaWdodDtcbiAgICBoZWlnaHQgPSBlbFJlY3QuaGVpZ2h0O1xuICAgIHdpZHRoID0gZWxSZWN0LndpZHRoO1xuICB9IGVsc2Uge1xuICAgIHRvcCA9IDA7XG4gICAgbGVmdCA9IDA7XG4gICAgYm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIHJpZ2h0ID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cblxuICBpZiAoKHJlbGF0aXZlVG9Db250YWluaW5nQmxvY2sgfHwgcmVsYXRpdmVUb05vblN0YXRpY1BhcmVudCkgJiYgZWwgIT09IHdpbmRvdykge1xuICAgIC8vIEFkanVzdCBmb3IgdHJhbnNsYXRlKClcbiAgICBjb250YWluZXIgPSBjb250YWluZXIgfHwgZWwucGFyZW50Tm9kZTsgLy8gc29sdmVzICMxMTIzIChzZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNzk1MzgwNi82MDg4MzEyKVxuICAgIC8vIE5vdCBuZWVkZWQgb24gPD0gSUUxMVxuXG4gICAgaWYgKCFJRTExT3JMZXNzKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiAoY3NzKGNvbnRhaW5lciwgJ3RyYW5zZm9ybScpICE9PSAnbm9uZScgfHwgcmVsYXRpdmVUb05vblN0YXRpY1BhcmVudCAmJiBjc3MoY29udGFpbmVyLCAncG9zaXRpb24nKSAhPT0gJ3N0YXRpYycpKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IC8vIFNldCByZWxhdGl2ZSB0byBlZGdlcyBvZiBwYWRkaW5nIGJveCBvZiBjb250YWluZXJcblxuICAgICAgICAgIHRvcCAtPSBjb250YWluZXJSZWN0LnRvcCArIHBhcnNlSW50KGNzcyhjb250YWluZXIsICdib3JkZXItdG9wLXdpZHRoJykpO1xuICAgICAgICAgIGxlZnQgLT0gY29udGFpbmVyUmVjdC5sZWZ0ICsgcGFyc2VJbnQoY3NzKGNvbnRhaW5lciwgJ2JvcmRlci1sZWZ0LXdpZHRoJykpO1xuICAgICAgICAgIGJvdHRvbSA9IHRvcCArIGVsUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgZWxSZWN0LndpZHRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8qIGpzaGludCBib3NzOnRydWUgKi9cblxuICAgICAgfSB3aGlsZSAoY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1bmRvU2NhbGUgJiYgZWwgIT09IHdpbmRvdykge1xuICAgIC8vIEFkanVzdCBmb3Igc2NhbGUoKVxuICAgIHZhciBlbE1hdHJpeCA9IG1hdHJpeChjb250YWluZXIgfHwgZWwpLFxuICAgICAgICBzY2FsZVggPSBlbE1hdHJpeCAmJiBlbE1hdHJpeC5hLFxuICAgICAgICBzY2FsZVkgPSBlbE1hdHJpeCAmJiBlbE1hdHJpeC5kO1xuXG4gICAgaWYgKGVsTWF0cml4KSB7XG4gICAgICB0b3AgLz0gc2NhbGVZO1xuICAgICAgbGVmdCAvPSBzY2FsZVg7XG4gICAgICB3aWR0aCAvPSBzY2FsZVg7XG4gICAgICBoZWlnaHQgLz0gc2NhbGVZO1xuICAgICAgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRvcCxcbiAgICBsZWZ0OiBsZWZ0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIHJpZ2h0OiByaWdodCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGEgc2lkZSBvZiBhbiBlbGVtZW50IGlzIHNjcm9sbGVkIHBhc3QgYSBzaWRlIG9mIGl0cyBwYXJlbnRzXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gIGVsICAgICAgICAgICBUaGUgZWxlbWVudCB3aG8ncyBzaWRlIGJlaW5nIHNjcm9sbGVkIG91dCBvZiB2aWV3IGlzIGluIHF1ZXN0aW9uXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgICAgIGVsU2lkZSAgICAgICBTaWRlIG9mIHRoZSBlbGVtZW50IGluIHF1ZXN0aW9uICgndG9wJywgJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJylcbiAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgcGFyZW50U2lkZSAgIFNpZGUgb2YgdGhlIHBhcmVudCBpbiBxdWVzdGlvbiAoJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbScpXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gICAgICAgICAgICAgICBUaGUgcGFyZW50IHNjcm9sbCBlbGVtZW50IHRoYXQgdGhlIGVsJ3Mgc2lkZSBpcyBzY3JvbGxlZCBwYXN0LCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHN1Y2ggZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gaXNTY3JvbGxlZFBhc3QoZWwsIGVsU2lkZSwgcGFyZW50U2lkZSkge1xuICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWwsIHRydWUpLFxuICAgICAgZWxTaWRlVmFsID0gZ2V0UmVjdChlbClbZWxTaWRlXTtcbiAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICB2YXIgcGFyZW50U2lkZVZhbCA9IGdldFJlY3QocGFyZW50KVtwYXJlbnRTaWRlXSxcbiAgICAgICAgdmlzaWJsZSA9IHZvaWQgMDtcblxuICAgIGlmIChwYXJlbnRTaWRlID09PSAndG9wJyB8fCBwYXJlbnRTaWRlID09PSAnbGVmdCcpIHtcbiAgICAgIHZpc2libGUgPSBlbFNpZGVWYWwgPj0gcGFyZW50U2lkZVZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmlzaWJsZSA9IGVsU2lkZVZhbCA8PSBwYXJlbnRTaWRlVmFsO1xuICAgIH1cblxuICAgIGlmICghdmlzaWJsZSkgcmV0dXJuIHBhcmVudDtcbiAgICBpZiAocGFyZW50ID09PSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCkpIGJyZWFrO1xuICAgIHBhcmVudCA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KHBhcmVudCwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBHZXRzIG50aCBjaGlsZCBvZiBlbCwgaWdub3JpbmcgaGlkZGVuIGNoaWxkcmVuLCBzb3J0YWJsZSdzIGVsZW1lbnRzIChkb2VzIG5vdCBpZ25vcmUgY2xvbmUgaWYgaXQncyB2aXNpYmxlKVxuICogYW5kIG5vbi1kcmFnZ2FibGUgZWxlbWVudHNcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICAgICBUaGUgcGFyZW50IGVsZW1lbnRcbiAqIEBwYXJhbSAge051bWJlcn0gY2hpbGROdW0gICAgICBUaGUgaW5kZXggb2YgdGhlIGNoaWxkXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgICAgICAgUGFyZW50IFNvcnRhYmxlJ3Mgb3B0aW9uc1xuICogQHJldHVybiB7SFRNTEVsZW1lbnR9ICAgICAgICAgIFRoZSBjaGlsZCBhdCBpbmRleCBjaGlsZE51bSwgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENoaWxkKGVsLCBjaGlsZE51bSwgb3B0aW9ucykge1xuICB2YXIgY3VycmVudENoaWxkID0gMCxcbiAgICAgIGkgPSAwLFxuICAgICAgY2hpbGRyZW4gPSBlbC5jaGlsZHJlbjtcblxuICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGlmIChjaGlsZHJlbltpXS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiYgY2hpbGRyZW5baV0gIT09IFNvcnRhYmxlLmdob3N0ICYmIGNoaWxkcmVuW2ldICE9PSBTb3J0YWJsZS5kcmFnZ2VkICYmIGNsb3Nlc3QoY2hpbGRyZW5baV0sIG9wdGlvbnMuZHJhZ2dhYmxlLCBlbCwgZmFsc2UpKSB7XG4gICAgICBpZiAoY3VycmVudENoaWxkID09PSBjaGlsZE51bSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW5baV07XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRDaGlsZCsrO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGNoaWxkIGluIHRoZSBlbCwgaWdub3JpbmcgZ2hvc3RFbCBvciBpbnZpc2libGUgZWxlbWVudHMgKGNsb25lcylcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICAgICBQYXJlbnQgZWxlbWVudFxuICogQHBhcmFtICB7c2VsZWN0b3J9IHNlbGVjdG9yICAgIEFueSBvdGhlciBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gICAgICAgICAgVGhlIGxhc3QgY2hpbGQsIGlnbm9yaW5nIGdob3N0RWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGxhc3RDaGlsZChlbCwgc2VsZWN0b3IpIHtcbiAgdmFyIGxhc3QgPSBlbC5sYXN0RWxlbWVudENoaWxkO1xuXG4gIHdoaWxlIChsYXN0ICYmIChsYXN0ID09PSBTb3J0YWJsZS5naG9zdCB8fCBjc3MobGFzdCwgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IHNlbGVjdG9yICYmICFtYXRjaGVzKGxhc3QsIHNlbGVjdG9yKSkpIHtcbiAgICBsYXN0ID0gbGFzdC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3QgfHwgbnVsbDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggb2YgYW4gZWxlbWVudCB3aXRoaW4gaXRzIHBhcmVudCBmb3IgYSBzZWxlY3RlZCBzZXQgb2ZcbiAqIGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxcbiAqIEBwYXJhbSAge3NlbGVjdG9yfSBzZWxlY3RvclxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxuZnVuY3Rpb24gaW5kZXgoZWwsIHNlbGVjdG9yKSB7XG4gIHZhciBpbmRleCA9IDA7XG5cbiAgaWYgKCFlbCB8fCAhZWwucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cblxuICB3aGlsZSAoZWwgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgaWYgKGVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdURU1QTEFURScgJiYgZWwgIT09IFNvcnRhYmxlLmNsb25lICYmICghc2VsZWN0b3IgfHwgbWF0Y2hlcyhlbCwgc2VsZWN0b3IpKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbCBvZmZzZXQgb2YgdGhlIGdpdmVuIGVsZW1lbnQsIGFkZGVkIHdpdGggYWxsIHRoZSBzY3JvbGwgb2Zmc2V0cyBvZiBwYXJlbnQgZWxlbWVudHMuXG4gKiBUaGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gcmVhbCBwaXhlbHMuXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgICBPZmZzZXRzIGluIHRoZSBmb3JtYXQgb2YgW2xlZnQsIHRvcF1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFJlbGF0aXZlU2Nyb2xsT2Zmc2V0KGVsKSB7XG4gIHZhciBvZmZzZXRMZWZ0ID0gMCxcbiAgICAgIG9mZnNldFRvcCA9IDAsXG4gICAgICB3aW5TY3JvbGxlciA9IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcblxuICBpZiAoZWwpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgZWxNYXRyaXggPSBtYXRyaXgoZWwpLFxuICAgICAgICAgIHNjYWxlWCA9IGVsTWF0cml4LmEsXG4gICAgICAgICAgc2NhbGVZID0gZWxNYXRyaXguZDtcbiAgICAgIG9mZnNldExlZnQgKz0gZWwuc2Nyb2xsTGVmdCAqIHNjYWxlWDtcbiAgICAgIG9mZnNldFRvcCArPSBlbC5zY3JvbGxUb3AgKiBzY2FsZVk7XG4gICAgfSB3aGlsZSAoZWwgIT09IHdpblNjcm9sbGVyICYmIChlbCA9IGVsLnBhcmVudE5vZGUpKTtcbiAgfVxuXG4gIHJldHVybiBbb2Zmc2V0TGVmdCwgb2Zmc2V0VG9wXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG9iamVjdCB3aXRoaW4gdGhlIGdpdmVuIGFycmF5XG4gKiBAcGFyYW0gIHtBcnJheX0gYXJyICAgQXJyYXkgdGhhdCBtYXkgb3IgbWF5IG5vdCBob2xkIHRoZSBvYmplY3RcbiAqIEBwYXJhbSAge09iamVjdH0gb2JqICBBbiBvYmplY3QgdGhhdCBoYXMgYSBrZXktdmFsdWUgcGFpciB1bmlxdWUgdG8gYW5kIGlkZW50aWNhbCB0byBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBvYmplY3QgeW91IHdhbnQgdG8gZmluZFxuICogQHJldHVybiB7TnVtYmVyfSAgICAgIFRoZSBpbmRleCBvZiB0aGUgb2JqZWN0IGluIHRoZSBhcnJheSwgb3IgLTFcbiAqL1xuXG5cbmZ1bmN0aW9uIGluZGV4T2ZPYmplY3QoYXJyLCBvYmopIHtcbiAgZm9yICh2YXIgaSBpbiBhcnIpIHtcbiAgICBpZiAoIWFyci5oYXNPd25Qcm9wZXJ0eShpKSkgY29udGludWU7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkgJiYgb2JqW2tleV0gPT09IGFycltpXVtrZXldKSByZXR1cm4gTnVtYmVyKGkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWwsIGluY2x1ZGVTZWxmKSB7XG4gIC8vIHNraXAgdG8gd2luZG93XG4gIGlmICghZWwgfHwgIWVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkgcmV0dXJuIGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbiAgdmFyIGVsZW0gPSBlbDtcbiAgdmFyIGdvdFNlbGYgPSBmYWxzZTtcblxuICBkbyB7XG4gICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBnZXQgZWxlbSBjc3MgaWYgaXQgaXNuJ3QgZXZlbiBvdmVyZmxvd2luZyBpbiB0aGUgZmlyc3QgcGxhY2UgKHBlcmZvcm1hbmNlKVxuICAgIGlmIChlbGVtLmNsaWVudFdpZHRoIDwgZWxlbS5zY3JvbGxXaWR0aCB8fCBlbGVtLmNsaWVudEhlaWdodCA8IGVsZW0uc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICB2YXIgZWxlbUNTUyA9IGNzcyhlbGVtKTtcblxuICAgICAgaWYgKGVsZW0uY2xpZW50V2lkdGggPCBlbGVtLnNjcm9sbFdpZHRoICYmIChlbGVtQ1NTLm92ZXJmbG93WCA9PSAnYXV0bycgfHwgZWxlbUNTUy5vdmVyZmxvd1ggPT0gJ3Njcm9sbCcpIHx8IGVsZW0uY2xpZW50SGVpZ2h0IDwgZWxlbS5zY3JvbGxIZWlnaHQgJiYgKGVsZW1DU1Mub3ZlcmZsb3dZID09ICdhdXRvJyB8fCBlbGVtQ1NTLm92ZXJmbG93WSA9PSAnc2Nyb2xsJykpIHtcbiAgICAgICAgaWYgKCFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCB8fCBlbGVtID09PSBkb2N1bWVudC5ib2R5KSByZXR1cm4gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuICAgICAgICBpZiAoZ290U2VsZiB8fCBpbmNsdWRlU2VsZikgcmV0dXJuIGVsZW07XG4gICAgICAgIGdvdFNlbGYgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cbiAgfSB3aGlsZSAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSk7XG5cbiAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGRzdCwgc3JjKSB7XG4gIGlmIChkc3QgJiYgc3JjKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgaWYgKHNyYy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGRzdFtrZXldID0gc3JjW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRzdDtcbn1cblxuZnVuY3Rpb24gaXNSZWN0RXF1YWwocmVjdDEsIHJlY3QyKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHJlY3QxLnRvcCkgPT09IE1hdGgucm91bmQocmVjdDIudG9wKSAmJiBNYXRoLnJvdW5kKHJlY3QxLmxlZnQpID09PSBNYXRoLnJvdW5kKHJlY3QyLmxlZnQpICYmIE1hdGgucm91bmQocmVjdDEuaGVpZ2h0KSA9PT0gTWF0aC5yb3VuZChyZWN0Mi5oZWlnaHQpICYmIE1hdGgucm91bmQocmVjdDEud2lkdGgpID09PSBNYXRoLnJvdW5kKHJlY3QyLndpZHRoKTtcbn1cblxudmFyIF90aHJvdHRsZVRpbWVvdXQ7XG5cbmZ1bmN0aW9uIHRocm90dGxlKGNhbGxiYWNrLCBtcykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghX3Rocm90dGxlVGltZW91dCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbChfdGhpcywgYXJnc1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjay5hcHBseShfdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIF90aHJvdHRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3Rocm90dGxlVGltZW91dCA9IHZvaWQgMDtcbiAgICAgIH0sIG1zKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNhbmNlbFRocm90dGxlKCkge1xuICBjbGVhclRpbWVvdXQoX3Rocm90dGxlVGltZW91dCk7XG4gIF90aHJvdHRsZVRpbWVvdXQgPSB2b2lkIDA7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbEJ5KGVsLCB4LCB5KSB7XG4gIGVsLnNjcm9sbExlZnQgKz0geDtcbiAgZWwuc2Nyb2xsVG9wICs9IHk7XG59XG5cbmZ1bmN0aW9uIGNsb25lKGVsKSB7XG4gIHZhciBQb2x5bWVyID0gd2luZG93LlBvbHltZXI7XG4gIHZhciAkID0gd2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG87XG5cbiAgaWYgKFBvbHltZXIgJiYgUG9seW1lci5kb20pIHtcbiAgICByZXR1cm4gUG9seW1lci5kb20oZWwpLmNsb25lTm9kZSh0cnVlKTtcbiAgfSBlbHNlIGlmICgkKSB7XG4gICAgcmV0dXJuICQoZWwpLmNsb25lKHRydWUpWzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbC5jbG9uZU5vZGUodHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVjdChlbCwgcmVjdCkge1xuICBjc3MoZWwsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICBjc3MoZWwsICd0b3AnLCByZWN0LnRvcCk7XG4gIGNzcyhlbCwgJ2xlZnQnLCByZWN0LmxlZnQpO1xuICBjc3MoZWwsICd3aWR0aCcsIHJlY3Qud2lkdGgpO1xuICBjc3MoZWwsICdoZWlnaHQnLCByZWN0LmhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIHVuc2V0UmVjdChlbCkge1xuICBjc3MoZWwsICdwb3NpdGlvbicsICcnKTtcbiAgY3NzKGVsLCAndG9wJywgJycpO1xuICBjc3MoZWwsICdsZWZ0JywgJycpO1xuICBjc3MoZWwsICd3aWR0aCcsICcnKTtcbiAgY3NzKGVsLCAnaGVpZ2h0JywgJycpO1xufVxuXG52YXIgZXhwYW5kbyA9ICdTb3J0YWJsZScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuZnVuY3Rpb24gQW5pbWF0aW9uU3RhdGVNYW5hZ2VyKCkge1xuICB2YXIgYW5pbWF0aW9uU3RhdGVzID0gW10sXG4gICAgICBhbmltYXRpb25DYWxsYmFja0lkO1xuICByZXR1cm4ge1xuICAgIGNhcHR1cmVBbmltYXRpb25TdGF0ZTogZnVuY3Rpb24gY2FwdHVyZUFuaW1hdGlvblN0YXRlKCkge1xuICAgICAgYW5pbWF0aW9uU3RhdGVzID0gW107XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbmltYXRpb24pIHJldHVybjtcbiAgICAgIHZhciBjaGlsZHJlbiA9IFtdLnNsaWNlLmNhbGwodGhpcy5lbC5jaGlsZHJlbik7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY3NzKGNoaWxkLCAnZGlzcGxheScpID09PSAnbm9uZScgfHwgY2hpbGQgPT09IFNvcnRhYmxlLmdob3N0KSByZXR1cm47XG4gICAgICAgIGFuaW1hdGlvblN0YXRlcy5wdXNoKHtcbiAgICAgICAgICB0YXJnZXQ6IGNoaWxkLFxuICAgICAgICAgIHJlY3Q6IGdldFJlY3QoY2hpbGQpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBmcm9tUmVjdCA9IF9vYmplY3RTcHJlYWQoe30sIGFuaW1hdGlvblN0YXRlc1thbmltYXRpb25TdGF0ZXMubGVuZ3RoIC0gMV0ucmVjdCk7IC8vIElmIGFuaW1hdGluZzogY29tcGVuc2F0ZSBmb3IgY3VycmVudCBhbmltYXRpb25cblxuXG4gICAgICAgIGlmIChjaGlsZC50aGlzQW5pbWF0aW9uRHVyYXRpb24pIHtcbiAgICAgICAgICB2YXIgY2hpbGRNYXRyaXggPSBtYXRyaXgoY2hpbGQsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKGNoaWxkTWF0cml4KSB7XG4gICAgICAgICAgICBmcm9tUmVjdC50b3AgLT0gY2hpbGRNYXRyaXguZjtcbiAgICAgICAgICAgIGZyb21SZWN0LmxlZnQgLT0gY2hpbGRNYXRyaXguZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5mcm9tUmVjdCA9IGZyb21SZWN0O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZGRBbmltYXRpb25TdGF0ZTogZnVuY3Rpb24gYWRkQW5pbWF0aW9uU3RhdGUoc3RhdGUpIHtcbiAgICAgIGFuaW1hdGlvblN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICB9LFxuICAgIHJlbW92ZUFuaW1hdGlvblN0YXRlOiBmdW5jdGlvbiByZW1vdmVBbmltYXRpb25TdGF0ZSh0YXJnZXQpIHtcbiAgICAgIGFuaW1hdGlvblN0YXRlcy5zcGxpY2UoaW5kZXhPZk9iamVjdChhbmltYXRpb25TdGF0ZXMsIHtcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgIH0pLCAxKTtcbiAgICB9LFxuICAgIGFuaW1hdGVBbGw6IGZ1bmN0aW9uIGFuaW1hdGVBbGwoY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICBjbGVhclRpbWVvdXQoYW5pbWF0aW9uQ2FsbGJhY2tJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuaW1hdGluZyA9IGZhbHNlLFxuICAgICAgICAgIGFuaW1hdGlvblRpbWUgPSAwO1xuICAgICAgYW5pbWF0aW9uU3RhdGVzLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciB0aW1lID0gMCxcbiAgICAgICAgICAgIHRhcmdldCA9IHN0YXRlLnRhcmdldCxcbiAgICAgICAgICAgIGZyb21SZWN0ID0gdGFyZ2V0LmZyb21SZWN0LFxuICAgICAgICAgICAgdG9SZWN0ID0gZ2V0UmVjdCh0YXJnZXQpLFxuICAgICAgICAgICAgcHJldkZyb21SZWN0ID0gdGFyZ2V0LnByZXZGcm9tUmVjdCxcbiAgICAgICAgICAgIHByZXZUb1JlY3QgPSB0YXJnZXQucHJldlRvUmVjdCxcbiAgICAgICAgICAgIGFuaW1hdGluZ1JlY3QgPSBzdGF0ZS5yZWN0LFxuICAgICAgICAgICAgdGFyZ2V0TWF0cml4ID0gbWF0cml4KHRhcmdldCwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRhcmdldE1hdHJpeCkge1xuICAgICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIGN1cnJlbnQgYW5pbWF0aW9uXG4gICAgICAgICAgdG9SZWN0LnRvcCAtPSB0YXJnZXRNYXRyaXguZjtcbiAgICAgICAgICB0b1JlY3QubGVmdCAtPSB0YXJnZXRNYXRyaXguZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldC50b1JlY3QgPSB0b1JlY3Q7XG5cbiAgICAgICAgaWYgKHRhcmdldC50aGlzQW5pbWF0aW9uRHVyYXRpb24pIHtcbiAgICAgICAgICAvLyBDb3VsZCBhbHNvIGNoZWNrIGlmIGFuaW1hdGluZ1JlY3QgaXMgYmV0d2VlbiBmcm9tUmVjdCBhbmQgdG9SZWN0XG4gICAgICAgICAgaWYgKGlzUmVjdEVxdWFsKHByZXZGcm9tUmVjdCwgdG9SZWN0KSAmJiAhaXNSZWN0RXF1YWwoZnJvbVJlY3QsIHRvUmVjdCkgJiYgLy8gTWFrZSBzdXJlIGFuaW1hdGluZ1JlY3QgaXMgb24gbGluZSBiZXR3ZWVuIHRvUmVjdCAmIGZyb21SZWN0XG4gICAgICAgICAgKGFuaW1hdGluZ1JlY3QudG9wIC0gdG9SZWN0LnRvcCkgLyAoYW5pbWF0aW5nUmVjdC5sZWZ0IC0gdG9SZWN0LmxlZnQpID09PSAoZnJvbVJlY3QudG9wIC0gdG9SZWN0LnRvcCkgLyAoZnJvbVJlY3QubGVmdCAtIHRvUmVjdC5sZWZ0KSkge1xuICAgICAgICAgICAgLy8gSWYgcmV0dXJuaW5nIHRvIHNhbWUgcGxhY2UgYXMgc3RhcnRlZCBmcm9tIGFuaW1hdGlvbiBhbmQgb24gc2FtZSBheGlzXG4gICAgICAgICAgICB0aW1lID0gY2FsY3VsYXRlUmVhbFRpbWUoYW5pbWF0aW5nUmVjdCwgcHJldkZyb21SZWN0LCBwcmV2VG9SZWN0LCBfdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaWYgZnJvbVJlY3QgIT0gdG9SZWN0OiBhbmltYXRlXG5cblxuICAgICAgICBpZiAoIWlzUmVjdEVxdWFsKHRvUmVjdCwgZnJvbVJlY3QpKSB7XG4gICAgICAgICAgdGFyZ2V0LnByZXZGcm9tUmVjdCA9IGZyb21SZWN0O1xuICAgICAgICAgIHRhcmdldC5wcmV2VG9SZWN0ID0gdG9SZWN0O1xuXG4gICAgICAgICAgaWYgKCF0aW1lKSB7XG4gICAgICAgICAgICB0aW1lID0gX3RoaXMub3B0aW9ucy5hbmltYXRpb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMuYW5pbWF0ZSh0YXJnZXQsIGFuaW1hdGluZ1JlY3QsIHRvUmVjdCwgdGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgYW5pbWF0aW9uVGltZSA9IE1hdGgubWF4KGFuaW1hdGlvblRpbWUsIHRpbWUpO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0YXJnZXQuYW5pbWF0aW9uUmVzZXRUaW1lcik7XG4gICAgICAgICAgdGFyZ2V0LmFuaW1hdGlvblJlc2V0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRhcmdldC5hbmltYXRpb25UaW1lID0gMDtcbiAgICAgICAgICAgIHRhcmdldC5wcmV2RnJvbVJlY3QgPSBudWxsO1xuICAgICAgICAgICAgdGFyZ2V0LmZyb21SZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRhcmdldC5wcmV2VG9SZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRhcmdldC50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSBudWxsO1xuICAgICAgICAgIH0sIHRpbWUpO1xuICAgICAgICAgIHRhcmdldC50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSB0aW1lO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dChhbmltYXRpb25DYWxsYmFja0lkKTtcblxuICAgICAgaWYgKCFhbmltYXRpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFuaW1hdGlvbkNhbGxiYWNrSWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuICAgICAgICB9LCBhbmltYXRpb25UaW1lKTtcbiAgICAgIH1cblxuICAgICAgYW5pbWF0aW9uU3RhdGVzID0gW107XG4gICAgfSxcbiAgICBhbmltYXRlOiBmdW5jdGlvbiBhbmltYXRlKHRhcmdldCwgY3VycmVudFJlY3QsIHRvUmVjdCwgZHVyYXRpb24pIHtcbiAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNpdGlvbicsICcnKTtcbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICcnKTtcbiAgICAgICAgdmFyIGVsTWF0cml4ID0gbWF0cml4KHRoaXMuZWwpLFxuICAgICAgICAgICAgc2NhbGVYID0gZWxNYXRyaXggJiYgZWxNYXRyaXguYSxcbiAgICAgICAgICAgIHNjYWxlWSA9IGVsTWF0cml4ICYmIGVsTWF0cml4LmQsXG4gICAgICAgICAgICB0cmFuc2xhdGVYID0gKGN1cnJlbnRSZWN0LmxlZnQgLSB0b1JlY3QubGVmdCkgLyAoc2NhbGVYIHx8IDEpLFxuICAgICAgICAgICAgdHJhbnNsYXRlWSA9IChjdXJyZW50UmVjdC50b3AgLSB0b1JlY3QudG9wKSAvIChzY2FsZVkgfHwgMSk7XG4gICAgICAgIHRhcmdldC5hbmltYXRpbmdYID0gISF0cmFuc2xhdGVYO1xuICAgICAgICB0YXJnZXQuYW5pbWF0aW5nWSA9ICEhdHJhbnNsYXRlWTtcbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgnICsgdHJhbnNsYXRlWCArICdweCwnICsgdHJhbnNsYXRlWSArICdweCwwKScpO1xuICAgICAgICB0aGlzLmZvclJlcGFpbnREdW1teSA9IHJlcGFpbnQodGFyZ2V0KTsgLy8gcmVwYWludFxuXG4gICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2l0aW9uJywgJ3RyYW5zZm9ybSAnICsgZHVyYXRpb24gKyAnbXMnICsgKHRoaXMub3B0aW9ucy5lYXNpbmcgPyAnICcgKyB0aGlzLm9wdGlvbnMuZWFzaW5nIDogJycpKTtcbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgwLDAsMCknKTtcbiAgICAgICAgdHlwZW9mIHRhcmdldC5hbmltYXRlZCA9PT0gJ251bWJlcicgJiYgY2xlYXJUaW1lb3V0KHRhcmdldC5hbmltYXRlZCk7XG4gICAgICAgIHRhcmdldC5hbmltYXRlZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2l0aW9uJywgJycpO1xuICAgICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2Zvcm0nLCAnJyk7XG4gICAgICAgICAgdGFyZ2V0LmFuaW1hdGVkID0gZmFsc2U7XG4gICAgICAgICAgdGFyZ2V0LmFuaW1hdGluZ1ggPSBmYWxzZTtcbiAgICAgICAgICB0YXJnZXQuYW5pbWF0aW5nWSA9IGZhbHNlO1xuICAgICAgICB9LCBkdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBhaW50KHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0Lm9mZnNldFdpZHRoO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZWFsVGltZShhbmltYXRpbmdSZWN0LCBmcm9tUmVjdCwgdG9SZWN0LCBvcHRpb25zKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZnJvbVJlY3QudG9wIC0gYW5pbWF0aW5nUmVjdC50b3AsIDIpICsgTWF0aC5wb3coZnJvbVJlY3QubGVmdCAtIGFuaW1hdGluZ1JlY3QubGVmdCwgMikpIC8gTWF0aC5zcXJ0KE1hdGgucG93KGZyb21SZWN0LnRvcCAtIHRvUmVjdC50b3AsIDIpICsgTWF0aC5wb3coZnJvbVJlY3QubGVmdCAtIHRvUmVjdC5sZWZ0LCAyKSkgKiBvcHRpb25zLmFuaW1hdGlvbjtcbn1cblxudmFyIHBsdWdpbnMgPSBbXTtcbnZhciBkZWZhdWx0cyA9IHtcbiAgaW5pdGlhbGl6ZUJ5RGVmYXVsdDogdHJ1ZVxufTtcbnZhciBQbHVnaW5NYW5hZ2VyID0ge1xuICBtb3VudDogZnVuY3Rpb24gbW91bnQocGx1Z2luKSB7XG4gICAgLy8gU2V0IGRlZmF1bHQgc3RhdGljIHByb3BlcnRpZXNcbiAgICBmb3IgKHZhciBvcHRpb24gaW4gZGVmYXVsdHMpIHtcbiAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pICYmICEob3B0aW9uIGluIHBsdWdpbikpIHtcbiAgICAgICAgcGx1Z2luW29wdGlvbl0gPSBkZWZhdWx0c1tvcHRpb25dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgaWYgKHAucGx1Z2luTmFtZSA9PT0gcGx1Z2luLnBsdWdpbk5hbWUpIHtcbiAgICAgICAgdGhyb3cgXCJTb3J0YWJsZTogQ2Fubm90IG1vdW50IHBsdWdpbiBcIi5jb25jYXQocGx1Z2luLnBsdWdpbk5hbWUsIFwiIG1vcmUgdGhhbiBvbmNlXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHBsdWdpbnMucHVzaChwbHVnaW4pO1xuICB9LFxuICBwbHVnaW5FdmVudDogZnVuY3Rpb24gcGx1Z2luRXZlbnQoZXZlbnROYW1lLCBzb3J0YWJsZSwgZXZ0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuZXZlbnRDYW5jZWxlZCA9IGZhbHNlO1xuXG4gICAgZXZ0LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmV2ZW50Q2FuY2VsZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgZXZlbnROYW1lR2xvYmFsID0gZXZlbnROYW1lICsgJ0dsb2JhbCc7XG4gICAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgIGlmICghc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdKSByZXR1cm47IC8vIEZpcmUgZ2xvYmFsIGV2ZW50cyBpZiBpdCBleGlzdHMgaW4gdGhpcyBzb3J0YWJsZVxuXG4gICAgICBpZiAoc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdW2V2ZW50TmFtZUdsb2JhbF0pIHtcbiAgICAgICAgc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdW2V2ZW50TmFtZUdsb2JhbF0oX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlXG4gICAgICAgIH0sIGV2dCkpO1xuICAgICAgfSAvLyBPbmx5IGZpcmUgcGx1Z2luIGV2ZW50IGlmIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoaXMgc29ydGFibGUsXG4gICAgICAvLyBhbmQgcGx1Z2luIGhhcyBldmVudCBkZWZpbmVkXG5cblxuICAgICAgaWYgKHNvcnRhYmxlLm9wdGlvbnNbcGx1Z2luLnBsdWdpbk5hbWVdICYmIHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXVtldmVudE5hbWVdKSB7XG4gICAgICAgIHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXVtldmVudE5hbWVdKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIHNvcnRhYmxlOiBzb3J0YWJsZVxuICAgICAgICB9LCBldnQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgaW5pdGlhbGl6ZVBsdWdpbnM6IGZ1bmN0aW9uIGluaXRpYWxpemVQbHVnaW5zKHNvcnRhYmxlLCBlbCwgZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgdmFyIHBsdWdpbk5hbWUgPSBwbHVnaW4ucGx1Z2luTmFtZTtcbiAgICAgIGlmICghc29ydGFibGUub3B0aW9uc1twbHVnaW5OYW1lXSAmJiAhcGx1Z2luLmluaXRpYWxpemVCeURlZmF1bHQpIHJldHVybjtcbiAgICAgIHZhciBpbml0aWFsaXplZCA9IG5ldyBwbHVnaW4oc29ydGFibGUsIGVsLCBzb3J0YWJsZS5vcHRpb25zKTtcbiAgICAgIGluaXRpYWxpemVkLnNvcnRhYmxlID0gc29ydGFibGU7XG4gICAgICBpbml0aWFsaXplZC5vcHRpb25zID0gc29ydGFibGUub3B0aW9ucztcbiAgICAgIHNvcnRhYmxlW3BsdWdpbk5hbWVdID0gaW5pdGlhbGl6ZWQ7IC8vIEFkZCBkZWZhdWx0IG9wdGlvbnMgZnJvbSBwbHVnaW5cblxuICAgICAgX2V4dGVuZHMoZGVmYXVsdHMsIGluaXRpYWxpemVkLmRlZmF1bHRzKTtcbiAgICB9KTtcblxuICAgIGZvciAodmFyIG9wdGlvbiBpbiBzb3J0YWJsZS5vcHRpb25zKSB7XG4gICAgICBpZiAoIXNvcnRhYmxlLm9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSkgY29udGludWU7XG4gICAgICB2YXIgbW9kaWZpZWQgPSB0aGlzLm1vZGlmeU9wdGlvbihzb3J0YWJsZSwgb3B0aW9uLCBzb3J0YWJsZS5vcHRpb25zW29wdGlvbl0pO1xuXG4gICAgICBpZiAodHlwZW9mIG1vZGlmaWVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzb3J0YWJsZS5vcHRpb25zW29wdGlvbl0gPSBtb2RpZmllZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGdldEV2ZW50UHJvcGVydGllczogZnVuY3Rpb24gZ2V0RXZlbnRQcm9wZXJ0aWVzKG5hbWUsIHNvcnRhYmxlKSB7XG4gICAgdmFyIGV2ZW50UHJvcGVydGllcyA9IHt9O1xuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICBpZiAodHlwZW9mIHBsdWdpbi5ldmVudFByb3BlcnRpZXMgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblxuICAgICAgX2V4dGVuZHMoZXZlbnRQcm9wZXJ0aWVzLCBwbHVnaW4uZXZlbnRQcm9wZXJ0aWVzLmNhbGwoc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdLCBuYW1lKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV2ZW50UHJvcGVydGllcztcbiAgfSxcbiAgbW9kaWZ5T3B0aW9uOiBmdW5jdGlvbiBtb2RpZnlPcHRpb24oc29ydGFibGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG1vZGlmaWVkVmFsdWU7XG4gICAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgIC8vIFBsdWdpbiBtdXN0IGV4aXN0IG9uIHRoZSBTb3J0YWJsZVxuICAgICAgaWYgKCFzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV0pIHJldHVybjsgLy8gSWYgc3RhdGljIG9wdGlvbiBsaXN0ZW5lciBleGlzdHMgZm9yIHRoaXMgb3B0aW9uLCBjYWxsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBTb3J0YWJsZSdzIGluc3RhbmNlIG9mIHRoaXMgcGx1Z2luXG5cbiAgICAgIGlmIChwbHVnaW4ub3B0aW9uTGlzdGVuZXJzICYmIHR5cGVvZiBwbHVnaW4ub3B0aW9uTGlzdGVuZXJzW25hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG1vZGlmaWVkVmFsdWUgPSBwbHVnaW4ub3B0aW9uTGlzdGVuZXJzW25hbWVdLmNhbGwoc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGlmaWVkVmFsdWU7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoX3JlZikge1xuICB2YXIgc29ydGFibGUgPSBfcmVmLnNvcnRhYmxlLFxuICAgICAgcm9vdEVsID0gX3JlZi5yb290RWwsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgdGFyZ2V0RWwgPSBfcmVmLnRhcmdldEVsLFxuICAgICAgY2xvbmVFbCA9IF9yZWYuY2xvbmVFbCxcbiAgICAgIHRvRWwgPSBfcmVmLnRvRWwsXG4gICAgICBmcm9tRWwgPSBfcmVmLmZyb21FbCxcbiAgICAgIG9sZEluZGV4ID0gX3JlZi5vbGRJbmRleCxcbiAgICAgIG5ld0luZGV4ID0gX3JlZi5uZXdJbmRleCxcbiAgICAgIG9sZERyYWdnYWJsZUluZGV4ID0gX3JlZi5vbGREcmFnZ2FibGVJbmRleCxcbiAgICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gX3JlZi5uZXdEcmFnZ2FibGVJbmRleCxcbiAgICAgIG9yaWdpbmFsRXZlbnQgPSBfcmVmLm9yaWdpbmFsRXZlbnQsXG4gICAgICBwdXRTb3J0YWJsZSA9IF9yZWYucHV0U29ydGFibGUsXG4gICAgICBleHRyYUV2ZW50UHJvcGVydGllcyA9IF9yZWYuZXh0cmFFdmVudFByb3BlcnRpZXM7XG4gIHNvcnRhYmxlID0gc29ydGFibGUgfHwgcm9vdEVsICYmIHJvb3RFbFtleHBhbmRvXTtcbiAgaWYgKCFzb3J0YWJsZSkgcmV0dXJuO1xuICB2YXIgZXZ0LFxuICAgICAgb3B0aW9ucyA9IHNvcnRhYmxlLm9wdGlvbnMsXG4gICAgICBvbk5hbWUgPSAnb24nICsgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyKDEpOyAvLyBTdXBwb3J0IGZvciBuZXcgQ3VzdG9tRXZlbnQgZmVhdHVyZVxuXG4gIGlmICh3aW5kb3cuQ3VzdG9tRXZlbnQgJiYgIUlFMTFPckxlc3MgJiYgIUVkZ2UpIHtcbiAgICBldnQgPSBuZXcgQ3VzdG9tRXZlbnQobmFtZSwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldnQuaW5pdEV2ZW50KG5hbWUsIHRydWUsIHRydWUpO1xuICB9XG5cbiAgZXZ0LnRvID0gdG9FbCB8fCByb290RWw7XG4gIGV2dC5mcm9tID0gZnJvbUVsIHx8IHJvb3RFbDtcbiAgZXZ0Lml0ZW0gPSB0YXJnZXRFbCB8fCByb290RWw7XG4gIGV2dC5jbG9uZSA9IGNsb25lRWw7XG4gIGV2dC5vbGRJbmRleCA9IG9sZEluZGV4O1xuICBldnQubmV3SW5kZXggPSBuZXdJbmRleDtcbiAgZXZ0Lm9sZERyYWdnYWJsZUluZGV4ID0gb2xkRHJhZ2dhYmxlSW5kZXg7XG4gIGV2dC5uZXdEcmFnZ2FibGVJbmRleCA9IG5ld0RyYWdnYWJsZUluZGV4O1xuICBldnQub3JpZ2luYWxFdmVudCA9IG9yaWdpbmFsRXZlbnQ7XG4gIGV2dC5wdWxsTW9kZSA9IHB1dFNvcnRhYmxlID8gcHV0U29ydGFibGUubGFzdFB1dE1vZGUgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGFsbEV2ZW50UHJvcGVydGllcyA9IF9vYmplY3RTcHJlYWQoe30sIGV4dHJhRXZlbnRQcm9wZXJ0aWVzLCBQbHVnaW5NYW5hZ2VyLmdldEV2ZW50UHJvcGVydGllcyhuYW1lLCBzb3J0YWJsZSkpO1xuXG4gIGZvciAodmFyIG9wdGlvbiBpbiBhbGxFdmVudFByb3BlcnRpZXMpIHtcbiAgICBldnRbb3B0aW9uXSA9IGFsbEV2ZW50UHJvcGVydGllc1tvcHRpb25dO1xuICB9XG5cbiAgaWYgKHJvb3RFbCkge1xuICAgIHJvb3RFbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gIH1cblxuICBpZiAob3B0aW9uc1tvbk5hbWVdKSB7XG4gICAgb3B0aW9uc1tvbk5hbWVdLmNhbGwoc29ydGFibGUsIGV2dCk7XG4gIH1cbn1cblxudmFyIHBsdWdpbkV2ZW50ID0gZnVuY3Rpb24gcGx1Z2luRXZlbnQoZXZlbnROYW1lLCBzb3J0YWJsZSkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBvcmlnaW5hbEV2ZW50ID0gX3JlZi5ldnQsXG4gICAgICBkYXRhID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImV2dFwiXSk7XG5cbiAgUGx1Z2luTWFuYWdlci5wbHVnaW5FdmVudC5iaW5kKFNvcnRhYmxlKShldmVudE5hbWUsIHNvcnRhYmxlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICBkcmFnRWw6IGRyYWdFbCxcbiAgICBwYXJlbnRFbDogcGFyZW50RWwsXG4gICAgZ2hvc3RFbDogZ2hvc3RFbCxcbiAgICByb290RWw6IHJvb3RFbCxcbiAgICBuZXh0RWw6IG5leHRFbCxcbiAgICBsYXN0RG93bkVsOiBsYXN0RG93bkVsLFxuICAgIGNsb25lRWw6IGNsb25lRWwsXG4gICAgY2xvbmVIaWRkZW46IGNsb25lSGlkZGVuLFxuICAgIGRyYWdTdGFydGVkOiBtb3ZlZCxcbiAgICBwdXRTb3J0YWJsZTogcHV0U29ydGFibGUsXG4gICAgYWN0aXZlU29ydGFibGU6IFNvcnRhYmxlLmFjdGl2ZSxcbiAgICBvcmlnaW5hbEV2ZW50OiBvcmlnaW5hbEV2ZW50LFxuICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICBvbGREcmFnZ2FibGVJbmRleDogb2xkRHJhZ2dhYmxlSW5kZXgsXG4gICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgIG5ld0RyYWdnYWJsZUluZGV4OiBuZXdEcmFnZ2FibGVJbmRleCxcbiAgICBoaWRlR2hvc3RGb3JUYXJnZXQ6IF9oaWRlR2hvc3RGb3JUYXJnZXQsXG4gICAgdW5oaWRlR2hvc3RGb3JUYXJnZXQ6IF91bmhpZGVHaG9zdEZvclRhcmdldCxcbiAgICBjbG9uZU5vd0hpZGRlbjogZnVuY3Rpb24gY2xvbmVOb3dIaWRkZW4oKSB7XG4gICAgICBjbG9uZUhpZGRlbiA9IHRydWU7XG4gICAgfSxcbiAgICBjbG9uZU5vd1Nob3duOiBmdW5jdGlvbiBjbG9uZU5vd1Nob3duKCkge1xuICAgICAgY2xvbmVIaWRkZW4gPSBmYWxzZTtcbiAgICB9LFxuICAgIGRpc3BhdGNoU29ydGFibGVFdmVudDogZnVuY3Rpb24gZGlzcGF0Y2hTb3J0YWJsZUV2ZW50KG5hbWUpIHtcbiAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBvcmlnaW5hbEV2ZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIGRhdGEpKTtcbn07XG5cbmZ1bmN0aW9uIF9kaXNwYXRjaEV2ZW50KGluZm8pIHtcbiAgZGlzcGF0Y2hFdmVudChfb2JqZWN0U3ByZWFkKHtcbiAgICBwdXRTb3J0YWJsZTogcHV0U29ydGFibGUsXG4gICAgY2xvbmVFbDogY2xvbmVFbCxcbiAgICB0YXJnZXRFbDogZHJhZ0VsLFxuICAgIHJvb3RFbDogcm9vdEVsLFxuICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICBvbGREcmFnZ2FibGVJbmRleDogb2xkRHJhZ2dhYmxlSW5kZXgsXG4gICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgIG5ld0RyYWdnYWJsZUluZGV4OiBuZXdEcmFnZ2FibGVJbmRleFxuICB9LCBpbmZvKSk7XG59XG5cbnZhciBkcmFnRWwsXG4gICAgcGFyZW50RWwsXG4gICAgZ2hvc3RFbCxcbiAgICByb290RWwsXG4gICAgbmV4dEVsLFxuICAgIGxhc3REb3duRWwsXG4gICAgY2xvbmVFbCxcbiAgICBjbG9uZUhpZGRlbixcbiAgICBvbGRJbmRleCxcbiAgICBuZXdJbmRleCxcbiAgICBvbGREcmFnZ2FibGVJbmRleCxcbiAgICBuZXdEcmFnZ2FibGVJbmRleCxcbiAgICBhY3RpdmVHcm91cCxcbiAgICBwdXRTb3J0YWJsZSxcbiAgICBhd2FpdGluZ0RyYWdTdGFydGVkID0gZmFsc2UsXG4gICAgaWdub3JlTmV4dENsaWNrID0gZmFsc2UsXG4gICAgc29ydGFibGVzID0gW10sXG4gICAgdGFwRXZ0LFxuICAgIHRvdWNoRXZ0LFxuICAgIGxhc3REeCxcbiAgICBsYXN0RHksXG4gICAgdGFwRGlzdGFuY2VMZWZ0LFxuICAgIHRhcERpc3RhbmNlVG9wLFxuICAgIG1vdmVkLFxuICAgIGxhc3RUYXJnZXQsXG4gICAgbGFzdERpcmVjdGlvbixcbiAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSBmYWxzZSxcbiAgICBpc0NpcmN1bXN0YW50aWFsSW52ZXJ0ID0gZmFsc2UsXG4gICAgdGFyZ2V0TW92ZURpc3RhbmNlLFxuICAgIC8vIEZvciBwb3NpdGlvbmluZyBnaG9zdCBhYnNvbHV0ZWx5XG5naG9zdFJlbGF0aXZlUGFyZW50LFxuICAgIGdob3N0UmVsYXRpdmVQYXJlbnRJbml0aWFsU2Nyb2xsID0gW10sXG4gICAgLy8gKGxlZnQsIHRvcClcbl9zaWxlbnQgPSBmYWxzZSxcbiAgICBzYXZlZElucHV0Q2hlY2tlZCA9IFtdO1xuLyoqIEBjb25zdCAqL1xuXG52YXIgZG9jdW1lbnRFeGlzdHMgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgIFBvc2l0aW9uR2hvc3RBYnNvbHV0ZWx5ID0gSU9TLFxuICAgIENTU0Zsb2F0UHJvcGVydHkgPSBFZGdlIHx8IElFMTFPckxlc3MgPyAnY3NzRmxvYXQnIDogJ2Zsb2F0JyxcbiAgICAvLyBUaGlzIHdpbGwgbm90IHBhc3MgZm9yIElFOSwgYmVjYXVzZSBJRTkgRG5EIG9ubHkgd29ya3Mgb24gYW5jaG9yc1xuc3VwcG9ydERyYWdnYWJsZSA9IGRvY3VtZW50RXhpc3RzICYmICFDaHJvbWVGb3JBbmRyb2lkICYmICFJT1MgJiYgJ2RyYWdnYWJsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgc3VwcG9ydENzc1BvaW50ZXJFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZG9jdW1lbnRFeGlzdHMpIHJldHVybjsgLy8gZmFsc2Ugd2hlbiA8PSBJRTExXG5cbiAgaWYgKElFMTFPckxlc3MpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd4Jyk7XG4gIGVsLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6YXV0byc7XG4gIHJldHVybiBlbC5zdHlsZS5wb2ludGVyRXZlbnRzID09PSAnYXV0byc7XG59KCksXG4gICAgX2RldGVjdERpcmVjdGlvbiA9IGZ1bmN0aW9uIF9kZXRlY3REaXJlY3Rpb24oZWwsIG9wdGlvbnMpIHtcbiAgdmFyIGVsQ1NTID0gY3NzKGVsKSxcbiAgICAgIGVsV2lkdGggPSBwYXJzZUludChlbENTUy53aWR0aCkgLSBwYXJzZUludChlbENTUy5wYWRkaW5nTGVmdCkgLSBwYXJzZUludChlbENTUy5wYWRkaW5nUmlnaHQpIC0gcGFyc2VJbnQoZWxDU1MuYm9yZGVyTGVmdFdpZHRoKSAtIHBhcnNlSW50KGVsQ1NTLmJvcmRlclJpZ2h0V2lkdGgpLFxuICAgICAgY2hpbGQxID0gZ2V0Q2hpbGQoZWwsIDAsIG9wdGlvbnMpLFxuICAgICAgY2hpbGQyID0gZ2V0Q2hpbGQoZWwsIDEsIG9wdGlvbnMpLFxuICAgICAgZmlyc3RDaGlsZENTUyA9IGNoaWxkMSAmJiBjc3MoY2hpbGQxKSxcbiAgICAgIHNlY29uZENoaWxkQ1NTID0gY2hpbGQyICYmIGNzcyhjaGlsZDIpLFxuICAgICAgZmlyc3RDaGlsZFdpZHRoID0gZmlyc3RDaGlsZENTUyAmJiBwYXJzZUludChmaXJzdENoaWxkQ1NTLm1hcmdpbkxlZnQpICsgcGFyc2VJbnQoZmlyc3RDaGlsZENTUy5tYXJnaW5SaWdodCkgKyBnZXRSZWN0KGNoaWxkMSkud2lkdGgsXG4gICAgICBzZWNvbmRDaGlsZFdpZHRoID0gc2Vjb25kQ2hpbGRDU1MgJiYgcGFyc2VJbnQoc2Vjb25kQ2hpbGRDU1MubWFyZ2luTGVmdCkgKyBwYXJzZUludChzZWNvbmRDaGlsZENTUy5tYXJnaW5SaWdodCkgKyBnZXRSZWN0KGNoaWxkMikud2lkdGg7XG5cbiAgaWYgKGVsQ1NTLmRpc3BsYXkgPT09ICdmbGV4Jykge1xuICAgIHJldHVybiBlbENTUy5mbGV4RGlyZWN0aW9uID09PSAnY29sdW1uJyB8fCBlbENTUy5mbGV4RGlyZWN0aW9uID09PSAnY29sdW1uLXJldmVyc2UnID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgfVxuXG4gIGlmIChlbENTUy5kaXNwbGF5ID09PSAnZ3JpZCcpIHtcbiAgICByZXR1cm4gZWxDU1MuZ3JpZFRlbXBsYXRlQ29sdW1ucy5zcGxpdCgnICcpLmxlbmd0aCA8PSAxID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgfVxuXG4gIGlmIChjaGlsZDEgJiYgZmlyc3RDaGlsZENTU1tcImZsb2F0XCJdICYmIGZpcnN0Q2hpbGRDU1NbXCJmbG9hdFwiXSAhPT0gJ25vbmUnKSB7XG4gICAgdmFyIHRvdWNoaW5nU2lkZUNoaWxkMiA9IGZpcnN0Q2hpbGRDU1NbXCJmbG9hdFwiXSA9PT0gJ2xlZnQnID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICByZXR1cm4gY2hpbGQyICYmIChzZWNvbmRDaGlsZENTUy5jbGVhciA9PT0gJ2JvdGgnIHx8IHNlY29uZENoaWxkQ1NTLmNsZWFyID09PSB0b3VjaGluZ1NpZGVDaGlsZDIpID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgfVxuXG4gIHJldHVybiBjaGlsZDEgJiYgKGZpcnN0Q2hpbGRDU1MuZGlzcGxheSA9PT0gJ2Jsb2NrJyB8fCBmaXJzdENoaWxkQ1NTLmRpc3BsYXkgPT09ICdmbGV4JyB8fCBmaXJzdENoaWxkQ1NTLmRpc3BsYXkgPT09ICd0YWJsZScgfHwgZmlyc3RDaGlsZENTUy5kaXNwbGF5ID09PSAnZ3JpZCcgfHwgZmlyc3RDaGlsZFdpZHRoID49IGVsV2lkdGggJiYgZWxDU1NbQ1NTRmxvYXRQcm9wZXJ0eV0gPT09ICdub25lJyB8fCBjaGlsZDIgJiYgZWxDU1NbQ1NTRmxvYXRQcm9wZXJ0eV0gPT09ICdub25lJyAmJiBmaXJzdENoaWxkV2lkdGggKyBzZWNvbmRDaGlsZFdpZHRoID4gZWxXaWR0aCkgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xufSxcbiAgICBfZHJhZ0VsSW5Sb3dDb2x1bW4gPSBmdW5jdGlvbiBfZHJhZ0VsSW5Sb3dDb2x1bW4oZHJhZ1JlY3QsIHRhcmdldFJlY3QsIHZlcnRpY2FsKSB7XG4gIHZhciBkcmFnRWxTMU9wcCA9IHZlcnRpY2FsID8gZHJhZ1JlY3QubGVmdCA6IGRyYWdSZWN0LnRvcCxcbiAgICAgIGRyYWdFbFMyT3BwID0gdmVydGljYWwgPyBkcmFnUmVjdC5yaWdodCA6IGRyYWdSZWN0LmJvdHRvbSxcbiAgICAgIGRyYWdFbE9wcExlbmd0aCA9IHZlcnRpY2FsID8gZHJhZ1JlY3Qud2lkdGggOiBkcmFnUmVjdC5oZWlnaHQsXG4gICAgICB0YXJnZXRTMU9wcCA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC5sZWZ0IDogdGFyZ2V0UmVjdC50b3AsXG4gICAgICB0YXJnZXRTMk9wcCA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC5yaWdodCA6IHRhcmdldFJlY3QuYm90dG9tLFxuICAgICAgdGFyZ2V0T3BwTGVuZ3RoID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LndpZHRoIDogdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gIHJldHVybiBkcmFnRWxTMU9wcCA9PT0gdGFyZ2V0UzFPcHAgfHwgZHJhZ0VsUzJPcHAgPT09IHRhcmdldFMyT3BwIHx8IGRyYWdFbFMxT3BwICsgZHJhZ0VsT3BwTGVuZ3RoIC8gMiA9PT0gdGFyZ2V0UzFPcHAgKyB0YXJnZXRPcHBMZW5ndGggLyAyO1xufSxcblxuLyoqXG4gKiBEZXRlY3RzIGZpcnN0IG5lYXJlc3QgZW1wdHkgc29ydGFibGUgdG8gWCBhbmQgWSBwb3NpdGlvbiB1c2luZyBlbXB0eUluc2VydFRocmVzaG9sZC5cbiAqIEBwYXJhbSAge051bWJlcn0geCAgICAgIFggcG9zaXRpb25cbiAqIEBwYXJhbSAge051bWJlcn0geSAgICAgIFkgcG9zaXRpb25cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSAgIEVsZW1lbnQgb2YgdGhlIGZpcnN0IGZvdW5kIG5lYXJlc3QgU29ydGFibGVcbiAqL1xuX2RldGVjdE5lYXJlc3RFbXB0eVNvcnRhYmxlID0gZnVuY3Rpb24gX2RldGVjdE5lYXJlc3RFbXB0eVNvcnRhYmxlKHgsIHkpIHtcbiAgdmFyIHJldDtcbiAgc29ydGFibGVzLnNvbWUoZnVuY3Rpb24gKHNvcnRhYmxlKSB7XG4gICAgaWYgKGxhc3RDaGlsZChzb3J0YWJsZSkpIHJldHVybjtcbiAgICB2YXIgcmVjdCA9IGdldFJlY3Qoc29ydGFibGUpLFxuICAgICAgICB0aHJlc2hvbGQgPSBzb3J0YWJsZVtleHBhbmRvXS5vcHRpb25zLmVtcHR5SW5zZXJ0VGhyZXNob2xkLFxuICAgICAgICBpbnNpZGVIb3Jpem9udGFsbHkgPSB4ID49IHJlY3QubGVmdCAtIHRocmVzaG9sZCAmJiB4IDw9IHJlY3QucmlnaHQgKyB0aHJlc2hvbGQsXG4gICAgICAgIGluc2lkZVZlcnRpY2FsbHkgPSB5ID49IHJlY3QudG9wIC0gdGhyZXNob2xkICYmIHkgPD0gcmVjdC5ib3R0b20gKyB0aHJlc2hvbGQ7XG5cbiAgICBpZiAodGhyZXNob2xkICYmIGluc2lkZUhvcml6b250YWxseSAmJiBpbnNpZGVWZXJ0aWNhbGx5KSB7XG4gICAgICByZXR1cm4gcmV0ID0gc29ydGFibGU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJldDtcbn0sXG4gICAgX3ByZXBhcmVHcm91cCA9IGZ1bmN0aW9uIF9wcmVwYXJlR3JvdXAob3B0aW9ucykge1xuICBmdW5jdGlvbiB0b0ZuKHZhbHVlLCBwdWxsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0bywgZnJvbSwgZHJhZ0VsLCBldnQpIHtcbiAgICAgIHZhciBzYW1lR3JvdXAgPSB0by5vcHRpb25zLmdyb3VwLm5hbWUgJiYgZnJvbS5vcHRpb25zLmdyb3VwLm5hbWUgJiYgdG8ub3B0aW9ucy5ncm91cC5uYW1lID09PSBmcm9tLm9wdGlvbnMuZ3JvdXAubmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwgJiYgKHB1bGwgfHwgc2FtZUdyb3VwKSkge1xuICAgICAgICAvLyBEZWZhdWx0IHB1bGwgdmFsdWVcbiAgICAgICAgLy8gRGVmYXVsdCBwdWxsIGFuZCBwdXQgdmFsdWUgaWYgc2FtZSBncm91cFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChwdWxsICYmIHZhbHVlID09PSAnY2xvbmUnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0b0ZuKHZhbHVlKHRvLCBmcm9tLCBkcmFnRWwsIGV2dCksIHB1bGwpKHRvLCBmcm9tLCBkcmFnRWwsIGV2dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3RoZXJHcm91cCA9IChwdWxsID8gdG8gOiBmcm9tKS5vcHRpb25zLmdyb3VwLm5hbWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlID09PSBvdGhlckdyb3VwIHx8IHZhbHVlLmpvaW4gJiYgdmFsdWUuaW5kZXhPZihvdGhlckdyb3VwKSA+IC0xO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgZ3JvdXAgPSB7fTtcbiAgdmFyIG9yaWdpbmFsR3JvdXAgPSBvcHRpb25zLmdyb3VwO1xuXG4gIGlmICghb3JpZ2luYWxHcm91cCB8fCBfdHlwZW9mKG9yaWdpbmFsR3JvdXApICE9ICdvYmplY3QnKSB7XG4gICAgb3JpZ2luYWxHcm91cCA9IHtcbiAgICAgIG5hbWU6IG9yaWdpbmFsR3JvdXBcbiAgICB9O1xuICB9XG5cbiAgZ3JvdXAubmFtZSA9IG9yaWdpbmFsR3JvdXAubmFtZTtcbiAgZ3JvdXAuY2hlY2tQdWxsID0gdG9GbihvcmlnaW5hbEdyb3VwLnB1bGwsIHRydWUpO1xuICBncm91cC5jaGVja1B1dCA9IHRvRm4ob3JpZ2luYWxHcm91cC5wdXQpO1xuICBncm91cC5yZXZlcnRDbG9uZSA9IG9yaWdpbmFsR3JvdXAucmV2ZXJ0Q2xvbmU7XG4gIG9wdGlvbnMuZ3JvdXAgPSBncm91cDtcbn0sXG4gICAgX2hpZGVHaG9zdEZvclRhcmdldCA9IGZ1bmN0aW9uIF9oaWRlR2hvc3RGb3JUYXJnZXQoKSB7XG4gIGlmICghc3VwcG9ydENzc1BvaW50ZXJFdmVudHMgJiYgZ2hvc3RFbCkge1xuICAgIGNzcyhnaG9zdEVsLCAnZGlzcGxheScsICdub25lJyk7XG4gIH1cbn0sXG4gICAgX3VuaGlkZUdob3N0Rm9yVGFyZ2V0ID0gZnVuY3Rpb24gX3VuaGlkZUdob3N0Rm9yVGFyZ2V0KCkge1xuICBpZiAoIXN1cHBvcnRDc3NQb2ludGVyRXZlbnRzICYmIGdob3N0RWwpIHtcbiAgICBjc3MoZ2hvc3RFbCwgJ2Rpc3BsYXknLCAnJyk7XG4gIH1cbn07IC8vICMxMTg0IGZpeCAtIFByZXZlbnQgY2xpY2sgZXZlbnQgb24gZmFsbGJhY2sgaWYgZHJhZ2dlZCBidXQgaXRlbSBub3QgY2hhbmdlZCBwb3NpdGlvblxuXG5cbmlmIChkb2N1bWVudEV4aXN0cykge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldnQpIHtcbiAgICBpZiAoaWdub3JlTmV4dENsaWNrKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24gJiYgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAmJiBldnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBpZ25vcmVOZXh0Q2xpY2sgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG52YXIgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQgPSBmdW5jdGlvbiBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudChldnQpIHtcbiAgaWYgKGRyYWdFbCkge1xuICAgIGV2dCA9IGV2dC50b3VjaGVzID8gZXZ0LnRvdWNoZXNbMF0gOiBldnQ7XG5cbiAgICB2YXIgbmVhcmVzdCA9IF9kZXRlY3ROZWFyZXN0RW1wdHlTb3J0YWJsZShldnQuY2xpZW50WCwgZXZ0LmNsaWVudFkpO1xuXG4gICAgaWYgKG5lYXJlc3QpIHtcbiAgICAgIC8vIENyZWF0ZSBpbWl0YXRpb24gZXZlbnRcbiAgICAgIHZhciBldmVudCA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpIGluIGV2dCkge1xuICAgICAgICBpZiAoZXZ0Lmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgZXZlbnRbaV0gPSBldnRbaV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQucm9vdEVsID0gbmVhcmVzdDtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0ID0gdm9pZCAwO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gdm9pZCAwO1xuXG4gICAgICBuZWFyZXN0W2V4cGFuZG9dLl9vbkRyYWdPdmVyKGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBfY2hlY2tPdXRzaWRlVGFyZ2V0RWwgPSBmdW5jdGlvbiBfY2hlY2tPdXRzaWRlVGFyZ2V0RWwoZXZ0KSB7XG4gIGlmIChkcmFnRWwpIHtcbiAgICBkcmFnRWwucGFyZW50Tm9kZVtleHBhbmRvXS5faXNPdXRzaWRlVGhpc0VsKGV2dC50YXJnZXQpO1xuICB9XG59O1xuLyoqXG4gKiBAY2xhc3MgIFNvcnRhYmxlXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gIGVsXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zXVxuICovXG5cblxuZnVuY3Rpb24gU29ydGFibGUoZWwsIG9wdGlvbnMpIHtcbiAgaWYgKCEoZWwgJiYgZWwubm9kZVR5cGUgJiYgZWwubm9kZVR5cGUgPT09IDEpKSB7XG4gICAgdGhyb3cgXCJTb3J0YWJsZTogYGVsYCBtdXN0IGJlIGFuIEhUTUxFbGVtZW50LCBub3QgXCIuY29uY2F0KHt9LnRvU3RyaW5nLmNhbGwoZWwpKTtcbiAgfVxuXG4gIHRoaXMuZWwgPSBlbDsgLy8gcm9vdCBlbGVtZW50XG5cbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IF9leHRlbmRzKHt9LCBvcHRpb25zKTsgLy8gRXhwb3J0IGluc3RhbmNlXG5cbiAgZWxbZXhwYW5kb10gPSB0aGlzO1xuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgZ3JvdXA6IG51bGwsXG4gICAgc29ydDogdHJ1ZSxcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc3RvcmU6IG51bGwsXG4gICAgaGFuZGxlOiBudWxsLFxuICAgIGRyYWdnYWJsZTogL15bdW9dbCQvaS50ZXN0KGVsLm5vZGVOYW1lKSA/ICc+bGknIDogJz4qJyxcbiAgICBzd2FwVGhyZXNob2xkOiAxLFxuICAgIC8vIHBlcmNlbnRhZ2U7IDAgPD0geCA8PSAxXG4gICAgaW52ZXJ0U3dhcDogZmFsc2UsXG4gICAgLy8gaW52ZXJ0IGFsd2F5c1xuICAgIGludmVydGVkU3dhcFRocmVzaG9sZDogbnVsbCxcbiAgICAvLyB3aWxsIGJlIHNldCB0byBzYW1lIGFzIHN3YXBUaHJlc2hvbGQgaWYgZGVmYXVsdFxuICAgIHJlbW92ZUNsb25lT25IaWRlOiB0cnVlLFxuICAgIGRpcmVjdGlvbjogZnVuY3Rpb24gZGlyZWN0aW9uKCkge1xuICAgICAgcmV0dXJuIF9kZXRlY3REaXJlY3Rpb24oZWwsIHRoaXMub3B0aW9ucyk7XG4gICAgfSxcbiAgICBnaG9zdENsYXNzOiAnc29ydGFibGUtZ2hvc3QnLFxuICAgIGNob3NlbkNsYXNzOiAnc29ydGFibGUtY2hvc2VuJyxcbiAgICBkcmFnQ2xhc3M6ICdzb3J0YWJsZS1kcmFnJyxcbiAgICBpZ25vcmU6ICdhLCBpbWcnLFxuICAgIGZpbHRlcjogbnVsbCxcbiAgICBwcmV2ZW50T25GaWx0ZXI6IHRydWUsXG4gICAgYW5pbWF0aW9uOiAwLFxuICAgIGVhc2luZzogbnVsbCxcbiAgICBzZXREYXRhOiBmdW5jdGlvbiBzZXREYXRhKGRhdGFUcmFuc2ZlciwgZHJhZ0VsKSB7XG4gICAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgnVGV4dCcsIGRyYWdFbC50ZXh0Q29udGVudCk7XG4gICAgfSxcbiAgICBkcm9wQnViYmxlOiBmYWxzZSxcbiAgICBkcmFnb3ZlckJ1YmJsZTogZmFsc2UsXG4gICAgZGF0YUlkQXR0cjogJ2RhdGEtaWQnLFxuICAgIGRlbGF5OiAwLFxuICAgIGRlbGF5T25Ub3VjaE9ubHk6IGZhbHNlLFxuICAgIHRvdWNoU3RhcnRUaHJlc2hvbGQ6IChOdW1iZXIucGFyc2VJbnQgPyBOdW1iZXIgOiB3aW5kb3cpLnBhcnNlSW50KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCAxMCkgfHwgMSxcbiAgICBmb3JjZUZhbGxiYWNrOiBmYWxzZSxcbiAgICBmYWxsYmFja0NsYXNzOiAnc29ydGFibGUtZmFsbGJhY2snLFxuICAgIGZhbGxiYWNrT25Cb2R5OiBmYWxzZSxcbiAgICBmYWxsYmFja1RvbGVyYW5jZTogMCxcbiAgICBmYWxsYmFja09mZnNldDoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9LFxuICAgIHN1cHBvcnRQb2ludGVyOiBTb3J0YWJsZS5zdXBwb3J0UG9pbnRlciAhPT0gZmFsc2UgJiYgJ1BvaW50ZXJFdmVudCcgaW4gd2luZG93ICYmICFTYWZhcmksXG4gICAgZW1wdHlJbnNlcnRUaHJlc2hvbGQ6IDVcbiAgfTtcbiAgUGx1Z2luTWFuYWdlci5pbml0aWFsaXplUGx1Z2lucyh0aGlzLCBlbCwgZGVmYXVsdHMpOyAvLyBTZXQgZGVmYXVsdCBvcHRpb25zXG5cbiAgZm9yICh2YXIgbmFtZSBpbiBkZWZhdWx0cykge1xuICAgICEobmFtZSBpbiBvcHRpb25zKSAmJiAob3B0aW9uc1tuYW1lXSA9IGRlZmF1bHRzW25hbWVdKTtcbiAgfVxuXG4gIF9wcmVwYXJlR3JvdXAob3B0aW9ucyk7IC8vIEJpbmQgYWxsIHByaXZhdGUgbWV0aG9kc1xuXG5cbiAgZm9yICh2YXIgZm4gaW4gdGhpcykge1xuICAgIGlmIChmbi5jaGFyQXQoMCkgPT09ICdfJyAmJiB0eXBlb2YgdGhpc1tmbl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbZm5dID0gdGhpc1tmbl0uYmluZCh0aGlzKTtcbiAgICB9XG4gIH0gLy8gU2V0dXAgZHJhZyBtb2RlXG5cblxuICB0aGlzLm5hdGl2ZURyYWdnYWJsZSA9IG9wdGlvbnMuZm9yY2VGYWxsYmFjayA/IGZhbHNlIDogc3VwcG9ydERyYWdnYWJsZTtcblxuICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAvLyBUb3VjaCBzdGFydCB0aHJlc2hvbGQgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbmF0aXZlIGRyYWdzdGFydCB0aHJlc2hvbGRcbiAgICB0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCA9IDE7XG4gIH0gLy8gQmluZCBldmVudHNcblxuXG4gIGlmIChvcHRpb25zLnN1cHBvcnRQb2ludGVyKSB7XG4gICAgb24oZWwsICdwb2ludGVyZG93bicsIHRoaXMuX29uVGFwU3RhcnQpO1xuICB9IGVsc2Uge1xuICAgIG9uKGVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG4gICAgb24oZWwsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25UYXBTdGFydCk7XG4gIH1cblxuICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICBvbihlbCwgJ2RyYWdvdmVyJywgdGhpcyk7XG4gICAgb24oZWwsICdkcmFnZW50ZXInLCB0aGlzKTtcbiAgfVxuXG4gIHNvcnRhYmxlcy5wdXNoKHRoaXMuZWwpOyAvLyBSZXN0b3JlIHNvcnRpbmdcblxuICBvcHRpb25zLnN0b3JlICYmIG9wdGlvbnMuc3RvcmUuZ2V0ICYmIHRoaXMuc29ydChvcHRpb25zLnN0b3JlLmdldCh0aGlzKSB8fCBbXSk7IC8vIEFkZCBhbmltYXRpb24gc3RhdGUgbWFuYWdlclxuXG4gIF9leHRlbmRzKHRoaXMsIEFuaW1hdGlvblN0YXRlTWFuYWdlcigpKTtcbn1cblxuU29ydGFibGUucHJvdG90eXBlID1cbi8qKiBAbGVuZHMgU29ydGFibGUucHJvdG90eXBlICovXG57XG4gIGNvbnN0cnVjdG9yOiBTb3J0YWJsZSxcbiAgX2lzT3V0c2lkZVRoaXNFbDogZnVuY3Rpb24gX2lzT3V0c2lkZVRoaXNFbCh0YXJnZXQpIHtcbiAgICBpZiAoIXRoaXMuZWwuY29udGFpbnModGFyZ2V0KSAmJiB0YXJnZXQgIT09IHRoaXMuZWwpIHtcbiAgICAgIGxhc3RUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgfSxcbiAgX2dldERpcmVjdGlvbjogZnVuY3Rpb24gX2dldERpcmVjdGlvbihldnQsIHRhcmdldCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5vcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMub3B0aW9ucy5kaXJlY3Rpb24uY2FsbCh0aGlzLCBldnQsIHRhcmdldCwgZHJhZ0VsKSA6IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gIH0sXG4gIF9vblRhcFN0YXJ0OiBmdW5jdGlvbiBfb25UYXBTdGFydChcbiAgLyoqIEV2ZW50fFRvdWNoRXZlbnQgKi9cbiAgZXZ0KSB7XG4gICAgaWYgKCFldnQuY2FuY2VsYWJsZSkgcmV0dXJuO1xuXG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgZWwgPSB0aGlzLmVsLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBwcmV2ZW50T25GaWx0ZXIgPSBvcHRpb25zLnByZXZlbnRPbkZpbHRlcixcbiAgICAgICAgdHlwZSA9IGV2dC50eXBlLFxuICAgICAgICB0b3VjaCA9IGV2dC50b3VjaGVzICYmIGV2dC50b3VjaGVzWzBdIHx8IGV2dC5wb2ludGVyVHlwZSAmJiBldnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgJiYgZXZ0LFxuICAgICAgICB0YXJnZXQgPSAodG91Y2ggfHwgZXZ0KS50YXJnZXQsXG4gICAgICAgIG9yaWdpbmFsVGFyZ2V0ID0gZXZ0LnRhcmdldC5zaGFkb3dSb290ICYmIChldnQucGF0aCAmJiBldnQucGF0aFswXSB8fCBldnQuY29tcG9zZWRQYXRoICYmIGV2dC5jb21wb3NlZFBhdGgoKVswXSkgfHwgdGFyZ2V0LFxuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcblxuICAgIF9zYXZlSW5wdXRDaGVja2VkU3RhdGUoZWwpOyAvLyBEb24ndCB0cmlnZ2VyIHN0YXJ0IGV2ZW50IHdoZW4gYW4gZWxlbWVudCBpcyBiZWVuIGRyYWdnZWQsIG90aGVyd2lzZSB0aGUgZXZ0Lm9sZGluZGV4IGFsd2F5cyB3cm9uZyB3aGVuIHNldCBvcHRpb24uZ3JvdXAuXG5cblxuICAgIGlmIChkcmFnRWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoL21vdXNlZG93bnxwb2ludGVyZG93bi8udGVzdCh0eXBlKSAmJiBldnQuYnV0dG9uICE9PSAwIHx8IG9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjsgLy8gb25seSBsZWZ0IGJ1dHRvbiBhbmQgZW5hYmxlZFxuICAgIH0gLy8gY2FuY2VsIGRuZCBpZiBvcmlnaW5hbCB0YXJnZXQgaXMgY29udGVudCBlZGl0YWJsZVxuXG5cbiAgICBpZiAob3JpZ2luYWxUYXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNhZmFyaSBpZ25vcmVzIGZ1cnRoZXIgZXZlbnQgaGFuZGxpbmcgYWZ0ZXIgbW91c2Vkb3duXG5cblxuICAgIGlmICghdGhpcy5uYXRpdmVEcmFnZ2FibGUgJiYgU2FmYXJpICYmIHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0VMRUNUJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRhcmdldCA9IGNsb3Nlc3QodGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSwgZWwsIGZhbHNlKTtcblxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmFuaW1hdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxhc3REb3duRWwgPT09IHRhcmdldCkge1xuICAgICAgLy8gSWdub3JpbmcgZHVwbGljYXRlIGBkb3duYFxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgZHJhZ2dlZCBlbGVtZW50IHdpdGhpbiBpdHMgcGFyZW50XG5cblxuICAgIG9sZEluZGV4ID0gaW5kZXgodGFyZ2V0KTtcbiAgICBvbGREcmFnZ2FibGVJbmRleCA9IGluZGV4KHRhcmdldCwgb3B0aW9ucy5kcmFnZ2FibGUpOyAvLyBDaGVjayBmaWx0ZXJcblxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZmlsdGVyLmNhbGwodGhpcywgZXZ0LCB0YXJnZXQsIHRoaXMpKSB7XG4gICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICBzb3J0YWJsZTogX3RoaXMsXG4gICAgICAgICAgcm9vdEVsOiBvcmlnaW5hbFRhcmdldCxcbiAgICAgICAgICBuYW1lOiAnZmlsdGVyJyxcbiAgICAgICAgICB0YXJnZXRFbDogdGFyZ2V0LFxuICAgICAgICAgIHRvRWw6IGVsLFxuICAgICAgICAgIGZyb21FbDogZWxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGx1Z2luRXZlbnQoJ2ZpbHRlcicsIF90aGlzLCB7XG4gICAgICAgICAgZXZ0OiBldnRcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZlbnRPbkZpbHRlciAmJiBldnQuY2FuY2VsYWJsZSAmJiBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuOyAvLyBjYW5jZWwgZG5kXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IGZpbHRlci5zcGxpdCgnLCcpLnNvbWUoZnVuY3Rpb24gKGNyaXRlcmlhKSB7XG4gICAgICAgIGNyaXRlcmlhID0gY2xvc2VzdChvcmlnaW5hbFRhcmdldCwgY3JpdGVyaWEudHJpbSgpLCBlbCwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChjcml0ZXJpYSkge1xuICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgICAgIHJvb3RFbDogY3JpdGVyaWEsXG4gICAgICAgICAgICBuYW1lOiAnZmlsdGVyJyxcbiAgICAgICAgICAgIHRhcmdldEVsOiB0YXJnZXQsXG4gICAgICAgICAgICBmcm9tRWw6IGVsLFxuICAgICAgICAgICAgdG9FbDogZWxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHBsdWdpbkV2ZW50KCdmaWx0ZXInLCBfdGhpcywge1xuICAgICAgICAgICAgZXZ0OiBldnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgcHJldmVudE9uRmlsdGVyICYmIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47IC8vIGNhbmNlbCBkbmRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5oYW5kbGUgJiYgIWNsb3Nlc3Qob3JpZ2luYWxUYXJnZXQsIG9wdGlvbnMuaGFuZGxlLCBlbCwgZmFsc2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBQcmVwYXJlIGBkcmFnc3RhcnRgXG5cblxuICAgIHRoaXMuX3ByZXBhcmVEcmFnU3RhcnQoZXZ0LCB0b3VjaCwgdGFyZ2V0KTtcbiAgfSxcbiAgX3ByZXBhcmVEcmFnU3RhcnQ6IGZ1bmN0aW9uIF9wcmVwYXJlRHJhZ1N0YXJ0KFxuICAvKiogRXZlbnQgKi9cbiAgZXZ0LFxuICAvKiogVG91Y2ggKi9cbiAgdG91Y2gsXG4gIC8qKiBIVE1MRWxlbWVudCAqL1xuICB0YXJnZXQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBlbCA9IF90aGlzLmVsLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMub3B0aW9ucyxcbiAgICAgICAgb3duZXJEb2N1bWVudCA9IGVsLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIGRyYWdTdGFydEZuO1xuXG4gICAgaWYgKHRhcmdldCAmJiAhZHJhZ0VsICYmIHRhcmdldC5wYXJlbnROb2RlID09PSBlbCkge1xuICAgICAgdmFyIGRyYWdSZWN0ID0gZ2V0UmVjdCh0YXJnZXQpO1xuICAgICAgcm9vdEVsID0gZWw7XG4gICAgICBkcmFnRWwgPSB0YXJnZXQ7XG4gICAgICBwYXJlbnRFbCA9IGRyYWdFbC5wYXJlbnROb2RlO1xuICAgICAgbmV4dEVsID0gZHJhZ0VsLm5leHRTaWJsaW5nO1xuICAgICAgbGFzdERvd25FbCA9IHRhcmdldDtcbiAgICAgIGFjdGl2ZUdyb3VwID0gb3B0aW9ucy5ncm91cDtcbiAgICAgIFNvcnRhYmxlLmRyYWdnZWQgPSBkcmFnRWw7XG4gICAgICB0YXBFdnQgPSB7XG4gICAgICAgIHRhcmdldDogZHJhZ0VsLFxuICAgICAgICBjbGllbnRYOiAodG91Y2ggfHwgZXZ0KS5jbGllbnRYLFxuICAgICAgICBjbGllbnRZOiAodG91Y2ggfHwgZXZ0KS5jbGllbnRZXG4gICAgICB9O1xuICAgICAgdGFwRGlzdGFuY2VMZWZ0ID0gdGFwRXZ0LmNsaWVudFggLSBkcmFnUmVjdC5sZWZ0O1xuICAgICAgdGFwRGlzdGFuY2VUb3AgPSB0YXBFdnQuY2xpZW50WSAtIGRyYWdSZWN0LnRvcDtcbiAgICAgIHRoaXMuX2xhc3RYID0gKHRvdWNoIHx8IGV2dCkuY2xpZW50WDtcbiAgICAgIHRoaXMuX2xhc3RZID0gKHRvdWNoIHx8IGV2dCkuY2xpZW50WTtcbiAgICAgIGRyYWdFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICdhbGwnO1xuXG4gICAgICBkcmFnU3RhcnRGbiA9IGZ1bmN0aW9uIGRyYWdTdGFydEZuKCkge1xuICAgICAgICBwbHVnaW5FdmVudCgnZGVsYXlFbmRlZCcsIF90aGlzLCB7XG4gICAgICAgICAgZXZ0OiBldnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgICAgICBfdGhpcy5fb25Ecm9wKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRGVsYXllZCBkcmFnIGhhcyBiZWVuIHRyaWdnZXJlZFxuICAgICAgICAvLyB3ZSBjYW4gcmUtZW5hYmxlIHRoZSBldmVudHM6IHRvdWNobW92ZS9tb3VzZW1vdmVcblxuXG4gICAgICAgIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWdFdmVudHMoKTtcblxuICAgICAgICBpZiAoIUZpcmVGb3ggJiYgX3RoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgZHJhZ0VsLmRyYWdnYWJsZSA9IHRydWU7XG4gICAgICAgIH0gLy8gQmluZCB0aGUgZXZlbnRzOiBkcmFnc3RhcnQvZHJhZ2VuZFxuXG5cbiAgICAgICAgX3RoaXMuX3RyaWdnZXJEcmFnU3RhcnQoZXZ0LCB0b3VjaCk7IC8vIERyYWcgc3RhcnQgZXZlbnRcblxuXG4gICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICBzb3J0YWJsZTogX3RoaXMsXG4gICAgICAgICAgbmFtZTogJ2Nob29zZScsXG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgIH0pOyAvLyBDaG9zZW4gaXRlbVxuXG5cbiAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmNob3NlbkNsYXNzLCB0cnVlKTtcbiAgICAgIH07IC8vIERpc2FibGUgXCJkcmFnZ2FibGVcIlxuXG5cbiAgICAgIG9wdGlvbnMuaWdub3JlLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAoY3JpdGVyaWEpIHtcbiAgICAgICAgZmluZChkcmFnRWwsIGNyaXRlcmlhLnRyaW0oKSwgX2Rpc2FibGVEcmFnZ2FibGUpO1xuICAgICAgfSk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAnZHJhZ292ZXInLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICAgICAgb24ob3duZXJEb2N1bWVudCwgJ3RvdWNobW92ZScsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX29uRHJvcCk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCBfdGhpcy5fb25Ecm9wKTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIF90aGlzLl9vbkRyb3ApOyAvLyBNYWtlIGRyYWdFbCBkcmFnZ2FibGUgKG11c3QgYmUgYmVmb3JlIGRlbGF5IGZvciBGaXJlRm94KVxuXG4gICAgICBpZiAoRmlyZUZveCAmJiB0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCA9IDQ7XG4gICAgICAgIGRyYWdFbC5kcmFnZ2FibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwbHVnaW5FdmVudCgnZGVsYXlTdGFydCcsIHRoaXMsIHtcbiAgICAgICAgZXZ0OiBldnRcbiAgICAgIH0pOyAvLyBEZWxheSBpcyBpbXBvc3NpYmxlIGZvciBuYXRpdmUgRG5EIGluIEVkZ2Ugb3IgSUVcblxuICAgICAgaWYgKG9wdGlvbnMuZGVsYXkgJiYgKCFvcHRpb25zLmRlbGF5T25Ub3VjaE9ubHkgfHwgdG91Y2gpICYmICghdGhpcy5uYXRpdmVEcmFnZ2FibGUgfHwgIShFZGdlIHx8IElFMTFPckxlc3MpKSkge1xuICAgICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgICAgIHRoaXMuX29uRHJvcCgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIElmIHRoZSB1c2VyIG1vdmVzIHRoZSBwb2ludGVyIG9yIGxldCBnbyB0aGUgY2xpY2sgb3IgdG91Y2hcbiAgICAgICAgLy8gYmVmb3JlIHRoZSBkZWxheSBoYXMgYmVlbiByZWFjaGVkOlxuICAgICAgICAvLyBkaXNhYmxlIHRoZSBkZWxheWVkIGRyYWdcblxuXG4gICAgICAgIG9uKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG4gICAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaGVuZCcsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuICAgICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICAgICAgb24ob3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIF90aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2htb3ZlJywgX3RoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgICAgIG9wdGlvbnMuc3VwcG9ydFBvaW50ZXIgJiYgb24ob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgX3RoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgICAgIF90aGlzLl9kcmFnU3RhcnRUaW1lciA9IHNldFRpbWVvdXQoZHJhZ1N0YXJ0Rm4sIG9wdGlvbnMuZGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ1N0YXJ0Rm4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIF9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXI6IGZ1bmN0aW9uIF9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIoXG4gIC8qKiBUb3VjaEV2ZW50fFBvaW50ZXJFdmVudCAqKi9cbiAgZSkge1xuICAgIHZhciB0b3VjaCA9IGUudG91Y2hlcyA/IGUudG91Y2hlc1swXSA6IGU7XG5cbiAgICBpZiAoTWF0aC5tYXgoTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRoaXMuX2xhc3RYKSwgTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRoaXMuX2xhc3RZKSkgPj0gTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCAvICh0aGlzLm5hdGl2ZURyYWdnYWJsZSAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSkpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZygpO1xuICAgIH1cbiAgfSxcbiAgX2Rpc2FibGVEZWxheWVkRHJhZzogZnVuY3Rpb24gX2Rpc2FibGVEZWxheWVkRHJhZygpIHtcbiAgICBkcmFnRWwgJiYgX2Rpc2FibGVEcmFnZ2FibGUoZHJhZ0VsKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fZHJhZ1N0YXJ0VGltZXIpO1xuXG4gICAgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCk7XG4gIH0sXG4gIF9kaXNhYmxlRGVsYXllZERyYWdFdmVudHM6IGZ1bmN0aW9uIF9kaXNhYmxlRGVsYXllZERyYWdFdmVudHMoKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLmVsLm93bmVyRG9jdW1lbnQ7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICB9LFxuICBfdHJpZ2dlckRyYWdTdGFydDogZnVuY3Rpb24gX3RyaWdnZXJEcmFnU3RhcnQoXG4gIC8qKiBFdmVudCAqL1xuICBldnQsXG4gIC8qKiBUb3VjaCAqL1xuICB0b3VjaCkge1xuICAgIHRvdWNoID0gdG91Y2ggfHwgZXZ0LnBvaW50ZXJUeXBlID09ICd0b3VjaCcgJiYgZXZ0O1xuXG4gICAgaWYgKCF0aGlzLm5hdGl2ZURyYWdnYWJsZSB8fCB0b3VjaCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdXBwb3J0UG9pbnRlcikge1xuICAgICAgICBvbihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgICAgfSBlbHNlIGlmICh0b3VjaCkge1xuICAgICAgICBvbihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbihkcmFnRWwsICdkcmFnZW5kJywgdGhpcyk7XG4gICAgICBvbihyb290RWwsICdkcmFnc3RhcnQnLCB0aGlzLl9vbkRyYWdTdGFydCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gVGltZW91dCBuZWNjZXNzYXJ5IGZvciBJRTlcbiAgICAgICAgX25leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7fVxuICB9LFxuICBfZHJhZ1N0YXJ0ZWQ6IGZ1bmN0aW9uIF9kcmFnU3RhcnRlZChmYWxsYmFjaywgZXZ0KSB7XG5cbiAgICBhd2FpdGluZ0RyYWdTdGFydGVkID0gZmFsc2U7XG5cbiAgICBpZiAocm9vdEVsICYmIGRyYWdFbCkge1xuICAgICAgcGx1Z2luRXZlbnQoJ2RyYWdTdGFydGVkJywgdGhpcywge1xuICAgICAgICBldnQ6IGV2dFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICBvbihkb2N1bWVudCwgJ2RyYWdvdmVyJywgX2NoZWNrT3V0c2lkZVRhcmdldEVsKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIEFwcGx5IGVmZmVjdFxuXG4gICAgICAhZmFsbGJhY2sgJiYgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmRyYWdDbGFzcywgZmFsc2UpO1xuICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmdob3N0Q2xhc3MsIHRydWUpO1xuICAgICAgU29ydGFibGUuYWN0aXZlID0gdGhpcztcbiAgICAgIGZhbGxiYWNrICYmIHRoaXMuX2FwcGVuZEdob3N0KCk7IC8vIERyYWcgc3RhcnQgZXZlbnRcblxuICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgbmFtZTogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbnVsbGluZygpO1xuICAgIH1cbiAgfSxcbiAgX2VtdWxhdGVEcmFnT3ZlcjogZnVuY3Rpb24gX2VtdWxhdGVEcmFnT3ZlcigpIHtcbiAgICBpZiAodG91Y2hFdnQpIHtcbiAgICAgIHRoaXMuX2xhc3RYID0gdG91Y2hFdnQuY2xpZW50WDtcbiAgICAgIHRoaXMuX2xhc3RZID0gdG91Y2hFdnQuY2xpZW50WTtcblxuICAgICAgX2hpZGVHaG9zdEZvclRhcmdldCgpO1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0b3VjaEV2dC5jbGllbnRYLCB0b3VjaEV2dC5jbGllbnRZKTtcbiAgICAgIHZhciBwYXJlbnQgPSB0YXJnZXQ7XG5cbiAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0LnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludCh0b3VjaEV2dC5jbGllbnRYLCB0b3VjaEV2dC5jbGllbnRZKTtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gcGFyZW50KSBicmVhaztcbiAgICAgICAgcGFyZW50ID0gdGFyZ2V0O1xuICAgICAgfVxuXG4gICAgICBkcmFnRWwucGFyZW50Tm9kZVtleHBhbmRvXS5faXNPdXRzaWRlVGhpc0VsKHRhcmdldCk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGlmIChwYXJlbnRbZXhwYW5kb10pIHtcbiAgICAgICAgICAgIHZhciBpbnNlcnRlZCA9IHZvaWQgMDtcbiAgICAgICAgICAgIGluc2VydGVkID0gcGFyZW50W2V4cGFuZG9dLl9vbkRyYWdPdmVyKHtcbiAgICAgICAgICAgICAgY2xpZW50WDogdG91Y2hFdnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgY2xpZW50WTogdG91Y2hFdnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICAgIHJvb3RFbDogcGFyZW50XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGluc2VydGVkICYmICF0aGlzLm9wdGlvbnMuZHJhZ292ZXJCdWJibGUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFyZ2V0ID0gcGFyZW50OyAvLyBzdG9yZSBsYXN0IGVsZW1lbnRcbiAgICAgICAgfVxuICAgICAgICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG4gICAgICAgIHdoaWxlIChwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZSk7XG4gICAgICB9XG5cbiAgICAgIF91bmhpZGVHaG9zdEZvclRhcmdldCgpO1xuICAgIH1cbiAgfSxcbiAgX29uVG91Y2hNb3ZlOiBmdW5jdGlvbiBfb25Ub3VjaE1vdmUoXG4gIC8qKlRvdWNoRXZlbnQqL1xuICBldnQpIHtcbiAgICBpZiAodGFwRXZ0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICBmYWxsYmFja1RvbGVyYW5jZSA9IG9wdGlvbnMuZmFsbGJhY2tUb2xlcmFuY2UsXG4gICAgICAgICAgZmFsbGJhY2tPZmZzZXQgPSBvcHRpb25zLmZhbGxiYWNrT2Zmc2V0LFxuICAgICAgICAgIHRvdWNoID0gZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCxcbiAgICAgICAgICBnaG9zdE1hdHJpeCA9IGdob3N0RWwgJiYgbWF0cml4KGdob3N0RWwsIHRydWUpLFxuICAgICAgICAgIHNjYWxlWCA9IGdob3N0RWwgJiYgZ2hvc3RNYXRyaXggJiYgZ2hvc3RNYXRyaXguYSxcbiAgICAgICAgICBzY2FsZVkgPSBnaG9zdEVsICYmIGdob3N0TWF0cml4ICYmIGdob3N0TWF0cml4LmQsXG4gICAgICAgICAgcmVsYXRpdmVTY3JvbGxPZmZzZXQgPSBQb3NpdGlvbkdob3N0QWJzb2x1dGVseSAmJiBnaG9zdFJlbGF0aXZlUGFyZW50ICYmIGdldFJlbGF0aXZlU2Nyb2xsT2Zmc2V0KGdob3N0UmVsYXRpdmVQYXJlbnQpLFxuICAgICAgICAgIGR4ID0gKHRvdWNoLmNsaWVudFggLSB0YXBFdnQuY2xpZW50WCArIGZhbGxiYWNrT2Zmc2V0LngpIC8gKHNjYWxlWCB8fCAxKSArIChyZWxhdGl2ZVNjcm9sbE9mZnNldCA/IHJlbGF0aXZlU2Nyb2xsT2Zmc2V0WzBdIC0gZ2hvc3RSZWxhdGl2ZVBhcmVudEluaXRpYWxTY3JvbGxbMF0gOiAwKSAvIChzY2FsZVggfHwgMSksXG4gICAgICAgICAgZHkgPSAodG91Y2guY2xpZW50WSAtIHRhcEV2dC5jbGllbnRZICsgZmFsbGJhY2tPZmZzZXQueSkgLyAoc2NhbGVZIHx8IDEpICsgKHJlbGF0aXZlU2Nyb2xsT2Zmc2V0ID8gcmVsYXRpdmVTY3JvbGxPZmZzZXRbMV0gLSBnaG9zdFJlbGF0aXZlUGFyZW50SW5pdGlhbFNjcm9sbFsxXSA6IDApIC8gKHNjYWxlWSB8fCAxKTsgLy8gb25seSBzZXQgdGhlIHN0YXR1cyB0byBkcmFnZ2luZywgd2hlbiB3ZSBhcmUgYWN0dWFsbHkgZHJhZ2dpbmdcblxuICAgICAgaWYgKCFTb3J0YWJsZS5hY3RpdmUgJiYgIWF3YWl0aW5nRHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgaWYgKGZhbGxiYWNrVG9sZXJhbmNlICYmIE1hdGgubWF4KE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSB0aGlzLl9sYXN0WCksIE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSB0aGlzLl9sYXN0WSkpIDwgZmFsbGJhY2tUb2xlcmFuY2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vbkRyYWdTdGFydChldnQsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2hvc3RFbCkge1xuICAgICAgICBpZiAoZ2hvc3RNYXRyaXgpIHtcbiAgICAgICAgICBnaG9zdE1hdHJpeC5lICs9IGR4IC0gKGxhc3REeCB8fCAwKTtcbiAgICAgICAgICBnaG9zdE1hdHJpeC5mICs9IGR5IC0gKGxhc3REeSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnaG9zdE1hdHJpeCA9IHtcbiAgICAgICAgICAgIGE6IDEsXG4gICAgICAgICAgICBiOiAwLFxuICAgICAgICAgICAgYzogMCxcbiAgICAgICAgICAgIGQ6IDEsXG4gICAgICAgICAgICBlOiBkeCxcbiAgICAgICAgICAgIGY6IGR5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjc3NNYXRyaXggPSBcIm1hdHJpeChcIi5jb25jYXQoZ2hvc3RNYXRyaXguYSwgXCIsXCIpLmNvbmNhdChnaG9zdE1hdHJpeC5iLCBcIixcIikuY29uY2F0KGdob3N0TWF0cml4LmMsIFwiLFwiKS5jb25jYXQoZ2hvc3RNYXRyaXguZCwgXCIsXCIpLmNvbmNhdChnaG9zdE1hdHJpeC5lLCBcIixcIikuY29uY2F0KGdob3N0TWF0cml4LmYsIFwiKVwiKTtcbiAgICAgICAgY3NzKGdob3N0RWwsICd3ZWJraXRUcmFuc2Zvcm0nLCBjc3NNYXRyaXgpO1xuICAgICAgICBjc3MoZ2hvc3RFbCwgJ21velRyYW5zZm9ybScsIGNzc01hdHJpeCk7XG4gICAgICAgIGNzcyhnaG9zdEVsLCAnbXNUcmFuc2Zvcm0nLCBjc3NNYXRyaXgpO1xuICAgICAgICBjc3MoZ2hvc3RFbCwgJ3RyYW5zZm9ybScsIGNzc01hdHJpeCk7XG4gICAgICAgIGxhc3REeCA9IGR4O1xuICAgICAgICBsYXN0RHkgPSBkeTtcbiAgICAgICAgdG91Y2hFdnQgPSB0b3VjaDtcbiAgICAgIH1cblxuICAgICAgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9LFxuICBfYXBwZW5kR2hvc3Q6IGZ1bmN0aW9uIF9hcHBlbmRHaG9zdCgpIHtcbiAgICAvLyBCdWcgaWYgdXNpbmcgc2NhbGUoKTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjYzNzA1OFxuICAgIC8vIE5vdCBiZWluZyBhZGp1c3RlZCBmb3JcbiAgICBpZiAoIWdob3N0RWwpIHtcbiAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLm9wdGlvbnMuZmFsbGJhY2tPbkJvZHkgPyBkb2N1bWVudC5ib2R5IDogcm9vdEVsLFxuICAgICAgICAgIHJlY3QgPSBnZXRSZWN0KGRyYWdFbCwgdHJ1ZSwgUG9zaXRpb25HaG9zdEFic29sdXRlbHksIHRydWUsIGNvbnRhaW5lciksXG4gICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsgLy8gUG9zaXRpb24gYWJzb2x1dGVseVxuXG4gICAgICBpZiAoUG9zaXRpb25HaG9zdEFic29sdXRlbHkpIHtcbiAgICAgICAgLy8gR2V0IHJlbGF0aXZlbHkgcG9zaXRpb25lZCBwYXJlbnRcbiAgICAgICAgZ2hvc3RSZWxhdGl2ZVBhcmVudCA9IGNvbnRhaW5lcjtcblxuICAgICAgICB3aGlsZSAoY3NzKGdob3N0UmVsYXRpdmVQYXJlbnQsICdwb3NpdGlvbicpID09PSAnc3RhdGljJyAmJiBjc3MoZ2hvc3RSZWxhdGl2ZVBhcmVudCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScgJiYgZ2hvc3RSZWxhdGl2ZVBhcmVudCAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICBnaG9zdFJlbGF0aXZlUGFyZW50ID0gZ2hvc3RSZWxhdGl2ZVBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdob3N0UmVsYXRpdmVQYXJlbnQgIT09IGRvY3VtZW50LmJvZHkgJiYgZ2hvc3RSZWxhdGl2ZVBhcmVudCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgaWYgKGdob3N0UmVsYXRpdmVQYXJlbnQgPT09IGRvY3VtZW50KSBnaG9zdFJlbGF0aXZlUGFyZW50ID0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuICAgICAgICAgIHJlY3QudG9wICs9IGdob3N0UmVsYXRpdmVQYXJlbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgIHJlY3QubGVmdCArPSBnaG9zdFJlbGF0aXZlUGFyZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2hvc3RSZWxhdGl2ZVBhcmVudCA9IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdob3N0UmVsYXRpdmVQYXJlbnRJbml0aWFsU2Nyb2xsID0gZ2V0UmVsYXRpdmVTY3JvbGxPZmZzZXQoZ2hvc3RSZWxhdGl2ZVBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGdob3N0RWwgPSBkcmFnRWwuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgdG9nZ2xlQ2xhc3MoZ2hvc3RFbCwgb3B0aW9ucy5naG9zdENsYXNzLCBmYWxzZSk7XG4gICAgICB0b2dnbGVDbGFzcyhnaG9zdEVsLCBvcHRpb25zLmZhbGxiYWNrQ2xhc3MsIHRydWUpO1xuICAgICAgdG9nZ2xlQ2xhc3MoZ2hvc3RFbCwgb3B0aW9ucy5kcmFnQ2xhc3MsIHRydWUpO1xuICAgICAgY3NzKGdob3N0RWwsICd0cmFuc2l0aW9uJywgJycpO1xuICAgICAgY3NzKGdob3N0RWwsICd0cmFuc2Zvcm0nLCAnJyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ2JveC1zaXppbmcnLCAnYm9yZGVyLWJveCcpO1xuICAgICAgY3NzKGdob3N0RWwsICdtYXJnaW4nLCAwKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAndG9wJywgcmVjdC50b3ApO1xuICAgICAgY3NzKGdob3N0RWwsICdsZWZ0JywgcmVjdC5sZWZ0KTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnd2lkdGgnLCByZWN0LndpZHRoKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnaGVpZ2h0JywgcmVjdC5oZWlnaHQpO1xuICAgICAgY3NzKGdob3N0RWwsICdvcGFjaXR5JywgJzAuOCcpO1xuICAgICAgY3NzKGdob3N0RWwsICdwb3NpdGlvbicsIFBvc2l0aW9uR2hvc3RBYnNvbHV0ZWx5ID8gJ2Fic29sdXRlJyA6ICdmaXhlZCcpO1xuICAgICAgY3NzKGdob3N0RWwsICd6SW5kZXgnLCAnMTAwMDAwJyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3BvaW50ZXJFdmVudHMnLCAnbm9uZScpO1xuICAgICAgU29ydGFibGUuZ2hvc3QgPSBnaG9zdEVsO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdob3N0RWwpOyAvLyBTZXQgdHJhbnNmb3JtLW9yaWdpblxuXG4gICAgICBjc3MoZ2hvc3RFbCwgJ3RyYW5zZm9ybS1vcmlnaW4nLCB0YXBEaXN0YW5jZUxlZnQgLyBwYXJzZUludChnaG9zdEVsLnN0eWxlLndpZHRoKSAqIDEwMCArICclICcgKyB0YXBEaXN0YW5jZVRvcCAvIHBhcnNlSW50KGdob3N0RWwuc3R5bGUuaGVpZ2h0KSAqIDEwMCArICclJyk7XG4gICAgfVxuICB9LFxuICBfb25EcmFnU3RhcnQ6IGZ1bmN0aW9uIF9vbkRyYWdTdGFydChcbiAgLyoqRXZlbnQqL1xuICBldnQsXG4gIC8qKmJvb2xlYW4qL1xuICBmYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgZGF0YVRyYW5zZmVyID0gZXZ0LmRhdGFUcmFuc2ZlcjtcbiAgICB2YXIgb3B0aW9ucyA9IF90aGlzLm9wdGlvbnM7XG4gICAgcGx1Z2luRXZlbnQoJ2RyYWdTdGFydCcsIHRoaXMsIHtcbiAgICAgIGV2dDogZXZ0XG4gICAgfSk7XG5cbiAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgdGhpcy5fb25Ecm9wKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwbHVnaW5FdmVudCgnc2V0dXBDbG9uZScsIHRoaXMpO1xuXG4gICAgaWYgKCFTb3J0YWJsZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICBjbG9uZUVsID0gY2xvbmUoZHJhZ0VsKTtcbiAgICAgIGNsb25lRWwuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICBjbG9uZUVsLnN0eWxlWyd3aWxsLWNoYW5nZSddID0gJyc7XG5cbiAgICAgIHRoaXMuX2hpZGVDbG9uZSgpO1xuXG4gICAgICB0b2dnbGVDbGFzcyhjbG9uZUVsLCB0aGlzLm9wdGlvbnMuY2hvc2VuQ2xhc3MsIGZhbHNlKTtcbiAgICAgIFNvcnRhYmxlLmNsb25lID0gY2xvbmVFbDtcbiAgICB9IC8vICMxMTQzOiBJRnJhbWUgc3VwcG9ydCB3b3JrYXJvdW5kXG5cblxuICAgIF90aGlzLmNsb25lSWQgPSBfbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcGx1Z2luRXZlbnQoJ2Nsb25lJywgX3RoaXMpO1xuICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybjtcblxuICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlKSB7XG4gICAgICAgIHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmVFbCwgZHJhZ0VsKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2hpZGVDbG9uZSgpO1xuXG4gICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgbmFtZTogJ2Nsb25lJ1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgIWZhbGxiYWNrICYmIHRvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5kcmFnQ2xhc3MsIHRydWUpOyAvLyBTZXQgcHJvcGVyIGRyb3AgZXZlbnRzXG5cbiAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgIGlnbm9yZU5leHRDbGljayA9IHRydWU7XG4gICAgICBfdGhpcy5fbG9vcElkID0gc2V0SW50ZXJ2YWwoX3RoaXMuX2VtdWxhdGVEcmFnT3ZlciwgNTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVbmRvIHdoYXQgd2FzIHNldCBpbiBfcHJlcGFyZURyYWdTdGFydCBiZWZvcmUgZHJhZyBzdGFydGVkXG4gICAgICBvZmYoZG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX29uRHJvcCk7XG4gICAgICBvZmYoZG9jdW1lbnQsICd0b3VjaGVuZCcsIF90aGlzLl9vbkRyb3ApO1xuICAgICAgb2ZmKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBfdGhpcy5fb25Ecm9wKTtcblxuICAgICAgaWYgKGRhdGFUcmFuc2Zlcikge1xuICAgICAgICBkYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcbiAgICAgICAgb3B0aW9ucy5zZXREYXRhICYmIG9wdGlvbnMuc2V0RGF0YS5jYWxsKF90aGlzLCBkYXRhVHJhbnNmZXIsIGRyYWdFbCk7XG4gICAgICB9XG5cbiAgICAgIG9uKGRvY3VtZW50LCAnZHJvcCcsIF90aGlzKTsgLy8gIzEyNzYgZml4OlxuXG4gICAgICBjc3MoZHJhZ0VsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZVooMCknKTtcbiAgICB9XG5cbiAgICBhd2FpdGluZ0RyYWdTdGFydGVkID0gdHJ1ZTtcbiAgICBfdGhpcy5fZHJhZ1N0YXJ0SWQgPSBfbmV4dFRpY2soX3RoaXMuX2RyYWdTdGFydGVkLmJpbmQoX3RoaXMsIGZhbGxiYWNrLCBldnQpKTtcbiAgICBvbihkb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgX3RoaXMpO1xuICAgIG1vdmVkID0gdHJ1ZTtcblxuICAgIGlmIChTYWZhcmkpIHtcbiAgICAgIGNzcyhkb2N1bWVudC5ib2R5LCAndXNlci1zZWxlY3QnLCAnbm9uZScpO1xuICAgIH1cbiAgfSxcbiAgLy8gUmV0dXJucyB0cnVlIC0gaWYgbm8gZnVydGhlciBhY3Rpb24gaXMgbmVlZGVkIChlaXRoZXIgaW5zZXJ0ZWQgb3IgYW5vdGhlciBjb25kaXRpb24pXG4gIF9vbkRyYWdPdmVyOiBmdW5jdGlvbiBfb25EcmFnT3ZlcihcbiAgLyoqRXZlbnQqL1xuICBldnQpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmVsLFxuICAgICAgICB0YXJnZXQgPSBldnQudGFyZ2V0LFxuICAgICAgICBkcmFnUmVjdCxcbiAgICAgICAgdGFyZ2V0UmVjdCxcbiAgICAgICAgcmV2ZXJ0LFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBncm91cCA9IG9wdGlvbnMuZ3JvdXAsXG4gICAgICAgIGFjdGl2ZVNvcnRhYmxlID0gU29ydGFibGUuYWN0aXZlLFxuICAgICAgICBpc093bmVyID0gYWN0aXZlR3JvdXAgPT09IGdyb3VwLFxuICAgICAgICBjYW5Tb3J0ID0gb3B0aW9ucy5zb3J0LFxuICAgICAgICBmcm9tU29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCBhY3RpdmVTb3J0YWJsZSxcbiAgICAgICAgdmVydGljYWwsXG4gICAgICAgIF90aGlzID0gdGhpcyxcbiAgICAgICAgY29tcGxldGVkRmlyZWQgPSBmYWxzZTtcblxuICAgIGlmIChfc2lsZW50KSByZXR1cm47XG5cbiAgICBmdW5jdGlvbiBkcmFnT3ZlckV2ZW50KG5hbWUsIGV4dHJhKSB7XG4gICAgICBwbHVnaW5FdmVudChuYW1lLCBfdGhpcywgX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGV2dDogZXZ0LFxuICAgICAgICBpc093bmVyOiBpc093bmVyLFxuICAgICAgICBheGlzOiB2ZXJ0aWNhbCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCcsXG4gICAgICAgIHJldmVydDogcmV2ZXJ0LFxuICAgICAgICBkcmFnUmVjdDogZHJhZ1JlY3QsXG4gICAgICAgIHRhcmdldFJlY3Q6IHRhcmdldFJlY3QsXG4gICAgICAgIGNhblNvcnQ6IGNhblNvcnQsXG4gICAgICAgIGZyb21Tb3J0YWJsZTogZnJvbVNvcnRhYmxlLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgY29tcGxldGVkOiBjb21wbGV0ZWQsXG4gICAgICAgIG9uTW92ZTogZnVuY3Rpb24gb25Nb3ZlKHRhcmdldCwgYWZ0ZXIpIHtcbiAgICAgICAgICByZXR1cm4gX29uTW92ZShyb290RWwsIGVsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXQsIGdldFJlY3QodGFyZ2V0KSwgZXZ0LCBhZnRlcik7XG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZWQ6IGNoYW5nZWRcbiAgICAgIH0sIGV4dHJhKSk7XG4gICAgfSAvLyBDYXB0dXJlIGFuaW1hdGlvbiBzdGF0ZVxuXG5cbiAgICBmdW5jdGlvbiBjYXB0dXJlKCkge1xuICAgICAgZHJhZ092ZXJFdmVudCgnZHJhZ092ZXJBbmltYXRpb25DYXB0dXJlJyk7XG5cbiAgICAgIF90aGlzLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuXG4gICAgICBpZiAoX3RoaXMgIT09IGZyb21Tb3J0YWJsZSkge1xuICAgICAgICBmcm9tU29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgICB9XG4gICAgfSAvLyBSZXR1cm4gaW52b2NhdGlvbiB3aGVuIGRyYWdFbCBpcyBpbnNlcnRlZCAob3IgY29tcGxldGVkKVxuXG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZWQoaW5zZXJ0aW9uKSB7XG4gICAgICBkcmFnT3ZlckV2ZW50KCdkcmFnT3ZlckNvbXBsZXRlZCcsIHtcbiAgICAgICAgaW5zZXJ0aW9uOiBpbnNlcnRpb25cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaW5zZXJ0aW9uKSB7XG4gICAgICAgIC8vIENsb25lcyBtdXN0IGJlIGhpZGRlbiBiZWZvcmUgZm9sZGluZyBhbmltYXRpb24gdG8gY2FwdHVyZSBkcmFnUmVjdEFic29sdXRlIHByb3Blcmx5XG4gICAgICAgIGlmIChpc093bmVyKSB7XG4gICAgICAgICAgYWN0aXZlU29ydGFibGUuX2hpZGVDbG9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9zaG93Q2xvbmUoX3RoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF90aGlzICE9PSBmcm9tU29ydGFibGUpIHtcbiAgICAgICAgICAvLyBTZXQgZ2hvc3QgY2xhc3MgdG8gbmV3IHNvcnRhYmxlJ3MgZ2hvc3QgY2xhc3NcbiAgICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIHB1dFNvcnRhYmxlID8gcHV0U29ydGFibGUub3B0aW9ucy5naG9zdENsYXNzIDogYWN0aXZlU29ydGFibGUub3B0aW9ucy5naG9zdENsYXNzLCBmYWxzZSk7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmdob3N0Q2xhc3MsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHB1dFNvcnRhYmxlICE9PSBfdGhpcyAmJiBfdGhpcyAhPT0gU29ydGFibGUuYWN0aXZlKSB7XG4gICAgICAgICAgcHV0U29ydGFibGUgPSBfdGhpcztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcyA9PT0gU29ydGFibGUuYWN0aXZlICYmIHB1dFNvcnRhYmxlKSB7XG4gICAgICAgICAgcHV0U29ydGFibGUgPSBudWxsO1xuICAgICAgICB9IC8vIEFuaW1hdGlvblxuXG5cbiAgICAgICAgaWYgKGZyb21Tb3J0YWJsZSA9PT0gX3RoaXMpIHtcbiAgICAgICAgICBfdGhpcy5faWdub3JlV2hpbGVBbmltYXRpbmcgPSB0YXJnZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5hbmltYXRlQWxsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkcmFnT3ZlckV2ZW50KCdkcmFnT3ZlckFuaW1hdGlvbkNvbXBsZXRlJyk7XG4gICAgICAgICAgX3RoaXMuX2lnbm9yZVdoaWxlQW5pbWF0aW5nID0gbnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKF90aGlzICE9PSBmcm9tU29ydGFibGUpIHtcbiAgICAgICAgICBmcm9tU29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgICAgICAgIGZyb21Tb3J0YWJsZS5faWdub3JlV2hpbGVBbmltYXRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IC8vIE51bGwgbGFzdFRhcmdldCBpZiBpdCBpcyBub3QgaW5zaWRlIGEgcHJldmlvdXNseSBzd2FwcGVkIGVsZW1lbnRcblxuXG4gICAgICBpZiAodGFyZ2V0ID09PSBkcmFnRWwgJiYgIWRyYWdFbC5hbmltYXRlZCB8fCB0YXJnZXQgPT09IGVsICYmICF0YXJnZXQuYW5pbWF0ZWQpIHtcbiAgICAgICAgbGFzdFRhcmdldCA9IG51bGw7XG4gICAgICB9IC8vIG5vIGJ1YmJsaW5nIGFuZCBub3QgZmFsbGJhY2tcblxuXG4gICAgICBpZiAoIW9wdGlvbnMuZHJhZ292ZXJCdWJibGUgJiYgIWV2dC5yb290RWwgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudCkge1xuICAgICAgICBkcmFnRWwucGFyZW50Tm9kZVtleHBhbmRvXS5faXNPdXRzaWRlVGhpc0VsKGV2dC50YXJnZXQpOyAvLyBEbyBub3QgZGV0ZWN0IGZvciBlbXB0eSBpbnNlcnQgaWYgYWxyZWFkeSBpbnNlcnRlZFxuXG5cbiAgICAgICAgIWluc2VydGlvbiAmJiBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudChldnQpO1xuICAgICAgfVxuXG4gICAgICAhb3B0aW9ucy5kcmFnb3ZlckJ1YmJsZSAmJiBldnQuc3RvcFByb3BhZ2F0aW9uICYmIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybiBjb21wbGV0ZWRGaXJlZCA9IHRydWU7XG4gICAgfSAvLyBDYWxsIHdoZW4gZHJhZ0VsIGhhcyBiZWVuIGluc2VydGVkXG5cblxuICAgIGZ1bmN0aW9uIGNoYW5nZWQoKSB7XG4gICAgICBuZXdJbmRleCA9IGluZGV4KGRyYWdFbCk7XG4gICAgICBuZXdEcmFnZ2FibGVJbmRleCA9IGluZGV4KGRyYWdFbCwgb3B0aW9ucy5kcmFnZ2FibGUpO1xuXG4gICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgbmFtZTogJ2NoYW5nZScsXG4gICAgICAgIHRvRWw6IGVsLFxuICAgICAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgICAgIG5ld0RyYWdnYWJsZUluZGV4OiBuZXdEcmFnZ2FibGVJbmRleCxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZXZ0LnByZXZlbnREZWZhdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRhcmdldCA9IGNsb3Nlc3QodGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSwgZWwsIHRydWUpO1xuICAgIGRyYWdPdmVyRXZlbnQoJ2RyYWdPdmVyJyk7XG4gICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybiBjb21wbGV0ZWRGaXJlZDtcblxuICAgIGlmIChkcmFnRWwuY29udGFpbnMoZXZ0LnRhcmdldCkgfHwgdGFyZ2V0LmFuaW1hdGVkICYmIHRhcmdldC5hbmltYXRpbmdYICYmIHRhcmdldC5hbmltYXRpbmdZIHx8IF90aGlzLl9pZ25vcmVXaGlsZUFuaW1hdGluZyA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gY29tcGxldGVkKGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZ25vcmVOZXh0Q2xpY2sgPSBmYWxzZTtcblxuICAgIGlmIChhY3RpdmVTb3J0YWJsZSAmJiAhb3B0aW9ucy5kaXNhYmxlZCAmJiAoaXNPd25lciA/IGNhblNvcnQgfHwgKHJldmVydCA9ICFyb290RWwuY29udGFpbnMoZHJhZ0VsKSkgLy8gUmV2ZXJ0aW5nIGl0ZW0gaW50byB0aGUgb3JpZ2luYWwgbGlzdFxuICAgIDogcHV0U29ydGFibGUgPT09IHRoaXMgfHwgKHRoaXMubGFzdFB1dE1vZGUgPSBhY3RpdmVHcm91cC5jaGVja1B1bGwodGhpcywgYWN0aXZlU29ydGFibGUsIGRyYWdFbCwgZXZ0KSkgJiYgZ3JvdXAuY2hlY2tQdXQodGhpcywgYWN0aXZlU29ydGFibGUsIGRyYWdFbCwgZXZ0KSkpIHtcbiAgICAgIHZlcnRpY2FsID0gdGhpcy5fZ2V0RGlyZWN0aW9uKGV2dCwgdGFyZ2V0KSA9PT0gJ3ZlcnRpY2FsJztcbiAgICAgIGRyYWdSZWN0ID0gZ2V0UmVjdChkcmFnRWwpO1xuICAgICAgZHJhZ092ZXJFdmVudCgnZHJhZ092ZXJWYWxpZCcpO1xuICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybiBjb21wbGV0ZWRGaXJlZDtcblxuICAgICAgaWYgKHJldmVydCkge1xuICAgICAgICBwYXJlbnRFbCA9IHJvb3RFbDsgLy8gYWN0dWFsaXphdGlvblxuXG4gICAgICAgIGNhcHR1cmUoKTtcblxuICAgICAgICB0aGlzLl9oaWRlQ2xvbmUoKTtcblxuICAgICAgICBkcmFnT3ZlckV2ZW50KCdyZXZlcnQnKTtcblxuICAgICAgICBpZiAoIVNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgICAgICBpZiAobmV4dEVsKSB7XG4gICAgICAgICAgICByb290RWwuaW5zZXJ0QmVmb3JlKGRyYWdFbCwgbmV4dEVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm9vdEVsLmFwcGVuZENoaWxkKGRyYWdFbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbXBsZXRlZCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsTGFzdENoaWxkID0gbGFzdENoaWxkKGVsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cbiAgICAgIGlmICghZWxMYXN0Q2hpbGQgfHwgX2dob3N0SXNMYXN0KGV2dCwgdmVydGljYWwsIHRoaXMpICYmICFlbExhc3RDaGlsZC5hbmltYXRlZCkge1xuICAgICAgICAvLyBJZiBhbHJlYWR5IGF0IGVuZCBvZiBsaXN0OiBEbyBub3QgaW5zZXJ0XG4gICAgICAgIGlmIChlbExhc3RDaGlsZCA9PT0gZHJhZ0VsKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZChmYWxzZSk7XG4gICAgICAgIH0gLy8gYXNzaWduIHRhcmdldCBvbmx5IGlmIGNvbmRpdGlvbiBpcyB0cnVlXG5cblxuICAgICAgICBpZiAoZWxMYXN0Q2hpbGQgJiYgZWwgPT09IGV2dC50YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXQgPSBlbExhc3RDaGlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXRSZWN0ID0gZ2V0UmVjdCh0YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9vbk1vdmUocm9vdEVsLCBlbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCBldnQsICEhdGFyZ2V0KSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBjYXB0dXJlKCk7XG4gICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcbiAgICAgICAgICBwYXJlbnRFbCA9IGVsOyAvLyBhY3R1YWxpemF0aW9uXG5cbiAgICAgICAgICBjaGFuZ2VkKCk7XG4gICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQucGFyZW50Tm9kZSA9PT0gZWwpIHtcbiAgICAgICAgdGFyZ2V0UmVjdCA9IGdldFJlY3QodGFyZ2V0KTtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IDAsXG4gICAgICAgICAgICB0YXJnZXRCZWZvcmVGaXJzdFN3YXAsXG4gICAgICAgICAgICBkaWZmZXJlbnRMZXZlbCA9IGRyYWdFbC5wYXJlbnROb2RlICE9PSBlbCxcbiAgICAgICAgICAgIGRpZmZlcmVudFJvd0NvbCA9ICFfZHJhZ0VsSW5Sb3dDb2x1bW4oZHJhZ0VsLmFuaW1hdGVkICYmIGRyYWdFbC50b1JlY3QgfHwgZHJhZ1JlY3QsIHRhcmdldC5hbmltYXRlZCAmJiB0YXJnZXQudG9SZWN0IHx8IHRhcmdldFJlY3QsIHZlcnRpY2FsKSxcbiAgICAgICAgICAgIHNpZGUxID0gdmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JyxcbiAgICAgICAgICAgIHNjcm9sbGVkUGFzdFRvcCA9IGlzU2Nyb2xsZWRQYXN0KHRhcmdldCwgJ3RvcCcsICd0b3AnKSB8fCBpc1Njcm9sbGVkUGFzdChkcmFnRWwsICd0b3AnLCAndG9wJyksXG4gICAgICAgICAgICBzY3JvbGxCZWZvcmUgPSBzY3JvbGxlZFBhc3RUb3AgPyBzY3JvbGxlZFBhc3RUb3Auc2Nyb2xsVG9wIDogdm9pZCAwO1xuXG4gICAgICAgIGlmIChsYXN0VGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXRCZWZvcmVGaXJzdFN3YXAgPSB0YXJnZXRSZWN0W3NpZGUxXTtcbiAgICAgICAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSBmYWxzZTtcbiAgICAgICAgICBpc0NpcmN1bXN0YW50aWFsSW52ZXJ0ID0gIWRpZmZlcmVudFJvd0NvbCAmJiBvcHRpb25zLmludmVydFN3YXAgfHwgZGlmZmVyZW50TGV2ZWw7XG4gICAgICAgIH1cblxuICAgICAgICBkaXJlY3Rpb24gPSBfZ2V0U3dhcERpcmVjdGlvbihldnQsIHRhcmdldCwgdGFyZ2V0UmVjdCwgdmVydGljYWwsIGRpZmZlcmVudFJvd0NvbCA/IDEgOiBvcHRpb25zLnN3YXBUaHJlc2hvbGQsIG9wdGlvbnMuaW52ZXJ0ZWRTd2FwVGhyZXNob2xkID09IG51bGwgPyBvcHRpb25zLnN3YXBUaHJlc2hvbGQgOiBvcHRpb25zLmludmVydGVkU3dhcFRocmVzaG9sZCwgaXNDaXJjdW1zdGFudGlhbEludmVydCwgbGFzdFRhcmdldCA9PT0gdGFyZ2V0KTtcbiAgICAgICAgdmFyIHNpYmxpbmc7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRhcmdldCBpcyBiZXNpZGUgZHJhZ0VsIGluIHJlc3BlY3RpdmUgZGlyZWN0aW9uIChpZ25vcmluZyBoaWRkZW4gZWxlbWVudHMpXG4gICAgICAgICAgdmFyIGRyYWdJbmRleCA9IGluZGV4KGRyYWdFbCk7XG5cbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBkcmFnSW5kZXggLT0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgc2libGluZyA9IHBhcmVudEVsLmNoaWxkcmVuW2RyYWdJbmRleF07XG4gICAgICAgICAgfSB3aGlsZSAoc2libGluZyAmJiAoY3NzKHNpYmxpbmcsICdkaXNwbGF5JykgPT09ICdub25lJyB8fCBzaWJsaW5nID09PSBnaG9zdEVsKSk7XG4gICAgICAgIH0gLy8gSWYgZHJhZ0VsIGlzIGFscmVhZHkgYmVzaWRlIHRhcmdldDogRG8gbm90IGluc2VydFxuXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMCB8fCBzaWJsaW5nID09PSB0YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm4gY29tcGxldGVkKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUYXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIGxhc3REaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIHZhciBuZXh0U2libGluZyA9IHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmcsXG4gICAgICAgICAgICBhZnRlciA9IGZhbHNlO1xuICAgICAgICBhZnRlciA9IGRpcmVjdGlvbiA9PT0gMTtcblxuICAgICAgICB2YXIgbW92ZVZlY3RvciA9IF9vbk1vdmUocm9vdEVsLCBlbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCBldnQsIGFmdGVyKTtcblxuICAgICAgICBpZiAobW92ZVZlY3RvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAobW92ZVZlY3RvciA9PT0gMSB8fCBtb3ZlVmVjdG9yID09PSAtMSkge1xuICAgICAgICAgICAgYWZ0ZXIgPSBtb3ZlVmVjdG9yID09PSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9zaWxlbnQgPSB0cnVlO1xuICAgICAgICAgIHNldFRpbWVvdXQoX3Vuc2lsZW50LCAzMCk7XG4gICAgICAgICAgY2FwdHVyZSgpO1xuXG4gICAgICAgICAgaWYgKGFmdGVyICYmICFuZXh0U2libGluZykge1xuICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRyYWdFbCwgYWZ0ZXIgPyBuZXh0U2libGluZyA6IHRhcmdldCk7XG4gICAgICAgICAgfSAvLyBVbmRvIGNocm9tZSdzIHNjcm9sbCBhZGp1c3RtZW50IChoYXMgbm8gZWZmZWN0IG9uIG90aGVyIGJyb3dzZXJzKVxuXG5cbiAgICAgICAgICBpZiAoc2Nyb2xsZWRQYXN0VG9wKSB7XG4gICAgICAgICAgICBzY3JvbGxCeShzY3JvbGxlZFBhc3RUb3AsIDAsIHNjcm9sbEJlZm9yZSAtIHNjcm9sbGVkUGFzdFRvcC5zY3JvbGxUb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudEVsID0gZHJhZ0VsLnBhcmVudE5vZGU7IC8vIGFjdHVhbGl6YXRpb25cbiAgICAgICAgICAvLyBtdXN0IGJlIGRvbmUgYmVmb3JlIGFuaW1hdGlvblxuXG4gICAgICAgICAgaWYgKHRhcmdldEJlZm9yZUZpcnN0U3dhcCAhPT0gdW5kZWZpbmVkICYmICFpc0NpcmN1bXN0YW50aWFsSW52ZXJ0KSB7XG4gICAgICAgICAgICB0YXJnZXRNb3ZlRGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXRCZWZvcmVGaXJzdFN3YXAgLSBnZXRSZWN0KHRhcmdldClbc2lkZTFdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGFuZ2VkKCk7XG4gICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZWwuY29udGFpbnMoZHJhZ0VsKSkge1xuICAgICAgICByZXR1cm4gY29tcGxldGVkKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIF9pZ25vcmVXaGlsZUFuaW1hdGluZzogbnVsbCxcbiAgX29mZk1vdmVFdmVudHM6IGZ1bmN0aW9uIF9vZmZNb3ZlRXZlbnRzKCkge1xuICAgIG9mZihkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICBvZmYoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgb2ZmKGRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgb2ZmKGRvY3VtZW50LCAnZHJhZ292ZXInLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gICAgb2ZmKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICAgIG9mZihkb2N1bWVudCwgJ3RvdWNobW92ZScsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgfSxcbiAgX29mZlVwRXZlbnRzOiBmdW5jdGlvbiBfb2ZmVXBFdmVudHMoKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLmVsLm93bmVyRG9jdW1lbnQ7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Ecm9wKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ecm9wKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJ1cCcsIHRoaXMuX29uRHJvcCk7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIHRoaXMuX29uRHJvcCk7XG4gICAgb2ZmKGRvY3VtZW50LCAnc2VsZWN0c3RhcnQnLCB0aGlzKTtcbiAgfSxcbiAgX29uRHJvcDogZnVuY3Rpb24gX29uRHJvcChcbiAgLyoqRXZlbnQqL1xuICBldnQpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmVsLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zOyAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnQgd2l0aGluIGl0cyBwYXJlbnRcblxuICAgIG5ld0luZGV4ID0gaW5kZXgoZHJhZ0VsKTtcbiAgICBuZXdEcmFnZ2FibGVJbmRleCA9IGluZGV4KGRyYWdFbCwgb3B0aW9ucy5kcmFnZ2FibGUpO1xuICAgIHBsdWdpbkV2ZW50KCdkcm9wJywgdGhpcywge1xuICAgICAgZXZ0OiBldnRcbiAgICB9KTtcbiAgICBwYXJlbnRFbCA9IGRyYWdFbCAmJiBkcmFnRWwucGFyZW50Tm9kZTsgLy8gR2V0IGFnYWluIGFmdGVyIHBsdWdpbiBldmVudFxuXG4gICAgbmV3SW5kZXggPSBpbmRleChkcmFnRWwpO1xuICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gaW5kZXgoZHJhZ0VsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cbiAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgdGhpcy5fbnVsbGluZygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXRpbmdEcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgIGlzQ2lyY3Vtc3RhbnRpYWxJbnZlcnQgPSBmYWxzZTtcbiAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSBmYWxzZTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX2xvb3BJZCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2RyYWdTdGFydFRpbWVyKTtcblxuICAgIF9jYW5jZWxOZXh0VGljayh0aGlzLmNsb25lSWQpO1xuXG4gICAgX2NhbmNlbE5leHRUaWNrKHRoaXMuX2RyYWdTdGFydElkKTsgLy8gVW5iaW5kIGV2ZW50c1xuXG5cbiAgICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgIG9mZihkb2N1bWVudCwgJ2Ryb3AnLCB0aGlzKTtcbiAgICAgIG9mZihlbCwgJ2RyYWdzdGFydCcsIHRoaXMuX29uRHJhZ1N0YXJ0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vZmZNb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLl9vZmZVcEV2ZW50cygpO1xuXG4gICAgaWYgKFNhZmFyaSkge1xuICAgICAgY3NzKGRvY3VtZW50LmJvZHksICd1c2VyLXNlbGVjdCcsICcnKTtcbiAgICB9XG5cbiAgICBjc3MoZHJhZ0VsLCAndHJhbnNmb3JtJywgJycpO1xuXG4gICAgaWYgKGV2dCkge1xuICAgICAgaWYgKG1vdmVkKSB7XG4gICAgICAgIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAhb3B0aW9ucy5kcm9wQnViYmxlICYmIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgZ2hvc3RFbCAmJiBnaG9zdEVsLnBhcmVudE5vZGUgJiYgZ2hvc3RFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGdob3N0RWwpO1xuXG4gICAgICBpZiAocm9vdEVsID09PSBwYXJlbnRFbCB8fCBwdXRTb3J0YWJsZSAmJiBwdXRTb3J0YWJsZS5sYXN0UHV0TW9kZSAhPT0gJ2Nsb25lJykge1xuICAgICAgICAvLyBSZW1vdmUgY2xvbmUocylcbiAgICAgICAgY2xvbmVFbCAmJiBjbG9uZUVsLnBhcmVudE5vZGUgJiYgY2xvbmVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lRWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZHJhZ0VsKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICAgIG9mZihkcmFnRWwsICdkcmFnZW5kJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBfZGlzYWJsZURyYWdnYWJsZShkcmFnRWwpO1xuXG4gICAgICAgIGRyYWdFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICcnOyAvLyBSZW1vdmUgY2xhc3Nlc1xuICAgICAgICAvLyBnaG9zdENsYXNzIGlzIGFkZGVkIGluIGRyYWdTdGFydGVkXG5cbiAgICAgICAgaWYgKG1vdmVkICYmICFhd2FpdGluZ0RyYWdTdGFydGVkKSB7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBwdXRTb3J0YWJsZSA/IHB1dFNvcnRhYmxlLm9wdGlvbnMuZ2hvc3RDbGFzcyA6IHRoaXMub3B0aW9ucy5naG9zdENsYXNzLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgZmFsc2UpOyAvLyBEcmFnIHN0b3AgZXZlbnRcblxuICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgbmFtZTogJ3VuY2hvb3NlJyxcbiAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICBuZXdJbmRleDogbnVsbCxcbiAgICAgICAgICBuZXdEcmFnZ2FibGVJbmRleDogbnVsbCxcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJvb3RFbCAhPT0gcGFyZW50RWwpIHtcbiAgICAgICAgICBpZiAobmV3SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gQWRkIGV2ZW50XG4gICAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgIHJvb3RFbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIG5hbWU6ICdhZGQnLFxuICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgZnJvbUVsOiByb290RWwsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgfSk7IC8vIFJlbW92ZSBldmVudFxuXG5cbiAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICAgIG5hbWU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgICB9KTsgLy8gZHJhZyBmcm9tIG9uZSBsaXN0IGFuZCBkcm9wIGludG8gYW5vdGhlclxuXG5cbiAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgcm9vdEVsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgbmFtZTogJ3NvcnQnLFxuICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgZnJvbUVsOiByb290RWwsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICAgIG5hbWU6ICdzb3J0JyxcbiAgICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHV0U29ydGFibGUgJiYgcHV0U29ydGFibGUuc2F2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChuZXdJbmRleCAhPT0gb2xkSW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChuZXdJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgIC8vIGRyYWcgJiBkcm9wIHdpdGhpbiB0aGUgc2FtZSBsaXN0XG4gICAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBkYXRlJyxcbiAgICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzb3J0JyxcbiAgICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFNvcnRhYmxlLmFjdGl2ZSkge1xuICAgICAgICAgIC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuICAgICAgICAgIGlmIChuZXdJbmRleCA9PSBudWxsIHx8IG5ld0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgbmV3SW5kZXggPSBvbGRJbmRleDtcbiAgICAgICAgICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gb2xkRHJhZ2dhYmxlSW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICBuYW1lOiAnZW5kJyxcbiAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgfSk7IC8vIFNhdmUgc29ydGluZ1xuXG5cbiAgICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX251bGxpbmcoKTtcbiAgfSxcbiAgX251bGxpbmc6IGZ1bmN0aW9uIF9udWxsaW5nKCkge1xuICAgIHBsdWdpbkV2ZW50KCdudWxsaW5nJywgdGhpcyk7XG4gICAgcm9vdEVsID0gZHJhZ0VsID0gcGFyZW50RWwgPSBnaG9zdEVsID0gbmV4dEVsID0gY2xvbmVFbCA9IGxhc3REb3duRWwgPSBjbG9uZUhpZGRlbiA9IHRhcEV2dCA9IHRvdWNoRXZ0ID0gbW92ZWQgPSBuZXdJbmRleCA9IG5ld0RyYWdnYWJsZUluZGV4ID0gb2xkSW5kZXggPSBvbGREcmFnZ2FibGVJbmRleCA9IGxhc3RUYXJnZXQgPSBsYXN0RGlyZWN0aW9uID0gcHV0U29ydGFibGUgPSBhY3RpdmVHcm91cCA9IFNvcnRhYmxlLmRyYWdnZWQgPSBTb3J0YWJsZS5naG9zdCA9IFNvcnRhYmxlLmNsb25lID0gU29ydGFibGUuYWN0aXZlID0gbnVsbDtcbiAgICBzYXZlZElucHV0Q2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgICAgZWwuY2hlY2tlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgc2F2ZWRJbnB1dENoZWNrZWQubGVuZ3RoID0gbGFzdER4ID0gbGFzdER5ID0gMDtcbiAgfSxcbiAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KFxuICAvKipFdmVudCovXG4gIGV2dCkge1xuICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgICAgIHRoaXMuX29uRHJvcChldnQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAgY2FzZSAnZHJhZ292ZXInOlxuICAgICAgICBpZiAoZHJhZ0VsKSB7XG4gICAgICAgICAgdGhpcy5fb25EcmFnT3ZlcihldnQpO1xuXG4gICAgICAgICAgX2dsb2JhbERyYWdPdmVyKGV2dCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2VsZWN0c3RhcnQnOlxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIHRoZSBpdGVtIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5nLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nW119XG4gICAqL1xuICB0b0FycmF5OiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHZhciBvcmRlciA9IFtdLFxuICAgICAgICBlbCxcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmVsLmNoaWxkcmVuLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBlbCA9IGNoaWxkcmVuW2ldO1xuXG4gICAgICBpZiAoY2xvc2VzdChlbCwgb3B0aW9ucy5kcmFnZ2FibGUsIHRoaXMuZWwsIGZhbHNlKSkge1xuICAgICAgICBvcmRlci5wdXNoKGVsLmdldEF0dHJpYnV0ZShvcHRpb25zLmRhdGFJZEF0dHIpIHx8IF9nZW5lcmF0ZUlkKGVsKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBhcnJheS5cbiAgICogQHBhcmFtICB7U3RyaW5nW119ICBvcmRlciAgb3JkZXIgb2YgdGhlIGl0ZW1zXG4gICAqL1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KG9yZGVyLCB1c2VBbmltYXRpb24pIHtcbiAgICB2YXIgaXRlbXMgPSB7fSxcbiAgICAgICAgcm9vdEVsID0gdGhpcy5lbDtcbiAgICB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCwgaSkge1xuICAgICAgdmFyIGVsID0gcm9vdEVsLmNoaWxkcmVuW2ldO1xuXG4gICAgICBpZiAoY2xvc2VzdChlbCwgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSwgcm9vdEVsLCBmYWxzZSkpIHtcbiAgICAgICAgaXRlbXNbaWRdID0gZWw7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgdXNlQW5pbWF0aW9uICYmIHRoaXMuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGlmIChpdGVtc1tpZF0pIHtcbiAgICAgICAgcm9vdEVsLnJlbW92ZUNoaWxkKGl0ZW1zW2lkXSk7XG4gICAgICAgIHJvb3RFbC5hcHBlbmRDaGlsZChpdGVtc1tpZF0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHVzZUFuaW1hdGlvbiAmJiB0aGlzLmFuaW1hdGVBbGwoKTtcbiAgfSxcblxuICAvKipcbiAgICogU2F2ZSB0aGUgY3VycmVudCBzb3J0aW5nXG4gICAqL1xuICBzYXZlOiBmdW5jdGlvbiBzYXZlKCkge1xuICAgIHZhciBzdG9yZSA9IHRoaXMub3B0aW9ucy5zdG9yZTtcbiAgICBzdG9yZSAmJiBzdG9yZS5zZXQgJiYgc3RvcmUuc2V0KHRoaXMpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBzZXQsIGdldCB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIGJ5IHRlc3RpbmcgdGhlIGVsZW1lbnQgaXRzZWxmIGFuZCB0cmF2ZXJzaW5nIHVwIHRocm91Z2ggaXRzIGFuY2VzdG9ycyBpbiB0aGUgRE9NIHRyZWUuXG4gICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gIGVsXG4gICAqIEBwYXJhbSAgIHtTdHJpbmd9ICAgICAgIFtzZWxlY3Rvcl0gIGRlZmF1bHQ6IGBvcHRpb25zLmRyYWdnYWJsZWBcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9XG4gICAqL1xuICBjbG9zZXN0OiBmdW5jdGlvbiBjbG9zZXN0JDEoZWwsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QoZWwsIHNlbGVjdG9yIHx8IHRoaXMub3B0aW9ucy5kcmFnZ2FibGUsIHRoaXMuZWwsIGZhbHNlKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0L2dldCBvcHRpb25cbiAgICogQHBhcmFtICAge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0gICB7Kn0gICAgICBbdmFsdWVdXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgb3B0aW9uOiBmdW5jdGlvbiBvcHRpb24obmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1tuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1vZGlmaWVkVmFsdWUgPSBQbHVnaW5NYW5hZ2VyLm1vZGlmeU9wdGlvbih0aGlzLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgbW9kaWZpZWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9uc1tuYW1lXSA9IG1vZGlmaWVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIF9wcmVwYXJlR3JvdXAob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZXN0cm95XG4gICAqL1xuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHBsdWdpbkV2ZW50KCdkZXN0cm95JywgdGhpcyk7XG4gICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICBlbFtleHBhbmRvXSA9IG51bGw7XG4gICAgb2ZmKGVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG4gICAgb2ZmKGVsLCAndG91Y2hzdGFydCcsIHRoaXMuX29uVGFwU3RhcnQpO1xuICAgIG9mZihlbCwgJ3BvaW50ZXJkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG5cbiAgICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgIG9mZihlbCwgJ2RyYWdvdmVyJywgdGhpcyk7XG4gICAgICBvZmYoZWwsICdkcmFnZW50ZXInLCB0aGlzKTtcbiAgICB9IC8vIFJlbW92ZSBkcmFnZ2FibGUgYXR0cmlidXRlc1xuXG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkcmFnZ2FibGVdJyksIGZ1bmN0aW9uIChlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdkcmFnZ2FibGUnKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX29uRHJvcCgpO1xuXG4gICAgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCk7XG5cbiAgICBzb3J0YWJsZXMuc3BsaWNlKHNvcnRhYmxlcy5pbmRleE9mKHRoaXMuZWwpLCAxKTtcbiAgICB0aGlzLmVsID0gZWwgPSBudWxsO1xuICB9LFxuICBfaGlkZUNsb25lOiBmdW5jdGlvbiBfaGlkZUNsb25lKCkge1xuICAgIGlmICghY2xvbmVIaWRkZW4pIHtcbiAgICAgIHBsdWdpbkV2ZW50KCdoaWRlQ2xvbmUnLCB0aGlzKTtcbiAgICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSByZXR1cm47XG4gICAgICBjc3MoY2xvbmVFbCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlICYmIGNsb25lRWwucGFyZW50Tm9kZSkge1xuICAgICAgICBjbG9uZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvbmVFbCk7XG4gICAgICB9XG5cbiAgICAgIGNsb25lSGlkZGVuID0gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIF9zaG93Q2xvbmU6IGZ1bmN0aW9uIF9zaG93Q2xvbmUocHV0U29ydGFibGUpIHtcbiAgICBpZiAocHV0U29ydGFibGUubGFzdFB1dE1vZGUgIT09ICdjbG9uZScpIHtcbiAgICAgIHRoaXMuX2hpZGVDbG9uZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNsb25lSGlkZGVuKSB7XG4gICAgICBwbHVnaW5FdmVudCgnc2hvd0Nsb25lJywgdGhpcyk7XG4gICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkgcmV0dXJuOyAvLyBzaG93IGNsb25lIGF0IGRyYWdFbCBvciBvcmlnaW5hbCBwb3NpdGlvblxuXG4gICAgICBpZiAoZHJhZ0VsLnBhcmVudE5vZGUgPT0gcm9vdEVsICYmICF0aGlzLm9wdGlvbnMuZ3JvdXAucmV2ZXJ0Q2xvbmUpIHtcbiAgICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBkcmFnRWwpO1xuICAgICAgfSBlbHNlIGlmIChuZXh0RWwpIHtcbiAgICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBuZXh0RWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdEVsLmFwcGVuZENoaWxkKGNsb25lRWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmdyb3VwLnJldmVydENsb25lKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0ZShkcmFnRWwsIGNsb25lRWwpO1xuICAgICAgfVxuXG4gICAgICBjc3MoY2xvbmVFbCwgJ2Rpc3BsYXknLCAnJyk7XG4gICAgICBjbG9uZUhpZGRlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gX2dsb2JhbERyYWdPdmVyKFxuLyoqRXZlbnQqL1xuZXZ0KSB7XG4gIGlmIChldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgZXZ0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xuICB9XG5cbiAgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmZ1bmN0aW9uIF9vbk1vdmUoZnJvbUVsLCB0b0VsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXRFbCwgdGFyZ2V0UmVjdCwgb3JpZ2luYWxFdmVudCwgd2lsbEluc2VydEFmdGVyKSB7XG4gIHZhciBldnQsXG4gICAgICBzb3J0YWJsZSA9IGZyb21FbFtleHBhbmRvXSxcbiAgICAgIG9uTW92ZUZuID0gc29ydGFibGUub3B0aW9ucy5vbk1vdmUsXG4gICAgICByZXRWYWw7IC8vIFN1cHBvcnQgZm9yIG5ldyBDdXN0b21FdmVudCBmZWF0dXJlXG5cbiAgaWYgKHdpbmRvdy5DdXN0b21FdmVudCAmJiAhSUUxMU9yTGVzcyAmJiAhRWRnZSkge1xuICAgIGV2dCA9IG5ldyBDdXN0b21FdmVudCgnbW92ZScsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZ0LmluaXRFdmVudCgnbW92ZScsIHRydWUsIHRydWUpO1xuICB9XG5cbiAgZXZ0LnRvID0gdG9FbDtcbiAgZXZ0LmZyb20gPSBmcm9tRWw7XG4gIGV2dC5kcmFnZ2VkID0gZHJhZ0VsO1xuICBldnQuZHJhZ2dlZFJlY3QgPSBkcmFnUmVjdDtcbiAgZXZ0LnJlbGF0ZWQgPSB0YXJnZXRFbCB8fCB0b0VsO1xuICBldnQucmVsYXRlZFJlY3QgPSB0YXJnZXRSZWN0IHx8IGdldFJlY3QodG9FbCk7XG4gIGV2dC53aWxsSW5zZXJ0QWZ0ZXIgPSB3aWxsSW5zZXJ0QWZ0ZXI7XG4gIGV2dC5vcmlnaW5hbEV2ZW50ID0gb3JpZ2luYWxFdmVudDtcbiAgZnJvbUVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICBpZiAob25Nb3ZlRm4pIHtcbiAgICByZXRWYWwgPSBvbk1vdmVGbi5jYWxsKHNvcnRhYmxlLCBldnQsIG9yaWdpbmFsRXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHJldFZhbDtcbn1cblxuZnVuY3Rpb24gX2Rpc2FibGVEcmFnZ2FibGUoZWwpIHtcbiAgZWwuZHJhZ2dhYmxlID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF91bnNpbGVudCgpIHtcbiAgX3NpbGVudCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfZ2hvc3RJc0xhc3QoZXZ0LCB2ZXJ0aWNhbCwgc29ydGFibGUpIHtcbiAgdmFyIHJlY3QgPSBnZXRSZWN0KGxhc3RDaGlsZChzb3J0YWJsZS5lbCwgc29ydGFibGUub3B0aW9ucy5kcmFnZ2FibGUpKTtcbiAgdmFyIHNwYWNlciA9IDEwO1xuICByZXR1cm4gdmVydGljYWwgPyBldnQuY2xpZW50WCA+IHJlY3QucmlnaHQgKyBzcGFjZXIgfHwgZXZ0LmNsaWVudFggPD0gcmVjdC5yaWdodCAmJiBldnQuY2xpZW50WSA+IHJlY3QuYm90dG9tICYmIGV2dC5jbGllbnRYID49IHJlY3QubGVmdCA6IGV2dC5jbGllbnRYID4gcmVjdC5yaWdodCAmJiBldnQuY2xpZW50WSA+IHJlY3QudG9wIHx8IGV2dC5jbGllbnRYIDw9IHJlY3QucmlnaHQgJiYgZXZ0LmNsaWVudFkgPiByZWN0LmJvdHRvbSArIHNwYWNlcjtcbn1cblxuZnVuY3Rpb24gX2dldFN3YXBEaXJlY3Rpb24oZXZ0LCB0YXJnZXQsIHRhcmdldFJlY3QsIHZlcnRpY2FsLCBzd2FwVGhyZXNob2xkLCBpbnZlcnRlZFN3YXBUaHJlc2hvbGQsIGludmVydFN3YXAsIGlzTGFzdFRhcmdldCkge1xuICB2YXIgbW91c2VPbkF4aXMgPSB2ZXJ0aWNhbCA/IGV2dC5jbGllbnRZIDogZXZ0LmNsaWVudFgsXG4gICAgICB0YXJnZXRMZW5ndGggPSB2ZXJ0aWNhbCA/IHRhcmdldFJlY3QuaGVpZ2h0IDogdGFyZ2V0UmVjdC53aWR0aCxcbiAgICAgIHRhcmdldFMxID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LnRvcCA6IHRhcmdldFJlY3QubGVmdCxcbiAgICAgIHRhcmdldFMyID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LmJvdHRvbSA6IHRhcmdldFJlY3QucmlnaHQsXG4gICAgICBpbnZlcnQgPSBmYWxzZTtcblxuICBpZiAoIWludmVydFN3YXApIHtcbiAgICAvLyBOZXZlciBpbnZlcnQgb3IgY3JlYXRlIGRyYWdFbCBzaGFkb3cgd2hlbiB0YXJnZXQgbW92ZW1lbmV0IGNhdXNlcyBtb3VzZSB0byBtb3ZlIHBhc3QgdGhlIGVuZCBvZiByZWd1bGFyIHN3YXBUaHJlc2hvbGRcbiAgICBpZiAoaXNMYXN0VGFyZ2V0ICYmIHRhcmdldE1vdmVEaXN0YW5jZSA8IHRhcmdldExlbmd0aCAqIHN3YXBUaHJlc2hvbGQpIHtcbiAgICAgIC8vIG11bHRpcGxpZWQgb25seSBieSBzd2FwVGhyZXNob2xkIGJlY2F1c2UgbW91c2Ugd2lsbCBhbHJlYWR5IGJlIGluc2lkZSB0YXJnZXQgYnkgKDEgLSB0aHJlc2hvbGQpICogdGFyZ2V0TGVuZ3RoIC8gMlxuICAgICAgLy8gY2hlY2sgaWYgcGFzdCBmaXJzdCBpbnZlcnQgdGhyZXNob2xkIG9uIHNpZGUgb3Bwb3NpdGUgb2YgbGFzdERpcmVjdGlvblxuICAgICAgaWYgKCFwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggJiYgKGxhc3REaXJlY3Rpb24gPT09IDEgPyBtb3VzZU9uQXhpcyA+IHRhcmdldFMxICsgdGFyZ2V0TGVuZ3RoICogaW52ZXJ0ZWRTd2FwVGhyZXNob2xkIC8gMiA6IG1vdXNlT25BeGlzIDwgdGFyZ2V0UzIgLSB0YXJnZXRMZW5ndGggKiBpbnZlcnRlZFN3YXBUaHJlc2hvbGQgLyAyKSkge1xuICAgICAgICAvLyBwYXN0IGZpcnN0IGludmVydCB0aHJlc2hvbGQsIGRvIG5vdCByZXN0cmljdCBpbnZlcnRlZCB0aHJlc2hvbGQgdG8gZHJhZ0VsIHNoYWRvd1xuICAgICAgICBwYXN0Rmlyc3RJbnZlcnRUaHJlc2ggPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBhc3RGaXJzdEludmVydFRocmVzaCkge1xuICAgICAgICAvLyBkcmFnRWwgc2hhZG93ICh0YXJnZXQgbW92ZSBkaXN0YW5jZSBzaGFkb3cpXG4gICAgICAgIGlmIChsYXN0RGlyZWN0aW9uID09PSAxID8gbW91c2VPbkF4aXMgPCB0YXJnZXRTMSArIHRhcmdldE1vdmVEaXN0YW5jZSAvLyBvdmVyIGRyYWdFbCBzaGFkb3dcbiAgICAgICAgOiBtb3VzZU9uQXhpcyA+IHRhcmdldFMyIC0gdGFyZ2V0TW92ZURpc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIC1sYXN0RGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnZlcnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyXG4gICAgICBpZiAobW91c2VPbkF4aXMgPiB0YXJnZXRTMSArIHRhcmdldExlbmd0aCAqICgxIC0gc3dhcFRocmVzaG9sZCkgLyAyICYmIG1vdXNlT25BeGlzIDwgdGFyZ2V0UzIgLSB0YXJnZXRMZW5ndGggKiAoMSAtIHN3YXBUaHJlc2hvbGQpIC8gMikge1xuICAgICAgICByZXR1cm4gX2dldEluc2VydERpcmVjdGlvbih0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGludmVydCA9IGludmVydCB8fCBpbnZlcnRTd2FwO1xuXG4gIGlmIChpbnZlcnQpIHtcbiAgICAvLyBJbnZlcnQgb2YgcmVndWxhclxuICAgIGlmIChtb3VzZU9uQXhpcyA8IHRhcmdldFMxICsgdGFyZ2V0TGVuZ3RoICogaW52ZXJ0ZWRTd2FwVGhyZXNob2xkIC8gMiB8fCBtb3VzZU9uQXhpcyA+IHRhcmdldFMyIC0gdGFyZ2V0TGVuZ3RoICogaW52ZXJ0ZWRTd2FwVGhyZXNob2xkIC8gMikge1xuICAgICAgcmV0dXJuIG1vdXNlT25BeGlzID4gdGFyZ2V0UzEgKyB0YXJnZXRMZW5ndGggLyAyID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBkaXJlY3Rpb24gZHJhZ0VsIG11c3QgYmUgc3dhcHBlZCByZWxhdGl2ZSB0byB0YXJnZXQgaW4gb3JkZXIgdG8gbWFrZSBpdFxuICogc2VlbSB0aGF0IGRyYWdFbCBoYXMgYmVlbiBcImluc2VydGVkXCIgaW50byB0aGF0IGVsZW1lbnQncyBwb3NpdGlvblxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IHRhcmdldCAgICAgICBUaGUgdGFyZ2V0IHdob3NlIHBvc2l0aW9uIGRyYWdFbCBpcyBiZWluZyBpbnNlcnRlZCBhdFxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb24gZHJhZ0VsIG11c3QgYmUgc3dhcHBlZFxuICovXG5cblxuZnVuY3Rpb24gX2dldEluc2VydERpcmVjdGlvbih0YXJnZXQpIHtcbiAgaWYgKGluZGV4KGRyYWdFbCkgPCBpbmRleCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG4vKipcbiAqIEdlbmVyYXRlIGlkXG4gKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZW5lcmF0ZUlkKGVsKSB7XG4gIHZhciBzdHIgPSBlbC50YWdOYW1lICsgZWwuY2xhc3NOYW1lICsgZWwuc3JjICsgZWwuaHJlZiArIGVsLnRleHRDb250ZW50LFxuICAgICAgaSA9IHN0ci5sZW5ndGgsXG4gICAgICBzdW0gPSAwO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBzdW0gKz0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gIH1cblxuICByZXR1cm4gc3VtLnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gX3NhdmVJbnB1dENoZWNrZWRTdGF0ZShyb290KSB7XG4gIHNhdmVkSW5wdXRDaGVja2VkLmxlbmd0aCA9IDA7XG4gIHZhciBpbnB1dHMgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO1xuICB2YXIgaWR4ID0gaW5wdXRzLmxlbmd0aDtcblxuICB3aGlsZSAoaWR4LS0pIHtcbiAgICB2YXIgZWwgPSBpbnB1dHNbaWR4XTtcbiAgICBlbC5jaGVja2VkICYmIHNhdmVkSW5wdXRDaGVja2VkLnB1c2goZWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9uZXh0VGljayhmbikge1xuICByZXR1cm4gc2V0VGltZW91dChmbiwgMCk7XG59XG5cbmZ1bmN0aW9uIF9jYW5jZWxOZXh0VGljayhpZCkge1xuICByZXR1cm4gY2xlYXJUaW1lb3V0KGlkKTtcbn0gLy8gRml4ZWQgIzk3MzpcblxuXG5pZiAoZG9jdW1lbnRFeGlzdHMpIHtcbiAgb24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgaWYgKChTb3J0YWJsZS5hY3RpdmUgfHwgYXdhaXRpbmdEcmFnU3RhcnRlZCkgJiYgZXZ0LmNhbmNlbGFibGUpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG59IC8vIEV4cG9ydCB1dGlsc1xuXG5cblNvcnRhYmxlLnV0aWxzID0ge1xuICBvbjogb24sXG4gIG9mZjogb2ZmLFxuICBjc3M6IGNzcyxcbiAgZmluZDogZmluZCxcbiAgaXM6IGZ1bmN0aW9uIGlzKGVsLCBzZWxlY3Rvcikge1xuICAgIHJldHVybiAhIWNsb3Nlc3QoZWwsIHNlbGVjdG9yLCBlbCwgZmFsc2UpO1xuICB9LFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdGhyb3R0bGU6IHRocm90dGxlLFxuICBjbG9zZXN0OiBjbG9zZXN0LFxuICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsXG4gIGNsb25lOiBjbG9uZSxcbiAgaW5kZXg6IGluZGV4LFxuICBuZXh0VGljazogX25leHRUaWNrLFxuICBjYW5jZWxOZXh0VGljazogX2NhbmNlbE5leHRUaWNrLFxuICBkZXRlY3REaXJlY3Rpb246IF9kZXRlY3REaXJlY3Rpb24sXG4gIGdldENoaWxkOiBnZXRDaGlsZFxufTtcbi8qKlxuICogR2V0IHRoZSBTb3J0YWJsZSBpbnN0YW5jZSBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudFxuICogQHJldHVybiB7U29ydGFibGV8dW5kZWZpbmVkfSAgICAgICAgIFRoZSBpbnN0YW5jZSBvZiBTb3J0YWJsZVxuICovXG5cblNvcnRhYmxlLmdldCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50W2V4cGFuZG9dO1xufTtcbi8qKlxuICogTW91bnQgYSBwbHVnaW4gdG8gU29ydGFibGVcbiAqIEBwYXJhbSAgey4uLlNvcnRhYmxlUGx1Z2lufFNvcnRhYmxlUGx1Z2luW119IHBsdWdpbnMgICAgICAgUGx1Z2lucyBiZWluZyBtb3VudGVkXG4gKi9cblxuXG5Tb3J0YWJsZS5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHBsdWdpbnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcGx1Z2luc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChwbHVnaW5zWzBdLmNvbnN0cnVjdG9yID09PSBBcnJheSkgcGx1Z2lucyA9IHBsdWdpbnNbMF07XG4gIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgaWYgKCFwbHVnaW4ucHJvdG90eXBlIHx8ICFwbHVnaW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yKSB7XG4gICAgICB0aHJvdyBcIlNvcnRhYmxlOiBNb3VudGVkIHBsdWdpbiBtdXN0IGJlIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIG5vdCBcIi5jb25jYXQoe30udG9TdHJpbmcuY2FsbChwbHVnaW4pKTtcbiAgICB9XG5cbiAgICBpZiAocGx1Z2luLnV0aWxzKSBTb3J0YWJsZS51dGlscyA9IF9vYmplY3RTcHJlYWQoe30sIFNvcnRhYmxlLnV0aWxzLCBwbHVnaW4udXRpbHMpO1xuICAgIFBsdWdpbk1hbmFnZXIubW91bnQocGx1Z2luKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBDcmVhdGUgc29ydGFibGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9ICBlbFxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgW29wdGlvbnNdXG4gKi9cblxuXG5Tb3J0YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBTb3J0YWJsZShlbCwgb3B0aW9ucyk7XG59OyAvLyBFeHBvcnRcblxuXG5Tb3J0YWJsZS52ZXJzaW9uID0gdmVyc2lvbjtcblxudmFyIGF1dG9TY3JvbGxzID0gW10sXG4gICAgc2Nyb2xsRWwsXG4gICAgc2Nyb2xsUm9vdEVsLFxuICAgIHNjcm9sbGluZyA9IGZhbHNlLFxuICAgIGxhc3RBdXRvU2Nyb2xsWCxcbiAgICBsYXN0QXV0b1Njcm9sbFksXG4gICAgdG91Y2hFdnQkMSxcbiAgICBwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbDtcblxuZnVuY3Rpb24gQXV0b1Njcm9sbFBsdWdpbigpIHtcbiAgZnVuY3Rpb24gQXV0b1Njcm9sbCgpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgc2Nyb2xsOiB0cnVlLFxuICAgICAgc2Nyb2xsU2Vuc2l0aXZpdHk6IDMwLFxuICAgICAgc2Nyb2xsU3BlZWQ6IDEwLFxuICAgICAgYnViYmxlU2Nyb2xsOiB0cnVlXG4gICAgfTsgLy8gQmluZCBhbGwgcHJpdmF0ZSBtZXRob2RzXG5cbiAgICBmb3IgKHZhciBmbiBpbiB0aGlzKSB7XG4gICAgICBpZiAoZm4uY2hhckF0KDApID09PSAnXycgJiYgdHlwZW9mIHRoaXNbZm5dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbZm5dID0gdGhpc1tmbl0uYmluZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBBdXRvU2Nyb2xsLnByb3RvdHlwZSA9IHtcbiAgICBkcmFnU3RhcnRlZDogZnVuY3Rpb24gZHJhZ1N0YXJ0ZWQoX3JlZikge1xuICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBfcmVmLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIGlmICh0aGlzLnNvcnRhYmxlLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICBvbihkb2N1bWVudCwgJ2RyYWdvdmVyJywgdGhpcy5faGFuZGxlQXV0b1Njcm9sbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN1cHBvcnRQb2ludGVyKSB7XG4gICAgICAgICAgb24oZG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxFdmVudC50b3VjaGVzKSB7XG4gICAgICAgICAgb24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZHJhZ092ZXJDb21wbGV0ZWQ6IGZ1bmN0aW9uIGRyYWdPdmVyQ29tcGxldGVkKF9yZWYyKSB7XG4gICAgICB2YXIgb3JpZ2luYWxFdmVudCA9IF9yZWYyLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIC8vIEZvciB3aGVuIGJ1YmJsaW5nIGlzIGNhbmNlbGVkIGFuZCB1c2luZyBmYWxsYmFjayAoZmFsbGJhY2sgJ3RvdWNobW92ZScgYWx3YXlzIHJlYWNoZWQpXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5kcmFnT3ZlckJ1YmJsZSAmJiAhb3JpZ2luYWxFdmVudC5yb290RWwpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQXV0b1Njcm9sbChvcmlnaW5hbEV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRyb3A6IGZ1bmN0aW9uIGRyb3AoKSB7XG4gICAgICBpZiAodGhpcy5zb3J0YWJsZS5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCAnZHJhZ292ZXInLCB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgIH1cblxuICAgICAgY2xlYXJQb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCgpO1xuICAgICAgY2xlYXJBdXRvU2Nyb2xscygpO1xuICAgICAgY2FuY2VsVGhyb3R0bGUoKTtcbiAgICB9LFxuICAgIG51bGxpbmc6IGZ1bmN0aW9uIG51bGxpbmcoKSB7XG4gICAgICB0b3VjaEV2dCQxID0gc2Nyb2xsUm9vdEVsID0gc2Nyb2xsRWwgPSBzY3JvbGxpbmcgPSBwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCA9IGxhc3RBdXRvU2Nyb2xsWCA9IGxhc3RBdXRvU2Nyb2xsWSA9IG51bGw7XG4gICAgICBhdXRvU2Nyb2xscy5sZW5ndGggPSAwO1xuICAgIH0sXG4gICAgX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbDogZnVuY3Rpb24gX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbChldnQpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUF1dG9TY3JvbGwoZXZ0LCB0cnVlKTtcbiAgICB9LFxuICAgIF9oYW5kbGVBdXRvU2Nyb2xsOiBmdW5jdGlvbiBfaGFuZGxlQXV0b1Njcm9sbChldnQsIGZhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgeCA9IChldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0KS5jbGllbnRYLFxuICAgICAgICAgIHkgPSAoZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCkuY2xpZW50WSxcbiAgICAgICAgICBlbGVtID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICAgIHRvdWNoRXZ0JDEgPSBldnQ7IC8vIElFIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBuYXRpdmUgYXV0b3Njcm9sbCxcbiAgICAgIC8vIEVkZ2UncyBhdXRvc2Nyb2xsIHNlZW1zIHRvbyBjb25kaXRpb25hbCxcbiAgICAgIC8vIE1BQ09TIFNhZmFyaSBkb2VzIG5vdCBoYXZlIGF1dG9zY3JvbGwsXG4gICAgICAvLyBGaXJlZm94IGFuZCBDaHJvbWUgYXJlIGdvb2RcblxuICAgICAgaWYgKGZhbGxiYWNrIHx8IEVkZ2UgfHwgSUUxMU9yTGVzcyB8fCBTYWZhcmkpIHtcbiAgICAgICAgYXV0b1Njcm9sbChldnQsIHRoaXMub3B0aW9ucywgZWxlbSwgZmFsbGJhY2spOyAvLyBMaXN0ZW5lciBmb3IgcG9pbnRlciBlbGVtZW50IGNoYW5nZVxuXG4gICAgICAgIHZhciBvZ0VsZW1TY3JvbGxlciA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGVsZW0sIHRydWUpO1xuXG4gICAgICAgIGlmIChzY3JvbGxpbmcgJiYgKCFwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCB8fCB4ICE9PSBsYXN0QXV0b1Njcm9sbFggfHwgeSAhPT0gbGFzdEF1dG9TY3JvbGxZKSkge1xuICAgICAgICAgIHBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsICYmIGNsZWFyUG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwoKTsgLy8gRGV0ZWN0IGZvciBwb2ludGVyIGVsZW0gY2hhbmdlLCBlbXVsYXRpbmcgbmF0aXZlIERuRCBiZWhhdmlvdXJcblxuICAgICAgICAgIHBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0VsZW0gPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpLCB0cnVlKTtcblxuICAgICAgICAgICAgaWYgKG5ld0VsZW0gIT09IG9nRWxlbVNjcm9sbGVyKSB7XG4gICAgICAgICAgICAgIG9nRWxlbVNjcm9sbGVyID0gbmV3RWxlbTtcbiAgICAgICAgICAgICAgY2xlYXJBdXRvU2Nyb2xscygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhdXRvU2Nyb2xsKGV2dCwgX3RoaXMub3B0aW9ucywgbmV3RWxlbSwgZmFsbGJhY2spO1xuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgICBsYXN0QXV0b1Njcm9sbFggPSB4O1xuICAgICAgICAgIGxhc3RBdXRvU2Nyb2xsWSA9IHk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIERuRCBpcyBlbmFibGVkIChhbmQgYnJvd3NlciBoYXMgZ29vZCBhdXRvc2Nyb2xsaW5nKSwgZmlyc3QgYXV0b3Njcm9sbCB3aWxsIGFscmVhZHkgc2Nyb2xsLCBzbyBnZXQgcGFyZW50IGF1dG9zY3JvbGwgb2YgZmlyc3QgYXV0b3Njcm9sbFxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5idWJibGVTY3JvbGwgfHwgZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWxlbSwgdHJ1ZSkgPT09IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKSkge1xuICAgICAgICAgIGNsZWFyQXV0b1Njcm9sbHMoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvU2Nyb2xsKGV2dCwgdGhpcy5vcHRpb25zLCBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChlbGVtLCBmYWxzZSksIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyhBdXRvU2Nyb2xsLCB7XG4gICAgcGx1Z2luTmFtZTogJ3Njcm9sbCcsXG4gICAgaW5pdGlhbGl6ZUJ5RGVmYXVsdDogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJBdXRvU2Nyb2xscygpIHtcbiAgYXV0b1Njcm9sbHMuZm9yRWFjaChmdW5jdGlvbiAoYXV0b1Njcm9sbCkge1xuICAgIGNsZWFySW50ZXJ2YWwoYXV0b1Njcm9sbC5waWQpO1xuICB9KTtcbiAgYXV0b1Njcm9sbHMgPSBbXTtcbn1cblxuZnVuY3Rpb24gY2xlYXJQb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCgpIHtcbiAgY2xlYXJJbnRlcnZhbChwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCk7XG59XG5cbnZhciBhdXRvU2Nyb2xsID0gdGhyb3R0bGUoZnVuY3Rpb24gKGV2dCwgb3B0aW9ucywgcm9vdEVsLCBpc0ZhbGxiYWNrKSB7XG4gIC8vIEJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1NTIxXG4gIGlmICghb3B0aW9ucy5zY3JvbGwpIHJldHVybjtcbiAgdmFyIHggPSAoZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCkuY2xpZW50WCxcbiAgICAgIHkgPSAoZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCkuY2xpZW50WSxcbiAgICAgIHNlbnMgPSBvcHRpb25zLnNjcm9sbFNlbnNpdGl2aXR5LFxuICAgICAgc3BlZWQgPSBvcHRpb25zLnNjcm9sbFNwZWVkLFxuICAgICAgd2luU2Nyb2xsZXIgPSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG4gIHZhciBzY3JvbGxUaGlzSW5zdGFuY2UgPSBmYWxzZSxcbiAgICAgIHNjcm9sbEN1c3RvbUZuOyAvLyBOZXcgc2Nyb2xsIHJvb3QsIHNldCBzY3JvbGxFbFxuXG4gIGlmIChzY3JvbGxSb290RWwgIT09IHJvb3RFbCkge1xuICAgIHNjcm9sbFJvb3RFbCA9IHJvb3RFbDtcbiAgICBjbGVhckF1dG9TY3JvbGxzKCk7XG4gICAgc2Nyb2xsRWwgPSBvcHRpb25zLnNjcm9sbDtcbiAgICBzY3JvbGxDdXN0b21GbiA9IG9wdGlvbnMuc2Nyb2xsRm47XG5cbiAgICBpZiAoc2Nyb2xsRWwgPT09IHRydWUpIHtcbiAgICAgIHNjcm9sbEVsID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQocm9vdEVsLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGF5ZXJzT3V0ID0gMDtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBzY3JvbGxFbDtcblxuICBkbyB7XG4gICAgdmFyIGVsID0gY3VycmVudFBhcmVudCxcbiAgICAgICAgcmVjdCA9IGdldFJlY3QoZWwpLFxuICAgICAgICB0b3AgPSByZWN0LnRvcCxcbiAgICAgICAgYm90dG9tID0gcmVjdC5ib3R0b20sXG4gICAgICAgIGxlZnQgPSByZWN0LmxlZnQsXG4gICAgICAgIHJpZ2h0ID0gcmVjdC5yaWdodCxcbiAgICAgICAgd2lkdGggPSByZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQgPSByZWN0LmhlaWdodCxcbiAgICAgICAgY2FuU2Nyb2xsWCA9IHZvaWQgMCxcbiAgICAgICAgY2FuU2Nyb2xsWSA9IHZvaWQgMCxcbiAgICAgICAgc2Nyb2xsV2lkdGggPSBlbC5zY3JvbGxXaWR0aCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBlbENTUyA9IGNzcyhlbCksXG4gICAgICAgIHNjcm9sbFBvc1ggPSBlbC5zY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxQb3NZID0gZWwuc2Nyb2xsVG9wO1xuXG4gICAgaWYgKGVsID09PSB3aW5TY3JvbGxlcikge1xuICAgICAgY2FuU2Nyb2xsWCA9IHdpZHRoIDwgc2Nyb2xsV2lkdGggJiYgKGVsQ1NTLm92ZXJmbG93WCA9PT0gJ2F1dG8nIHx8IGVsQ1NTLm92ZXJmbG93WCA9PT0gJ3Njcm9sbCcgfHwgZWxDU1Mub3ZlcmZsb3dYID09PSAndmlzaWJsZScpO1xuICAgICAgY2FuU2Nyb2xsWSA9IGhlaWdodCA8IHNjcm9sbEhlaWdodCAmJiAoZWxDU1Mub3ZlcmZsb3dZID09PSAnYXV0bycgfHwgZWxDU1Mub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyB8fCBlbENTUy5vdmVyZmxvd1kgPT09ICd2aXNpYmxlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhblNjcm9sbFggPSB3aWR0aCA8IHNjcm9sbFdpZHRoICYmIChlbENTUy5vdmVyZmxvd1ggPT09ICdhdXRvJyB8fCBlbENTUy5vdmVyZmxvd1ggPT09ICdzY3JvbGwnKTtcbiAgICAgIGNhblNjcm9sbFkgPSBoZWlnaHQgPCBzY3JvbGxIZWlnaHQgJiYgKGVsQ1NTLm92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IGVsQ1NTLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpO1xuICAgIH1cblxuICAgIHZhciB2eCA9IGNhblNjcm9sbFggJiYgKE1hdGguYWJzKHJpZ2h0IC0geCkgPD0gc2VucyAmJiBzY3JvbGxQb3NYICsgd2lkdGggPCBzY3JvbGxXaWR0aCkgLSAoTWF0aC5hYnMobGVmdCAtIHgpIDw9IHNlbnMgJiYgISFzY3JvbGxQb3NYKTtcbiAgICB2YXIgdnkgPSBjYW5TY3JvbGxZICYmIChNYXRoLmFicyhib3R0b20gLSB5KSA8PSBzZW5zICYmIHNjcm9sbFBvc1kgKyBoZWlnaHQgPCBzY3JvbGxIZWlnaHQpIC0gKE1hdGguYWJzKHRvcCAtIHkpIDw9IHNlbnMgJiYgISFzY3JvbGxQb3NZKTtcblxuICAgIGlmICghYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGF5ZXJzT3V0OyBpKyspIHtcbiAgICAgICAgaWYgKCFhdXRvU2Nyb2xsc1tpXSkge1xuICAgICAgICAgIGF1dG9TY3JvbGxzW2ldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS52eCAhPSB2eCB8fCBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnZ5ICE9IHZ5IHx8IGF1dG9TY3JvbGxzW2xheWVyc091dF0uZWwgIT09IGVsKSB7XG4gICAgICBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLmVsID0gZWw7XG4gICAgICBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnZ4ID0gdng7XG4gICAgICBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnZ5ID0gdnk7XG4gICAgICBjbGVhckludGVydmFsKGF1dG9TY3JvbGxzW2xheWVyc091dF0ucGlkKTtcblxuICAgICAgaWYgKHZ4ICE9IDAgfHwgdnkgIT0gMCkge1xuICAgICAgICBzY3JvbGxUaGlzSW5zdGFuY2UgPSB0cnVlO1xuICAgICAgICAvKiBqc2hpbnQgbG9vcGZ1bmM6dHJ1ZSAqL1xuXG4gICAgICAgIGF1dG9TY3JvbGxzW2xheWVyc091dF0ucGlkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIGVtdWxhdGUgZHJhZyBvdmVyIGR1cmluZyBhdXRvc2Nyb2xsIChmYWxsYmFjayksIGVtdWxhdGluZyBuYXRpdmUgRG5EIGJlaGF2aW91clxuICAgICAgICAgIGlmIChpc0ZhbGxiYWNrICYmIHRoaXMubGF5ZXIgPT09IDApIHtcbiAgICAgICAgICAgIFNvcnRhYmxlLmFjdGl2ZS5fb25Ub3VjaE1vdmUodG91Y2hFdnQkMSk7IC8vIFRvIG1vdmUgZ2hvc3QgaWYgaXQgaXMgcG9zaXRpb25lZCBhYnNvbHV0ZWx5XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0WSA9IGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLnZ5ID8gYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0udnkgKiBzcGVlZCA6IDA7XG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldFggPSBhdXRvU2Nyb2xsc1t0aGlzLmxheWVyXS52eCA/IGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLnZ4ICogc3BlZWQgOiAwO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBzY3JvbGxDdXN0b21GbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHNjcm9sbEN1c3RvbUZuLmNhbGwoU29ydGFibGUuZHJhZ2dlZC5wYXJlbnROb2RlW2V4cGFuZG9dLCBzY3JvbGxPZmZzZXRYLCBzY3JvbGxPZmZzZXRZLCBldnQsIHRvdWNoRXZ0JDEsIGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLmVsKSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2Nyb2xsQnkoYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0uZWwsIHNjcm9sbE9mZnNldFgsIHNjcm9sbE9mZnNldFkpO1xuICAgICAgICB9LmJpbmQoe1xuICAgICAgICAgIGxheWVyOiBsYXllcnNPdXRcbiAgICAgICAgfSksIDI0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXllcnNPdXQrKztcbiAgfSB3aGlsZSAob3B0aW9ucy5idWJibGVTY3JvbGwgJiYgY3VycmVudFBhcmVudCAhPT0gd2luU2Nyb2xsZXIgJiYgKGN1cnJlbnRQYXJlbnQgPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChjdXJyZW50UGFyZW50LCBmYWxzZSkpKTtcblxuICBzY3JvbGxpbmcgPSBzY3JvbGxUaGlzSW5zdGFuY2U7IC8vIGluIGNhc2UgYW5vdGhlciBmdW5jdGlvbiBjYXRjaGVzIHNjcm9sbGluZyBhcyBmYWxzZSBpbiBiZXR3ZWVuIHdoZW4gaXQgaXMgbm90XG59LCAzMCk7XG5cbnZhciBkcm9wID0gZnVuY3Rpb24gZHJvcChfcmVmKSB7XG4gIHZhciBvcmlnaW5hbEV2ZW50ID0gX3JlZi5vcmlnaW5hbEV2ZW50LFxuICAgICAgcHV0U29ydGFibGUgPSBfcmVmLnB1dFNvcnRhYmxlLFxuICAgICAgZHJhZ0VsID0gX3JlZi5kcmFnRWwsXG4gICAgICBhY3RpdmVTb3J0YWJsZSA9IF9yZWYuYWN0aXZlU29ydGFibGUsXG4gICAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQgPSBfcmVmLmRpc3BhdGNoU29ydGFibGVFdmVudCxcbiAgICAgIGhpZGVHaG9zdEZvclRhcmdldCA9IF9yZWYuaGlkZUdob3N0Rm9yVGFyZ2V0LFxuICAgICAgdW5oaWRlR2hvc3RGb3JUYXJnZXQgPSBfcmVmLnVuaGlkZUdob3N0Rm9yVGFyZ2V0O1xuICBpZiAoIW9yaWdpbmFsRXZlbnQpIHJldHVybjtcbiAgdmFyIHRvU29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCBhY3RpdmVTb3J0YWJsZTtcbiAgaGlkZUdob3N0Rm9yVGFyZ2V0KCk7XG4gIHZhciB0b3VjaCA9IG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgb3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPyBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdIDogb3JpZ2luYWxFdmVudDtcbiAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7XG4gIHVuaGlkZUdob3N0Rm9yVGFyZ2V0KCk7XG5cbiAgaWYgKHRvU29ydGFibGUgJiYgIXRvU29ydGFibGUuZWwuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCgnc3BpbGwnKTtcbiAgICB0aGlzLm9uU3BpbGwoe1xuICAgICAgZHJhZ0VsOiBkcmFnRWwsXG4gICAgICBwdXRTb3J0YWJsZTogcHV0U29ydGFibGVcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gUmV2ZXJ0KCkge31cblxuUmV2ZXJ0LnByb3RvdHlwZSA9IHtcbiAgc3RhcnRJbmRleDogbnVsbCxcbiAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiBkcmFnU3RhcnQoX3JlZjIpIHtcbiAgICB2YXIgb2xkRHJhZ2dhYmxlSW5kZXggPSBfcmVmMi5vbGREcmFnZ2FibGVJbmRleDtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBvbGREcmFnZ2FibGVJbmRleDtcbiAgfSxcbiAgb25TcGlsbDogZnVuY3Rpb24gb25TcGlsbChfcmVmMykge1xuICAgIHZhciBkcmFnRWwgPSBfcmVmMy5kcmFnRWwsXG4gICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjMucHV0U29ydGFibGU7XG4gICAgdGhpcy5zb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcblxuICAgIGlmIChwdXRTb3J0YWJsZSkge1xuICAgICAgcHV0U29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgfVxuXG4gICAgdmFyIG5leHRTaWJsaW5nID0gZ2V0Q2hpbGQodGhpcy5zb3J0YWJsZS5lbCwgdGhpcy5zdGFydEluZGV4LCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICB0aGlzLnNvcnRhYmxlLmVsLmluc2VydEJlZm9yZShkcmFnRWwsIG5leHRTaWJsaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0YWJsZS5lbC5hcHBlbmRDaGlsZChkcmFnRWwpO1xuICAgIH1cblxuICAgIHRoaXMuc29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuXG4gICAgaWYgKHB1dFNvcnRhYmxlKSB7XG4gICAgICBwdXRTb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gICAgfVxuICB9LFxuICBkcm9wOiBkcm9wXG59O1xuXG5fZXh0ZW5kcyhSZXZlcnQsIHtcbiAgcGx1Z2luTmFtZTogJ3JldmVydE9uU3BpbGwnXG59KTtcblxuZnVuY3Rpb24gUmVtb3ZlKCkge31cblxuUmVtb3ZlLnByb3RvdHlwZSA9IHtcbiAgb25TcGlsbDogZnVuY3Rpb24gb25TcGlsbChfcmVmNCkge1xuICAgIHZhciBkcmFnRWwgPSBfcmVmNC5kcmFnRWwsXG4gICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjQucHV0U29ydGFibGU7XG4gICAgdmFyIHBhcmVudFNvcnRhYmxlID0gcHV0U29ydGFibGUgfHwgdGhpcy5zb3J0YWJsZTtcbiAgICBwYXJlbnRTb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICBkcmFnRWwucGFyZW50Tm9kZSAmJiBkcmFnRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkcmFnRWwpO1xuICAgIHBhcmVudFNvcnRhYmxlLmFuaW1hdGVBbGwoKTtcbiAgfSxcbiAgZHJvcDogZHJvcFxufTtcblxuX2V4dGVuZHMoUmVtb3ZlLCB7XG4gIHBsdWdpbk5hbWU6ICdyZW1vdmVPblNwaWxsJ1xufSk7XG5cbnZhciBsYXN0U3dhcEVsO1xuXG5mdW5jdGlvbiBTd2FwUGx1Z2luKCkge1xuICBmdW5jdGlvbiBTd2FwKCkge1xuICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICBzd2FwQ2xhc3M6ICdzb3J0YWJsZS1zd2FwLWhpZ2hsaWdodCdcbiAgICB9O1xuICB9XG5cbiAgU3dhcC5wcm90b3R5cGUgPSB7XG4gICAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiBkcmFnU3RhcnQoX3JlZikge1xuICAgICAgdmFyIGRyYWdFbCA9IF9yZWYuZHJhZ0VsO1xuICAgICAgbGFzdFN3YXBFbCA9IGRyYWdFbDtcbiAgICB9LFxuICAgIGRyYWdPdmVyVmFsaWQ6IGZ1bmN0aW9uIGRyYWdPdmVyVmFsaWQoX3JlZjIpIHtcbiAgICAgIHZhciBjb21wbGV0ZWQgPSBfcmVmMi5jb21wbGV0ZWQsXG4gICAgICAgICAgdGFyZ2V0ID0gX3JlZjIudGFyZ2V0LFxuICAgICAgICAgIG9uTW92ZSA9IF9yZWYyLm9uTW92ZSxcbiAgICAgICAgICBhY3RpdmVTb3J0YWJsZSA9IF9yZWYyLmFjdGl2ZVNvcnRhYmxlLFxuICAgICAgICAgIGNoYW5nZWQgPSBfcmVmMi5jaGFuZ2VkLFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWYyLmNhbmNlbDtcbiAgICAgIGlmICghYWN0aXZlU29ydGFibGUub3B0aW9ucy5zd2FwKSByZXR1cm47XG4gICAgICB2YXIgZWwgPSB0aGlzLnNvcnRhYmxlLmVsLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBlbCkge1xuICAgICAgICB2YXIgcHJldlN3YXBFbCA9IGxhc3RTd2FwRWw7XG5cbiAgICAgICAgaWYgKG9uTW92ZSh0YXJnZXQpICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRvZ2dsZUNsYXNzKHRhcmdldCwgb3B0aW9ucy5zd2FwQ2xhc3MsIHRydWUpO1xuICAgICAgICAgIGxhc3RTd2FwRWwgPSB0YXJnZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdFN3YXBFbCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldlN3YXBFbCAmJiBwcmV2U3dhcEVsICE9PSBsYXN0U3dhcEVsKSB7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3MocHJldlN3YXBFbCwgb3B0aW9ucy5zd2FwQ2xhc3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGFuZ2VkKCk7XG4gICAgICBjb21wbGV0ZWQodHJ1ZSk7XG4gICAgICBjYW5jZWwoKTtcbiAgICB9LFxuICAgIGRyb3A6IGZ1bmN0aW9uIGRyb3AoX3JlZjMpIHtcbiAgICAgIHZhciBhY3RpdmVTb3J0YWJsZSA9IF9yZWYzLmFjdGl2ZVNvcnRhYmxlLFxuICAgICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjMucHV0U29ydGFibGUsXG4gICAgICAgICAgZHJhZ0VsID0gX3JlZjMuZHJhZ0VsO1xuICAgICAgdmFyIHRvU29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCB0aGlzLnNvcnRhYmxlO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBsYXN0U3dhcEVsICYmIHRvZ2dsZUNsYXNzKGxhc3RTd2FwRWwsIG9wdGlvbnMuc3dhcENsYXNzLCBmYWxzZSk7XG5cbiAgICAgIGlmIChsYXN0U3dhcEVsICYmIChvcHRpb25zLnN3YXAgfHwgcHV0U29ydGFibGUgJiYgcHV0U29ydGFibGUub3B0aW9ucy5zd2FwKSkge1xuICAgICAgICBpZiAoZHJhZ0VsICE9PSBsYXN0U3dhcEVsKSB7XG4gICAgICAgICAgdG9Tb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBpZiAodG9Tb3J0YWJsZSAhPT0gYWN0aXZlU29ydGFibGUpIGFjdGl2ZVNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIHN3YXBOb2RlcyhkcmFnRWwsIGxhc3RTd2FwRWwpO1xuICAgICAgICAgIHRvU29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgICAgICAgIGlmICh0b1NvcnRhYmxlICE9PSBhY3RpdmVTb3J0YWJsZSkgYWN0aXZlU29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBudWxsaW5nOiBmdW5jdGlvbiBudWxsaW5nKCkge1xuICAgICAgbGFzdFN3YXBFbCA9IG51bGw7XG4gICAgfVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoU3dhcCwge1xuICAgIHBsdWdpbk5hbWU6ICdzd2FwJyxcbiAgICBldmVudFByb3BlcnRpZXM6IGZ1bmN0aW9uIGV2ZW50UHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN3YXBJdGVtOiBsYXN0U3dhcEVsXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3YXBOb2RlcyhuMSwgbjIpIHtcbiAgdmFyIHAxID0gbjEucGFyZW50Tm9kZSxcbiAgICAgIHAyID0gbjIucGFyZW50Tm9kZSxcbiAgICAgIGkxLFxuICAgICAgaTI7XG4gIGlmICghcDEgfHwgIXAyIHx8IHAxLmlzRXF1YWxOb2RlKG4yKSB8fCBwMi5pc0VxdWFsTm9kZShuMSkpIHJldHVybjtcbiAgaTEgPSBpbmRleChuMSk7XG4gIGkyID0gaW5kZXgobjIpO1xuXG4gIGlmIChwMS5pc0VxdWFsTm9kZShwMikgJiYgaTEgPCBpMikge1xuICAgIGkyKys7XG4gIH1cblxuICBwMS5pbnNlcnRCZWZvcmUobjIsIHAxLmNoaWxkcmVuW2kxXSk7XG4gIHAyLmluc2VydEJlZm9yZShuMSwgcDIuY2hpbGRyZW5baTJdKTtcbn1cblxudmFyIG11bHRpRHJhZ0VsZW1lbnRzID0gW10sXG4gICAgbXVsdGlEcmFnQ2xvbmVzID0gW10sXG4gICAgbGFzdE11bHRpRHJhZ1NlbGVjdCxcbiAgICAvLyBmb3Igc2VsZWN0aW9uIHdpdGggbW9kaWZpZXIga2V5IGRvd24gKFNISUZUKVxubXVsdGlEcmFnU29ydGFibGUsXG4gICAgaW5pdGlhbEZvbGRpbmcgPSBmYWxzZSxcbiAgICAvLyBJbml0aWFsIG11bHRpLWRyYWcgZm9sZCB3aGVuIGRyYWcgc3RhcnRlZFxuZm9sZGluZyA9IGZhbHNlLFxuICAgIC8vIEZvbGRpbmcgYW55IG90aGVyIHRpbWVcbmRyYWdTdGFydGVkID0gZmFsc2UsXG4gICAgZHJhZ0VsJDEsXG4gICAgY2xvbmVzRnJvbVJlY3QsXG4gICAgY2xvbmVzSGlkZGVuO1xuXG5mdW5jdGlvbiBNdWx0aURyYWdQbHVnaW4oKSB7XG4gIGZ1bmN0aW9uIE11bHRpRHJhZyhzb3J0YWJsZSkge1xuICAgIC8vIEJpbmQgYWxsIHByaXZhdGUgbWV0aG9kc1xuICAgIGZvciAodmFyIGZuIGluIHRoaXMpIHtcbiAgICAgIGlmIChmbi5jaGFyQXQoMCkgPT09ICdfJyAmJiB0eXBlb2YgdGhpc1tmbl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpc1tmbl0gPSB0aGlzW2ZuXS5iaW5kKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb3J0YWJsZS5vcHRpb25zLnN1cHBvcnRQb2ludGVyKSB7XG4gICAgICBvbihkb2N1bWVudCwgJ3BvaW50ZXJ1cCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb24oZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgICAgb24oZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICB9XG5cbiAgICBvbihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9jaGVja0tleURvd24pO1xuICAgIG9uKGRvY3VtZW50LCAna2V5dXAnLCB0aGlzLl9jaGVja0tleVVwKTtcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgc2VsZWN0ZWRDbGFzczogJ3NvcnRhYmxlLXNlbGVjdGVkJyxcbiAgICAgIG11bHRpRHJhZ0tleTogbnVsbCxcbiAgICAgIHNldERhdGE6IGZ1bmN0aW9uIHNldERhdGEoZGF0YVRyYW5zZmVyLCBkcmFnRWwpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAnJztcblxuICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoICYmIG11bHRpRHJhZ1NvcnRhYmxlID09PSBzb3J0YWJsZSkge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQsIGkpIHtcbiAgICAgICAgICAgIGRhdGEgKz0gKCFpID8gJycgOiAnLCAnKSArIG11bHRpRHJhZ0VsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IGRyYWdFbC50ZXh0Q29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFUcmFuc2Zlci5zZXREYXRhKCdUZXh0JywgZGF0YSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIE11bHRpRHJhZy5wcm90b3R5cGUgPSB7XG4gICAgbXVsdGlEcmFnS2V5RG93bjogZmFsc2UsXG4gICAgaXNNdWx0aURyYWc6IGZhbHNlLFxuICAgIGRlbGF5U3RhcnRHbG9iYWw6IGZ1bmN0aW9uIGRlbGF5U3RhcnRHbG9iYWwoX3JlZikge1xuICAgICAgdmFyIGRyYWdnZWQgPSBfcmVmLmRyYWdFbDtcbiAgICAgIGRyYWdFbCQxID0gZHJhZ2dlZDtcbiAgICB9LFxuICAgIGRlbGF5RW5kZWQ6IGZ1bmN0aW9uIGRlbGF5RW5kZWQoKSB7XG4gICAgICB0aGlzLmlzTXVsdGlEcmFnID0gfm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZHJhZ0VsJDEpO1xuICAgIH0sXG4gICAgc2V0dXBDbG9uZTogZnVuY3Rpb24gc2V0dXBDbG9uZShfcmVmMikge1xuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjIuc29ydGFibGUsXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjIuY2FuY2VsO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnKSByZXR1cm47XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzLnB1c2goY2xvbmUobXVsdGlEcmFnRWxlbWVudHNbaV0pKTtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzW2ldLnNvcnRhYmxlSW5kZXggPSBtdWx0aURyYWdFbGVtZW50c1tpXS5zb3J0YWJsZUluZGV4O1xuICAgICAgICBtdWx0aURyYWdDbG9uZXNbaV0uZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIG11bHRpRHJhZ0Nsb25lc1tpXS5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICcnO1xuICAgICAgICB0b2dnbGVDbGFzcyhtdWx0aURyYWdDbG9uZXNbaV0sIHRoaXMub3B0aW9ucy5zZWxlY3RlZENsYXNzLCBmYWxzZSk7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzW2ldID09PSBkcmFnRWwkMSAmJiB0b2dnbGVDbGFzcyhtdWx0aURyYWdDbG9uZXNbaV0sIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBzb3J0YWJsZS5faGlkZUNsb25lKCk7XG5cbiAgICAgIGNhbmNlbCgpO1xuICAgIH0sXG4gICAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKF9yZWYzKSB7XG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmMy5zb3J0YWJsZSxcbiAgICAgICAgICByb290RWwgPSBfcmVmMy5yb290RWwsXG4gICAgICAgICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50ID0gX3JlZjMuZGlzcGF0Y2hTb3J0YWJsZUV2ZW50LFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWYzLmNhbmNlbDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZykgcmV0dXJuO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZW1vdmVDbG9uZU9uSGlkZSkge1xuICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoICYmIG11bHRpRHJhZ1NvcnRhYmxlID09PSBzb3J0YWJsZSkge1xuICAgICAgICAgIGluc2VydE11bHRpRHJhZ0Nsb25lcyh0cnVlLCByb290RWwpO1xuICAgICAgICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCgnY2xvbmUnKTtcbiAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2hvd0Nsb25lOiBmdW5jdGlvbiBzaG93Q2xvbmUoX3JlZjQpIHtcbiAgICAgIHZhciBjbG9uZU5vd1Nob3duID0gX3JlZjQuY2xvbmVOb3dTaG93bixcbiAgICAgICAgICByb290RWwgPSBfcmVmNC5yb290RWwsXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjQuY2FuY2VsO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnKSByZXR1cm47XG4gICAgICBpbnNlcnRNdWx0aURyYWdDbG9uZXMoZmFsc2UsIHJvb3RFbCk7XG4gICAgICBtdWx0aURyYWdDbG9uZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgY3NzKGNsb25lLCAnZGlzcGxheScsICcnKTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmVOb3dTaG93bigpO1xuICAgICAgY2xvbmVzSGlkZGVuID0gZmFsc2U7XG4gICAgICBjYW5jZWwoKTtcbiAgICB9LFxuICAgIGhpZGVDbG9uZTogZnVuY3Rpb24gaGlkZUNsb25lKF9yZWY1KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmNS5zb3J0YWJsZSxcbiAgICAgICAgICBjbG9uZU5vd0hpZGRlbiA9IF9yZWY1LmNsb25lTm93SGlkZGVuLFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWY1LmNhbmNlbDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZykgcmV0dXJuO1xuICAgICAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgIGNzcyhjbG9uZSwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlICYmIGNsb25lLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICBjbG9uZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjbG9uZU5vd0hpZGRlbigpO1xuICAgICAgY2xvbmVzSGlkZGVuID0gdHJ1ZTtcbiAgICAgIGNhbmNlbCgpO1xuICAgIH0sXG4gICAgZHJhZ1N0YXJ0R2xvYmFsOiBmdW5jdGlvbiBkcmFnU3RhcnRHbG9iYWwoX3JlZjYpIHtcbiAgICAgIHZhciBzb3J0YWJsZSA9IF9yZWY2LnNvcnRhYmxlO1xuXG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcgJiYgbXVsdGlEcmFnU29ydGFibGUpIHtcbiAgICAgICAgbXVsdGlEcmFnU29ydGFibGUubXVsdGlEcmFnLl9kZXNlbGVjdE11bHRpRHJhZygpO1xuICAgICAgfVxuXG4gICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnQuc29ydGFibGVJbmRleCA9IGluZGV4KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgfSk7IC8vIFNvcnQgbXVsdGktZHJhZyBlbGVtZW50c1xuXG4gICAgICBtdWx0aURyYWdFbGVtZW50cyA9IG11bHRpRHJhZ0VsZW1lbnRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEuc29ydGFibGVJbmRleCAtIGIuc29ydGFibGVJbmRleDtcbiAgICAgIH0pO1xuICAgICAgZHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgZHJhZ1N0YXJ0ZWQ6IGZ1bmN0aW9uIGRyYWdTdGFydGVkKF9yZWY3KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjcuc29ydGFibGU7XG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcpIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIC8vIENhcHR1cmUgcmVjdHMsXG4gICAgICAgIC8vIGhpZGUgbXVsdGkgZHJhZyBlbGVtZW50cyAoYnkgcG9zaXRpb25pbmcgdGhlbSBhYnNvbHV0ZSksXG4gICAgICAgIC8vIHNldCBtdWx0aSBkcmFnIGVsZW1lbnRzIHJlY3RzIHRvIGRyYWdSZWN0LFxuICAgICAgICAvLyBzaG93IG11bHRpIGRyYWcgZWxlbWVudHMsXG4gICAgICAgIC8vIGFuaW1hdGUgdG8gcmVjdHMsXG4gICAgICAgIC8vIHVuc2V0IHJlY3RzICYgcmVtb3ZlIGZyb20gRE9NXG4gICAgICAgIHNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgPT09IGRyYWdFbCQxKSByZXR1cm47XG4gICAgICAgICAgICBjc3MobXVsdGlEcmFnRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGRyYWdSZWN0ID0gZ2V0UmVjdChkcmFnRWwkMSwgZmFsc2UsIHRydWUsIHRydWUpO1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50ID09PSBkcmFnRWwkMSkgcmV0dXJuO1xuICAgICAgICAgICAgc2V0UmVjdChtdWx0aURyYWdFbGVtZW50LCBkcmFnUmVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9sZGluZyA9IHRydWU7XG4gICAgICAgICAgaW5pdGlhbEZvbGRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNvcnRhYmxlLmFuaW1hdGVBbGwoZnVuY3Rpb24gKCkge1xuICAgICAgICBmb2xkaW5nID0gZmFsc2U7XG4gICAgICAgIGluaXRpYWxGb2xkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKF90aGlzMi5vcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHVuc2V0UmVjdChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAvLyBSZW1vdmUgYWxsIGF1eGlsaWFyeSBtdWx0aWRyYWcgaXRlbXMgZnJvbSBlbCwgaWYgc29ydGluZyBlbmFibGVkXG5cblxuICAgICAgICBpZiAoX3RoaXMyLm9wdGlvbnMuc29ydCkge1xuICAgICAgICAgIHJlbW92ZU11bHRpRHJhZ0VsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZHJhZ092ZXI6IGZ1bmN0aW9uIGRyYWdPdmVyKF9yZWY4KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gX3JlZjgudGFyZ2V0LFxuICAgICAgICAgIGNvbXBsZXRlZCA9IF9yZWY4LmNvbXBsZXRlZCxcbiAgICAgICAgICBjYW5jZWwgPSBfcmVmOC5jYW5jZWw7XG5cbiAgICAgIGlmIChmb2xkaW5nICYmIH5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKHRhcmdldCkpIHtcbiAgICAgICAgY29tcGxldGVkKGZhbHNlKTtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXZlcnQ6IGZ1bmN0aW9uIHJldmVydChfcmVmOSkge1xuICAgICAgdmFyIGZyb21Tb3J0YWJsZSA9IF9yZWY5LmZyb21Tb3J0YWJsZSxcbiAgICAgICAgICByb290RWwgPSBfcmVmOS5yb290RWwsXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmOS5zb3J0YWJsZSxcbiAgICAgICAgICBkcmFnUmVjdCA9IF9yZWY5LmRyYWdSZWN0O1xuXG4gICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBTZXR1cCB1bmZvbGQgYW5pbWF0aW9uXG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICBzb3J0YWJsZS5hZGRBbmltYXRpb25TdGF0ZSh7XG4gICAgICAgICAgICB0YXJnZXQ6IG11bHRpRHJhZ0VsZW1lbnQsXG4gICAgICAgICAgICByZWN0OiBmb2xkaW5nID8gZ2V0UmVjdChtdWx0aURyYWdFbGVtZW50KSA6IGRyYWdSZWN0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdW5zZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnQuZnJvbVJlY3QgPSBkcmFnUmVjdDtcbiAgICAgICAgICBmcm9tU29ydGFibGUucmVtb3ZlQW5pbWF0aW9uU3RhdGUobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb2xkaW5nID0gZmFsc2U7XG4gICAgICAgIGluc2VydE11bHRpRHJhZ0VsZW1lbnRzKCF0aGlzLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUsIHJvb3RFbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkcmFnT3ZlckNvbXBsZXRlZDogZnVuY3Rpb24gZHJhZ092ZXJDb21wbGV0ZWQoX3JlZjEwKSB7XG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmMTAuc29ydGFibGUsXG4gICAgICAgICAgaXNPd25lciA9IF9yZWYxMC5pc093bmVyLFxuICAgICAgICAgIGluc2VydGlvbiA9IF9yZWYxMC5pbnNlcnRpb24sXG4gICAgICAgICAgYWN0aXZlU29ydGFibGUgPSBfcmVmMTAuYWN0aXZlU29ydGFibGUsXG4gICAgICAgICAgcGFyZW50RWwgPSBfcmVmMTAucGFyZW50RWwsXG4gICAgICAgICAgcHV0U29ydGFibGUgPSBfcmVmMTAucHV0U29ydGFibGU7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgaWYgKGluc2VydGlvbikge1xuICAgICAgICAvLyBDbG9uZXMgbXVzdCBiZSBoaWRkZW4gYmVmb3JlIGZvbGRpbmcgYW5pbWF0aW9uIHRvIGNhcHR1cmUgZHJhZ1JlY3RBYnNvbHV0ZSBwcm9wZXJseVxuICAgICAgICBpZiAoaXNPd25lcikge1xuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9oaWRlQ2xvbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluaXRpYWxGb2xkaW5nID0gZmFsc2U7IC8vIElmIGxlYXZpbmcgc29ydDpmYWxzZSByb290LCBvciBhbHJlYWR5IGZvbGRpbmcgLSBGb2xkIHRvIG5ldyBsb2NhdGlvblxuXG4gICAgICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbiAmJiBtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggPiAxICYmIChmb2xkaW5nIHx8ICFpc093bmVyICYmICFhY3RpdmVTb3J0YWJsZS5vcHRpb25zLnNvcnQgJiYgIXB1dFNvcnRhYmxlKSkge1xuICAgICAgICAgIC8vIEZvbGQ6IFNldCBhbGwgbXVsdGkgZHJhZyBlbGVtZW50cydzIHJlY3RzIHRvIGRyYWdFbCdzIHJlY3Qgd2hlbiBtdWx0aS1kcmFnIGVsZW1lbnRzIGFyZSBpbnZpc2libGVcbiAgICAgICAgICB2YXIgZHJhZ1JlY3RBYnNvbHV0ZSA9IGdldFJlY3QoZHJhZ0VsJDEsIGZhbHNlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudCA9PT0gZHJhZ0VsJDEpIHJldHVybjtcbiAgICAgICAgICAgIHNldFJlY3QobXVsdGlEcmFnRWxlbWVudCwgZHJhZ1JlY3RBYnNvbHV0ZSk7IC8vIE1vdmUgZWxlbWVudChzKSB0byBlbmQgb2YgcGFyZW50RWwgc28gdGhhdCBpdCBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCBtdWx0aS1kcmFnIGNsb25lcyBpbnNlcnRpb24gaWYgdGhleSBhcmUgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIHdoaWxlIGZvbGRpbmcsIGFuZCBzbyB0aGF0IHdlIGNhbiBjYXB0dXJlIHRoZW0gYWdhaW4gYmVjYXVzZSBvbGQgc29ydGFibGUgd2lsbCBubyBsb25nZXIgYmUgZnJvbVNvcnRhYmxlXG5cbiAgICAgICAgICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvbGRpbmcgPSB0cnVlO1xuICAgICAgICB9IC8vIENsb25lcyBtdXN0IGJlIHNob3duIChhbmQgY2hlY2sgdG8gcmVtb3ZlIG11bHRpIGRyYWdzKSBhZnRlciBmb2xkaW5nIHdoZW4gaW50ZXJmZXJpbmcgbXVsdGlEcmFnRWxlbWVudHMgYXJlIG1vdmVkIG91dFxuXG5cbiAgICAgICAgaWYgKCFpc093bmVyKSB7XG4gICAgICAgICAgLy8gT25seSByZW1vdmUgaWYgbm90IGZvbGRpbmcgKGZvbGRpbmcgd2lsbCByZW1vdmUgdGhlbSBhbnl3YXlzKVxuICAgICAgICAgIGlmICghZm9sZGluZykge1xuICAgICAgICAgICAgcmVtb3ZlTXVsdGlEcmFnRWxlbWVudHMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFyIGNsb25lc0hpZGRlbkJlZm9yZSA9IGNsb25lc0hpZGRlbjtcblxuICAgICAgICAgICAgYWN0aXZlU29ydGFibGUuX3Nob3dDbG9uZShzb3J0YWJsZSk7IC8vIFVuZm9sZCBhbmltYXRpb24gZm9yIGNsb25lcyBpZiBzaG93aW5nIGZyb20gaGlkZGVuXG5cblxuICAgICAgICAgICAgaWYgKGFjdGl2ZVNvcnRhYmxlLm9wdGlvbnMuYW5pbWF0aW9uICYmICFjbG9uZXNIaWRkZW4gJiYgY2xvbmVzSGlkZGVuQmVmb3JlKSB7XG4gICAgICAgICAgICAgIG11bHRpRHJhZ0Nsb25lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLmFkZEFuaW1hdGlvblN0YXRlKHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldDogY2xvbmUsXG4gICAgICAgICAgICAgICAgICByZWN0OiBjbG9uZXNGcm9tUmVjdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNsb25lLmZyb21SZWN0ID0gY2xvbmVzRnJvbVJlY3Q7XG4gICAgICAgICAgICAgICAgY2xvbmUudGhpc0FuaW1hdGlvbkR1cmF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9zaG93Q2xvbmUoc29ydGFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZHJhZ092ZXJBbmltYXRpb25DYXB0dXJlOiBmdW5jdGlvbiBkcmFnT3ZlckFuaW1hdGlvbkNhcHR1cmUoX3JlZjExKSB7XG4gICAgICB2YXIgZHJhZ1JlY3QgPSBfcmVmMTEuZHJhZ1JlY3QsXG4gICAgICAgICAgaXNPd25lciA9IF9yZWYxMS5pc093bmVyLFxuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlID0gX3JlZjExLmFjdGl2ZVNvcnRhYmxlO1xuICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50LnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGFjdGl2ZVNvcnRhYmxlLm9wdGlvbnMuYW5pbWF0aW9uICYmICFpc093bmVyICYmIGFjdGl2ZVNvcnRhYmxlLm11bHRpRHJhZy5pc011bHRpRHJhZykge1xuICAgICAgICBjbG9uZXNGcm9tUmVjdCA9IF9leHRlbmRzKHt9LCBkcmFnUmVjdCk7XG4gICAgICAgIHZhciBkcmFnTWF0cml4ID0gbWF0cml4KGRyYWdFbCQxLCB0cnVlKTtcbiAgICAgICAgY2xvbmVzRnJvbVJlY3QudG9wIC09IGRyYWdNYXRyaXguZjtcbiAgICAgICAgY2xvbmVzRnJvbVJlY3QubGVmdCAtPSBkcmFnTWF0cml4LmU7XG4gICAgICB9XG4gICAgfSxcbiAgICBkcmFnT3ZlckFuaW1hdGlvbkNvbXBsZXRlOiBmdW5jdGlvbiBkcmFnT3ZlckFuaW1hdGlvbkNvbXBsZXRlKCkge1xuICAgICAgaWYgKGZvbGRpbmcpIHtcbiAgICAgICAgZm9sZGluZyA9IGZhbHNlO1xuICAgICAgICByZW1vdmVNdWx0aURyYWdFbGVtZW50cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZHJvcDogZnVuY3Rpb24gZHJvcChfcmVmMTIpIHtcbiAgICAgIHZhciBldnQgPSBfcmVmMTIub3JpZ2luYWxFdmVudCxcbiAgICAgICAgICByb290RWwgPSBfcmVmMTIucm9vdEVsLFxuICAgICAgICAgIHBhcmVudEVsID0gX3JlZjEyLnBhcmVudEVsLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjEyLnNvcnRhYmxlLFxuICAgICAgICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCA9IF9yZWYxMi5kaXNwYXRjaFNvcnRhYmxlRXZlbnQsXG4gICAgICAgICAgb2xkSW5kZXggPSBfcmVmMTIub2xkSW5kZXgsXG4gICAgICAgICAgcHV0U29ydGFibGUgPSBfcmVmMTIucHV0U29ydGFibGU7XG4gICAgICB2YXIgdG9Tb3J0YWJsZSA9IHB1dFNvcnRhYmxlIHx8IHRoaXMuc29ydGFibGU7XG4gICAgICBpZiAoIWV2dCkgcmV0dXJuO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBwYXJlbnRFbC5jaGlsZHJlbjsgLy8gTXVsdGktZHJhZyBzZWxlY3Rpb25cblxuICAgICAgaWYgKCFkcmFnU3RhcnRlZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5tdWx0aURyYWdLZXkgJiYgIXRoaXMubXVsdGlEcmFnS2V5RG93bikge1xuICAgICAgICAgIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwkMSwgb3B0aW9ucy5zZWxlY3RlZENsYXNzLCAhfm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZHJhZ0VsJDEpKTtcblxuICAgICAgICBpZiAoIX5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGRyYWdFbCQxKSkge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnB1c2goZHJhZ0VsJDEpO1xuICAgICAgICAgIGRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgICAgICAgcm9vdEVsOiByb290RWwsXG4gICAgICAgICAgICBuYW1lOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIHRhcmdldEVsOiBkcmFnRWwkMSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBldnRcbiAgICAgICAgICB9KTsgLy8gTW9kaWZpZXIgYWN0aXZhdGVkLCBzZWxlY3QgZnJvbSBsYXN0IHRvIGRyYWdFbFxuXG4gICAgICAgICAgaWYgKGV2dC5zaGlmdEtleSAmJiBsYXN0TXVsdGlEcmFnU2VsZWN0ICYmIHNvcnRhYmxlLmVsLmNvbnRhaW5zKGxhc3RNdWx0aURyYWdTZWxlY3QpKSB7XG4gICAgICAgICAgICB2YXIgbGFzdEluZGV4ID0gaW5kZXgobGFzdE11bHRpRHJhZ1NlbGVjdCksXG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gaW5kZXgoZHJhZ0VsJDEpO1xuXG4gICAgICAgICAgICBpZiAofmxhc3RJbmRleCAmJiB+Y3VycmVudEluZGV4ICYmIGxhc3RJbmRleCAhPT0gY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgICAgIC8vIE11c3QgaW5jbHVkZSBsYXN0TXVsdGlEcmFnU2VsZWN0IChzZWxlY3QgaXQpLCBpbiBjYXNlIG1vZGlmaWVkIHNlbGVjdGlvbiBmcm9tIG5vIHNlbGVjdGlvblxuICAgICAgICAgICAgICAvLyAoYnV0IHByZXZpb3VzIHNlbGVjdGlvbiBleGlzdGVkKVxuICAgICAgICAgICAgICB2YXIgbiwgaTtcblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgaSA9IGxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICBuID0gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgbiA9IGxhc3RJbmRleCArIDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihjaGlsZHJlbltpXSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGNoaWxkcmVuW2ldLCBvcHRpb25zLnNlbGVjdGVkQ2xhc3MsIHRydWUpO1xuICAgICAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgcm9vdEVsOiByb290RWwsXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgIHRhcmdldEVsOiBjaGlsZHJlbltpXSxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBldnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0TXVsdGlEcmFnU2VsZWN0ID0gZHJhZ0VsJDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbXVsdGlEcmFnU29ydGFibGUgPSB0b1NvcnRhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnNwbGljZShtdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGRyYWdFbCQxKSwgMSk7XG4gICAgICAgICAgbGFzdE11bHRpRHJhZ1NlbGVjdCA9IG51bGw7XG4gICAgICAgICAgZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICBzb3J0YWJsZTogc29ydGFibGUsXG4gICAgICAgICAgICByb290RWw6IHJvb3RFbCxcbiAgICAgICAgICAgIG5hbWU6ICdkZXNlbGVjdCcsXG4gICAgICAgICAgICB0YXJnZXRFbDogZHJhZ0VsJDEsXG4gICAgICAgICAgICBvcmlnaW5hbEV2dDogZXZ0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gTXVsdGktZHJhZyBkcm9wXG5cblxuICAgICAgaWYgKGRyYWdTdGFydGVkICYmIHRoaXMuaXNNdWx0aURyYWcpIHtcbiAgICAgICAgLy8gRG8gbm90IFwidW5mb2xkXCIgYWZ0ZXIgYXJvdW5kIGRyYWdFbCBpZiByZXZlcnRlZFxuICAgICAgICBpZiAoKHBhcmVudEVsW2V4cGFuZG9dLm9wdGlvbnMuc29ydCB8fCBwYXJlbnRFbCAhPT0gcm9vdEVsKSAmJiBtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmFyIGRyYWdSZWN0ID0gZ2V0UmVjdChkcmFnRWwkMSksXG4gICAgICAgICAgICAgIG11bHRpRHJhZ0luZGV4ID0gaW5kZXgoZHJhZ0VsJDEsICc6bm90KC4nICsgdGhpcy5vcHRpb25zLnNlbGVjdGVkQ2xhc3MgKyAnKScpO1xuICAgICAgICAgIGlmICghaW5pdGlhbEZvbGRpbmcgJiYgb3B0aW9ucy5hbmltYXRpb24pIGRyYWdFbCQxLnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgdG9Tb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcblxuICAgICAgICAgIGlmICghaW5pdGlhbEZvbGRpbmcpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICBkcmFnRWwkMS5mcm9tUmVjdCA9IGRyYWdSZWN0O1xuICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbXVsdGlEcmFnRWxlbWVudC50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgIT09IGRyYWdFbCQxKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZvbGRpbmcgPyBnZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQpIDogZHJhZ1JlY3Q7XG4gICAgICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50LmZyb21SZWN0ID0gcmVjdDsgLy8gUHJlcGFyZSB1bmZvbGQgYW5pbWF0aW9uXG5cbiAgICAgICAgICAgICAgICAgIHRvU29ydGFibGUuYWRkQW5pbWF0aW9uU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG11bHRpRHJhZ0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Q6IHJlY3RcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IC8vIE11bHRpIGRyYWcgZWxlbWVudHMgYXJlIG5vdCBuZWNlc3NhcmlseSByZW1vdmVkIGZyb20gdGhlIERPTSBvbiBkcm9wLCBzbyB0byByZWluc2VydFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgdGhleSBtdXN0IGFsbCBiZSByZW1vdmVkXG5cblxuICAgICAgICAgICAgcmVtb3ZlTXVsdGlEcmFnRWxlbWVudHMoKTtcbiAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW211bHRpRHJhZ0luZGV4XSkge1xuICAgICAgICAgICAgICAgIHBhcmVudEVsLmluc2VydEJlZm9yZShtdWx0aURyYWdFbGVtZW50LCBjaGlsZHJlblttdWx0aURyYWdJbmRleF0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbXVsdGlEcmFnSW5kZXgrKztcbiAgICAgICAgICAgIH0pOyAvLyBJZiBpbml0aWFsIGZvbGRpbmcgaXMgZG9uZSwgdGhlIGVsZW1lbnRzIG1heSBoYXZlIGNoYW5nZWQgcG9zaXRpb24gYmVjYXVzZSB0aGV5IGFyZSBub3dcbiAgICAgICAgICAgIC8vIHVuZm9sZGluZyBhcm91bmQgZHJhZ0VsLCBldmVuIHRob3VnaCBkcmFnRWwgbWF5IG5vdCBoYXZlIGhpcyBpbmRleCBjaGFuZ2VkLCBzbyB1cGRhdGUgZXZlbnRcbiAgICAgICAgICAgIC8vIG11c3QgYmUgZmlyZWQgaGVyZSBhcyBTb3J0YWJsZSB3aWxsIG5vdC5cblxuICAgICAgICAgICAgaWYgKG9sZEluZGV4ID09PSBpbmRleChkcmFnRWwkMSkpIHtcbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQuc29ydGFibGVJbmRleCAhPT0gaW5kZXgobXVsdGlEcmFnRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50KCd1cGRhdGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gTXVzdCBiZSBkb25lIGFmdGVyIGNhcHR1cmluZyBpbmRpdmlkdWFsIHJlY3RzIChzY3JvbGwgYmFyKVxuXG5cbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICB1bnNldFJlY3QobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdG9Tb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBtdWx0aURyYWdTb3J0YWJsZSA9IHRvU29ydGFibGU7XG4gICAgICB9IC8vIFJlbW92ZSBjbG9uZXMgaWYgbmVjZXNzYXJ5XG5cblxuICAgICAgaWYgKHJvb3RFbCA9PT0gcGFyZW50RWwgfHwgcHV0U29ydGFibGUgJiYgcHV0U29ydGFibGUubGFzdFB1dE1vZGUgIT09ICdjbG9uZScpIHtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgICAgY2xvbmUucGFyZW50Tm9kZSAmJiBjbG9uZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBudWxsaW5nR2xvYmFsOiBmdW5jdGlvbiBudWxsaW5nR2xvYmFsKCkge1xuICAgICAgdGhpcy5pc011bHRpRHJhZyA9IGRyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgICBtdWx0aURyYWdDbG9uZXMubGVuZ3RoID0gMDtcbiAgICB9LFxuICAgIGRlc3Ryb3lHbG9iYWw6IGZ1bmN0aW9uIGRlc3Ryb3lHbG9iYWwoKSB7XG4gICAgICB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZygpO1xuXG4gICAgICBvZmYoZG9jdW1lbnQsICdwb2ludGVydXAnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgICBvZmYoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgICAgb2ZmKGRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgICBvZmYoZG9jdW1lbnQsICdrZXlkb3duJywgdGhpcy5fY2hlY2tLZXlEb3duKTtcbiAgICAgIG9mZihkb2N1bWVudCwgJ2tleXVwJywgdGhpcy5fY2hlY2tLZXlVcCk7XG4gICAgfSxcbiAgICBfZGVzZWxlY3RNdWx0aURyYWc6IGZ1bmN0aW9uIF9kZXNlbGVjdE11bHRpRHJhZyhldnQpIHtcbiAgICAgIGlmICh0eXBlb2YgZHJhZ1N0YXJ0ZWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZHJhZ1N0YXJ0ZWQpIHJldHVybjsgLy8gT25seSBkZXNlbGVjdCBpZiBzZWxlY3Rpb24gaXMgaW4gdGhpcyBzb3J0YWJsZVxuXG4gICAgICBpZiAobXVsdGlEcmFnU29ydGFibGUgIT09IHRoaXMuc29ydGFibGUpIHJldHVybjsgLy8gT25seSBkZXNlbGVjdCBpZiB0YXJnZXQgaXMgbm90IGl0ZW0gaW4gdGhpcyBzb3J0YWJsZVxuXG4gICAgICBpZiAoZXZ0ICYmIGNsb3Nlc3QoZXZ0LnRhcmdldCwgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSwgdGhpcy5zb3J0YWJsZS5lbCwgZmFsc2UpKSByZXR1cm47IC8vIE9ubHkgZGVzZWxlY3QgaWYgbGVmdCBjbGlja1xuXG4gICAgICBpZiAoZXZ0ICYmIGV2dC5idXR0b24gIT09IDApIHJldHVybjtcblxuICAgICAgd2hpbGUgKG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB2YXIgZWwgPSBtdWx0aURyYWdFbGVtZW50c1swXTtcbiAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHRoaXMub3B0aW9ucy5zZWxlY3RlZENsYXNzLCBmYWxzZSk7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnNoaWZ0KCk7XG4gICAgICAgIGRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLnNvcnRhYmxlLFxuICAgICAgICAgIHJvb3RFbDogdGhpcy5zb3J0YWJsZS5lbCxcbiAgICAgICAgICBuYW1lOiAnZGVzZWxlY3QnLFxuICAgICAgICAgIHRhcmdldEVsOiBlbCxcbiAgICAgICAgICBvcmlnaW5hbEV2dDogZXZ0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgX2NoZWNrS2V5RG93bjogZnVuY3Rpb24gX2NoZWNrS2V5RG93bihldnQpIHtcbiAgICAgIGlmIChldnQua2V5ID09PSB0aGlzLm9wdGlvbnMubXVsdGlEcmFnS2V5KSB7XG4gICAgICAgIHRoaXMubXVsdGlEcmFnS2V5RG93biA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBfY2hlY2tLZXlVcDogZnVuY3Rpb24gX2NoZWNrS2V5VXAoZXZ0KSB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gdGhpcy5vcHRpb25zLm11bHRpRHJhZ0tleSkge1xuICAgICAgICB0aGlzLm11bHRpRHJhZ0tleURvd24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyhNdWx0aURyYWcsIHtcbiAgICAvLyBTdGF0aWMgbWV0aG9kcyAmIHByb3BlcnRpZXNcbiAgICBwbHVnaW5OYW1lOiAnbXVsdGlEcmFnJyxcbiAgICB1dGlsczoge1xuICAgICAgLyoqXHJcbiAgICAgICAqIFNlbGVjdHMgdGhlIHByb3ZpZGVkIG11bHRpLWRyYWcgaXRlbVxyXG4gICAgICAgKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgVGhlIGVsZW1lbnQgdG8gYmUgc2VsZWN0ZWRcclxuICAgICAgICovXG4gICAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdChlbCkge1xuICAgICAgICB2YXIgc29ydGFibGUgPSBlbC5wYXJlbnROb2RlW2V4cGFuZG9dO1xuICAgICAgICBpZiAoIXNvcnRhYmxlIHx8ICFzb3J0YWJsZS5vcHRpb25zLm11bHRpRHJhZyB8fCB+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihlbCkpIHJldHVybjtcblxuICAgICAgICBpZiAobXVsdGlEcmFnU29ydGFibGUgJiYgbXVsdGlEcmFnU29ydGFibGUgIT09IHNvcnRhYmxlKSB7XG4gICAgICAgICAgbXVsdGlEcmFnU29ydGFibGUubXVsdGlEcmFnLl9kZXNlbGVjdE11bHRpRHJhZygpO1xuXG4gICAgICAgICAgbXVsdGlEcmFnU29ydGFibGUgPSBzb3J0YWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZUNsYXNzKGVsLCBzb3J0YWJsZS5vcHRpb25zLnNlbGVjdGVkQ2xhc3MsIHRydWUpO1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5wdXNoKGVsKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxyXG4gICAgICAgKiBEZXNlbGVjdHMgdGhlIHByb3ZpZGVkIG11bHRpLWRyYWcgaXRlbVxyXG4gICAgICAgKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgVGhlIGVsZW1lbnQgdG8gYmUgZGVzZWxlY3RlZFxyXG4gICAgICAgKi9cbiAgICAgIGRlc2VsZWN0OiBmdW5jdGlvbiBkZXNlbGVjdChlbCkge1xuICAgICAgICB2YXIgc29ydGFibGUgPSBlbC5wYXJlbnROb2RlW2V4cGFuZG9dLFxuICAgICAgICAgICAgaW5kZXggPSBtdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGVsKTtcbiAgICAgICAgaWYgKCFzb3J0YWJsZSB8fCAhc29ydGFibGUub3B0aW9ucy5tdWx0aURyYWcgfHwgIX5pbmRleCkgcmV0dXJuO1xuICAgICAgICB0b2dnbGVDbGFzcyhlbCwgc29ydGFibGUub3B0aW9ucy5zZWxlY3RlZENsYXNzLCBmYWxzZSk7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBldmVudFByb3BlcnRpZXM6IGZ1bmN0aW9uIGV2ZW50UHJvcGVydGllcygpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgb2xkSW5kaWNpZXMgPSBbXSxcbiAgICAgICAgICBuZXdJbmRpY2llcyA9IFtdO1xuICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICBvbGRJbmRpY2llcy5wdXNoKHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50OiBtdWx0aURyYWdFbGVtZW50LFxuICAgICAgICAgIGluZGV4OiBtdWx0aURyYWdFbGVtZW50LnNvcnRhYmxlSW5kZXhcbiAgICAgICAgfSk7IC8vIG11bHRpRHJhZ0VsZW1lbnRzIHdpbGwgYWxyZWFkeSBiZSBzb3J0ZWQgaWYgZm9sZGluZ1xuXG4gICAgICAgIHZhciBuZXdJbmRleDtcblxuICAgICAgICBpZiAoZm9sZGluZyAmJiBtdWx0aURyYWdFbGVtZW50ICE9PSBkcmFnRWwkMSkge1xuICAgICAgICAgIG5ld0luZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZGluZykge1xuICAgICAgICAgIG5ld0luZGV4ID0gaW5kZXgobXVsdGlEcmFnRWxlbWVudCwgJzpub3QoLicgKyBfdGhpczMub3B0aW9ucy5zZWxlY3RlZENsYXNzICsgJyknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdJbmRleCA9IGluZGV4KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3SW5kaWNpZXMucHVzaCh7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudDogbXVsdGlEcmFnRWxlbWVudCxcbiAgICAgICAgICBpbmRleDogbmV3SW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW1zOiBfdG9Db25zdW1hYmxlQXJyYXkobXVsdGlEcmFnRWxlbWVudHMpLFxuICAgICAgICBjbG9uZXM6IFtdLmNvbmNhdChtdWx0aURyYWdDbG9uZXMpLFxuICAgICAgICBvbGRJbmRpY2llczogb2xkSW5kaWNpZXMsXG4gICAgICAgIG5ld0luZGljaWVzOiBuZXdJbmRpY2llc1xuICAgICAgfTtcbiAgICB9LFxuICAgIG9wdGlvbkxpc3RlbmVyczoge1xuICAgICAgbXVsdGlEcmFnS2V5OiBmdW5jdGlvbiBtdWx0aURyYWdLZXkoa2V5KSB7XG4gICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChrZXkgPT09ICdjdHJsJykge1xuICAgICAgICAgIGtleSA9ICdDb250cm9sJztcbiAgICAgICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHIoMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydE11bHRpRHJhZ0VsZW1lbnRzKGNsb25lc0luc2VydGVkLCByb290RWwpIHtcbiAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCwgaSkge1xuICAgIHZhciB0YXJnZXQgPSByb290RWwuY2hpbGRyZW5bbXVsdGlEcmFnRWxlbWVudC5zb3J0YWJsZUluZGV4ICsgKGNsb25lc0luc2VydGVkID8gTnVtYmVyKGkpIDogMCldO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShtdWx0aURyYWdFbGVtZW50LCB0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290RWwuYXBwZW5kQ2hpbGQobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cbi8qKlxyXG4gKiBJbnNlcnQgbXVsdGktZHJhZyBjbG9uZXNcclxuICogQHBhcmFtICB7W0Jvb2xlYW5dfSBlbGVtZW50c0luc2VydGVkICBXaGV0aGVyIHRoZSBtdWx0aS1kcmFnIGVsZW1lbnRzIGFyZSBpbnNlcnRlZFxyXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gcm9vdEVsXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGluc2VydE11bHRpRHJhZ0Nsb25lcyhlbGVtZW50c0luc2VydGVkLCByb290RWwpIHtcbiAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lLCBpKSB7XG4gICAgdmFyIHRhcmdldCA9IHJvb3RFbC5jaGlsZHJlbltjbG9uZS5zb3J0YWJsZUluZGV4ICsgKGVsZW1lbnRzSW5zZXJ0ZWQgPyBOdW1iZXIoaSkgOiAwKV07XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICByb290RWwuaW5zZXJ0QmVmb3JlKGNsb25lLCB0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290RWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU11bHRpRHJhZ0VsZW1lbnRzKCkge1xuICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgPT09IGRyYWdFbCQxKSByZXR1cm47XG4gICAgbXVsdGlEcmFnRWxlbWVudC5wYXJlbnROb2RlICYmIG11bHRpRHJhZ0VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtdWx0aURyYWdFbGVtZW50KTtcbiAgfSk7XG59XG5cblNvcnRhYmxlLm1vdW50KG5ldyBBdXRvU2Nyb2xsUGx1Z2luKCkpO1xuU29ydGFibGUubW91bnQoUmVtb3ZlLCBSZXZlcnQpO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0YWJsZTtcbmV4cG9ydCB7IE11bHRpRHJhZ1BsdWdpbiBhcyBNdWx0aURyYWcsIFNvcnRhYmxlLCBTd2FwUGx1Z2luIGFzIFN3YXAgfTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQm9vbGVhbkNoZWNrYm94IGV4dGVuZHMgQm9vbGVhbiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3YtYm9vbGVhbi1jaGVja2JveFwiLCBCb29sZWFuQ2hlY2tib3gpO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5DaGVja2JveDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEJvb2xlYW5Td2l0Y2ggZXh0ZW5kcyBCb29sZWFuIHt9XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktYm9vbGVhblwiLCBCb29sZWFuU3dpdGNoKTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblN3aXRjaDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBCdXR0b25Hcm91cCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbD4ge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw7XG5cbiAgZ2V0TW9kZWwoKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxufVxuLy8gVnVlLmNvbXBvbmVudChcInN1cnZleS1idXR0b25ncm91cFwiLCBCdXR0b25Hcm91cCk7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHtcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG4gIEl0ZW1WYWx1ZSxcbiAgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQnV0dG9uR3JvdXBJdGVtIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgaXRlbTogSXRlbVZhbHVlO1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw7XG4gIEBQcm9wKCkgaW5kZXg6IG51bWJlcjtcbiAgcHVibGljIG1vZGVsOiBCdXR0b25Hcm91cEl0ZW1Nb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgfVxuICBnZXRNb2RlbCgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LWJ1dHRvbi1ncm91cC1pdGVtXCIsIEJ1dHRvbkdyb3VwSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cEl0ZW07XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIENoZWNrYm94IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25DaGVja2JveE1vZGVsPiB7XG4gIGdldEl0ZW1DbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktY2hlY2tib3hcIiwgQ2hlY2tib3gpO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgeyBJdGVtVmFsdWUsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDaGVja2JveEl0ZW0gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogYW55O1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBpbmRleDogYW55O1xuICBAUHJvcCgpIGhpZGVMYWJlbDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgZ2V0IGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNBbGxTZWxlY3RlZDtcbiAgfVxuICBzZXQgaXNBbGxTZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmlzQWxsU2VsZWN0ZWQgPSB2YWw7XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwgQ2hlY2tib3hJdGVtKTtcbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94SXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21tZW50TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIENvbW1lbnQgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkNvbW1lbnRNb2RlbD4ge1xuICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAga2V5dXAoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktY29tbWVudFwiLCBDb21tZW50KTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVudDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XHJcbmltcG9ydCBBY3Rpb25CYXJJdGVtVmlld01vZGVsIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWVcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIEFjdGlvbkJhckl0ZW1Ecm9wZG93blZpZXdNb2RlbCBleHRlbmRzIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwge31cclxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLCBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWwpO1xyXG5leHBvcnQgZGVmYXVsdCBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWw7XHJcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxyXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcclxuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uL2Jhc2VcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwgZXh0ZW5kcyBCYXNlVnVlIHtcclxuICBAUHJvcCgpIHB1YmxpYyBpdGVtOiBBY3Rpb247XHJcblxyXG4gIGdldE1vZGVsKCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcbn1cclxuXHJcblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIiwgQWN0aW9uQmFySXRlbVZpZXdNb2RlbCk7XHJcbmV4cG9ydCBkZWZhdWx0IEFjdGlvbkJhckl0ZW1WaWV3TW9kZWw7XHJcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGl0ZW06IGFueTtcblxuICBwdWJsaWMgZ2V0IGlubmVyQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0uaW5uZXJDc3M7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCk7XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWw7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xyXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcclxuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24udnVlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWVcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWVcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIEFjdGlvbkJhclZpZXdNb2RlbCBleHRlbmRzIEJhc2VWdWUge1xyXG4gIEBQcm9wKCkgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyO1xyXG4gIEBQcm9wKCkgaGFuZGxlQ2xpY2s6IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxufVxyXG5cclxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXJcIiwgQWN0aW9uQmFyVmlld01vZGVsKTtcclxuZXhwb3J0IGRlZmF1bHQgQWN0aW9uQmFyVmlld01vZGVsO1xyXG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBBY3Rpb25WaWV3TW9kZWwgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBpdGVtOiBBY3Rpb247XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBnZXRDb21wb25lbnROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3YtYWN0aW9uLWJhci1pdGVtXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb25cIiwgQWN0aW9uVmlld01vZGVsKTtcbmV4cG9ydCBkZWZhdWx0IEFjdGlvblZpZXdNb2RlbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwidnVlLWNsYXNzLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGl0bGUgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGVsZW1lbnQ6IGFueTtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgZ2V0IHNob3dJY29uKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuaXNFeHBhbmRlZCB8fCB0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY2hhbmdlRXhwYW5kZWQoKSB7XG4gICAgdGhpcy5lbGVtZW50LnRvZ2dsZVN0YXRlKCk7XG4gIH1cblxuICBnZXRJY29uQ3NzKGlzQ29sbGFwc2VkOiBib29sZWFuKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzLnF1ZXN0aW9uLmljb247XG4gICAgaWYgKCFpc0NvbGxhcHNlZCkgcmVzdWx0ICs9IFwiIFwiICsgdGhpcy5jc3MucXVlc3Rpb24uaWNvbkV4cGFuZGVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG5cbiAgICB0aGlzLmVsZW1lbnQuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkO1xuICAgIH07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LWRlZmF1bHQtdGl0bGVcIiwgRGVmYXVsdFRpdGxlKTtcbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRUaXRsZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cclxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7IExpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBCYXNlVnVlIHtcclxuICBAUHJvcCgpIG1vZGVsOiBMaXN0TW9kZWw7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxufVxyXG5cclxuVnVlLmNvbXBvbmVudChcInN2LWxpc3RcIiwgTGlzdCk7XHJcbmV4cG9ydCBkZWZhdWx0IExpc3Q7XHJcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBCYXNlVnVlIGZyb20gXCIuLi8uLi8uLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHB1YmxpYyBpdGVtOiBBY3Rpb247XG5cbiAgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIGdldCByb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnJvdztcbiAgfVxuXG4gIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uLy4uL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHB1YmxpYyBpdGVtOiBBY3Rpb247XG5cbiAgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcbiAgXCJzdi1tYXRyaXgtZHJhZy1kcm9wLWljb25cIixcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uXG4pO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBCYXNlVnVlIGZyb20gXCIuLi8uLi8uLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBwdWJsaWMgaXRlbTogQWN0aW9uO1xuXG4gIGdldCBxdWVzdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cblxuICBnZXQgcm93KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5yb3c7XG4gIH1cblxuICBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXG4gIFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uXG4pO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQb3B1cEJhc2VWaWV3TW9kZWwsIFBvcHVwTW9kZWwsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQb3B1cENvbnRhaW5lciBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIG1vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgcHJldklzVmlzaWJsZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNsaWNrSW5zaWRlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuICBvblVwZGF0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLnByZXZJc1Zpc2libGUgJiYgdGhpcy5tb2RlbC5pc1Zpc2libGUpIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlT25TaG93aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucHJldklzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gc2hvd01vZGFsKFxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gIGRhdGE6IGFueSxcbiAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkXG4pIHtcbiAgY29uc3QgcG9wdXBNb2RlbCA9IG5ldyBQb3B1cE1vZGVsKFxuICAgIGNvbXBvbmVudE5hbWUsXG4gICAgZGF0YSxcbiAgICBcInRvcFwiLFxuICAgIFwibGVmdFwiLFxuICAgIGZhbHNlLFxuICAgIHRydWUsXG4gICAgb25DYW5jZWwsXG4gICAgb25BcHBseVxuICApO1xuICBjb25zdCBwb3B1cFZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsID0gbmV3IFBvcHVwQmFzZVZpZXdNb2RlbChcbiAgICBwb3B1cE1vZGVsLFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwb3B1cFZpZXdNb2RlbC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgY29uc3QgcG9wdXAgPSBuZXcgUG9wdXBDb250YWluZXIoe1xuICAgIGVsOiBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksXG4gICAgcHJvcHNEYXRhOiB7IG1vZGVsOiBwb3B1cFZpZXdNb2RlbCB9LFxuICB9KTtcbiAgcG9wdXBNb2RlbC5vbkhpZGUgPSAoKSA9PiB7XG4gICAgcG9wdXAuJGRlc3Ryb3koKTtcbiAgICBwb3B1cFZpZXdNb2RlbC5kZXN0cm95UG9wdXBDb250YWluZXIoKTtcbiAgfTtcbiAgcG9wdXBWaWV3TW9kZWwubW9kZWwuaXNWaXNpYmxlID0gdHJ1ZTtcbn1cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcblZ1ZS5jb21wb25lbnQoXCJzdi1wb3B1cC1jb250YWluZXJcIiwgUG9wdXBDb250YWluZXIpO1xuZXhwb3J0IGRlZmF1bHQgUG9wdXBDb250YWluZXI7XG4iLCJcblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFBvcHVwQmFzZVZpZXdNb2RlbCwgUG9wdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUG9wdXBDb250YWluZXIgfSBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQb3B1cCBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIG1vZGVsOiBQb3B1cE1vZGVsO1xuICBAUHJvcCgpIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHBvcHVwQ29udGFpbmVyOiBhbnk7XG4gIHByaXZhdGUgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIG9uTW91bnRlZCgpIHtcbiAgICB0aGlzLnBvcHVwVmlld01vZGVsID0gbmV3IFBvcHVwQmFzZVZpZXdNb2RlbChcbiAgICAgIHRoaXMubW9kZWwsXG4gICAgICB0aGlzLiRlbC5wYXJlbnRFbGVtZW50XG4gICAgKTtcbiAgICB0aGlzLnBvcHVwVmlld01vZGVsLmluaXRpYWxpemVQb3B1cENvbnRhaW5lcigpO1xuICAgIHRoaXMucG9wdXBDb250YWluZXIgPSBuZXcgUG9wdXBDb250YWluZXIoe1xuICAgICAgZWw6IHRoaXMucG9wdXBWaWV3TW9kZWwuY29udGFpbmVyLmFwcGVuZENoaWxkKFxuICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gICAgICApLFxuICAgICAgcHJvcHNEYXRhOiB7IG1vZGVsOiB0aGlzLnBvcHVwVmlld01vZGVsIH0sXG4gICAgfSk7XG4gIH1cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMucG9wdXBDb250YWluZXIuJGRlc3Ryb3koKTtcbiAgICB0aGlzLnBvcHVwVmlld01vZGVsLmRlc3Ryb3lQb3B1cENvbnRhaW5lcigpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3YtcG9wdXBcIiwgUG9wdXApO1xuZXhwb3J0IGRlZmF1bHQgUG9wdXA7XG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGNyZWF0ZVN2ZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKClcbiAgc2l6ZTogbnVtYmVyO1xuICBAUHJvcCgpXG4gIHdpZHRoOiBudW1iZXI7XG4gIEBQcm9wKClcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIEBQcm9wKCkgaWNvbk5hbWU6IHN0cmluZztcbiAgc3ZnSWNvbkVsZW1lbnQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIEBXYXRjaChcInNpemVcIilcbiAgb25TaXplUHJvcGVydHlDaGFuZ2VkKCkge1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbiAgQFdhdGNoKFwid2lkdGhcIilcbiAgb25XaWR0aFByb3BlcnR5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG4gIEBXYXRjaChcImhlaWdodFwiKVxuICBvbkhlaWdodFByb3BlcnR5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG4gIEBXYXRjaChcImljb25OYW1lXCIpXG4gIG9uSWNvbk5hbWVQcm9wZXJ0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgfVxuXG4gIG9uVXBkYXRlZCgpIHtcbiAgICBjcmVhdGVTdmcoXG4gICAgICB0aGlzLnNpemUsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHQsXG4gICAgICB0aGlzLmljb25OYW1lLFxuICAgICAgdGhpcy5zdmdJY29uRWxlbWVudFxuICAgICk7XG4gIH1cblxuICBvbk1vdW50ZWQoKSB7XG4gICAgdGhpcy5zdmdJY29uRWxlbWVudCA9IHRoaXMuJHJlZnNbXCJzdmdJY29uXCJdO1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LXN2Zy1pY29uXCIsIFN2Z0ljb24pO1xuXG5leHBvcnQgZGVmYXVsdCBTdmdJY29uO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgSVN1cnZleUVsZW1lbnQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgVGl0bGVBY3Rpb25zIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBlbGVtZW50OiBJU3VydmV5RWxlbWVudDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9vbGJhcigpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldFRpdGxlVG9vbGJhcigpO1xuICB9XG59XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImVsZW1lbnRcIixcbiAgXCJ0aXRsZS1hY3Rpb25zXCIsXG4gIFwic3YtdGl0bGUtYWN0aW9uc1wiXG4pO1xuXG5WdWUuY29tcG9uZW50KFwic3YtdGl0bGUtYWN0aW9uc1wiLCBUaXRsZUFjdGlvbnMpO1xuZXhwb3J0IGRlZmF1bHQgVGl0bGVBY3Rpb25zO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBnZXQgY29udGVudFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jb21wb3NpdGVcIiwgQ29tcG9zaXRlKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DdXN0b21Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ3VzdG9tIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBnZXQgY29udGVudFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb247XG4gIH1cbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jdXN0b21cIiwgQ3VzdG9tKTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlLCB7IENvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEN1c3RvbVdpZGdldCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBnZXQgaGFzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyIHx8IHRoaXMuaGFzVnVlQ29tcG9uZW50O1xuICB9XG4gIGdldCBoYXNIdG1sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgZ2V0IGN1c3RvbUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlO1xuICB9XG4gIGdldCBoYXNWdWVDb21wb25lbnQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9wdGlvbnMgPSAoPGFueT5WdWUpW1wib3B0aW9uc1wiXTtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgb3B0aW9ucy5jb21wb25lbnRzICYmIG9wdGlvbnMuY29tcG9uZW50c1t0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lXVxuICAgICk7XG4gIH1cbiAgZ2V0IGNvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNWdWVDb21wb25lbnQpIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lO1xuICAgIHJldHVybiBcInN1cnZleS1cIiArIHRoaXMucXVlc3Rpb24uZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgfVxuICB1cGRhdGVkKCkge1xuICAgIC8vdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWN1c3RvbXdpZGdldFwiLCBDdXN0b21XaWRnZXQpO1xuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21XaWRnZXQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Ecm9wZG93bk1vZGVsPiB7XG4gIGdldCBpc090aGVyU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHJldHVybiBxdWVzdGlvbi5oYXNPdGhlciAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQ7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZHJvcGRvd25cIiwgRHJvcGRvd24pO1xuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50VnVlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBAUHJvcCgpIGVsZW1lbnQ6IElFbGVtZW50O1xuICBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgaWYgKGVsZW1lbnQuZ2V0VHlwZSgpID09PSBcInBhbmVsXCIgfHwgZWxlbWVudC5pc0RlZmF1bHRSZW5kZXJpbmcoKSkge1xuICAgICAgcmV0dXJuIFwic3VydmV5LVwiICsgZWxlbWVudC5nZXRUZW1wbGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5nZXRDb21wb25lbnROYW1lKCk7XG4gIH1cbiAgZ2V0Um9vdENsYXNzKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgbGV0IGNzc1Jvb3QgPSBlbGVtZW50LmNzc1Jvb3Q7XG4gICAgaWYgKGVsZW1lbnQuaXNSZWFkT25seSkge1xuICAgICAgY3NzUm9vdCArPSBcIiBcIiArICg8YW55PnRoaXMuZWxlbWVudCkuY3NzQ2xhc3Nlcy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzUm9vdDtcbiAgfVxuICBnZXRDb250ZW50Q2xhc3MoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICByZXR1cm4gZWxlbWVudC5jc3NDb250ZW50O1xuICB9XG4gIGdldCBoYXNFcnJvcnNPblRvcCgpIHtcbiAgICByZXR1cm4gIXRoaXMuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA9PT0gXCJ0b3BcIjtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Cb3R0b20oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmVsZW1lbnQuaXNQYW5lbCAmJiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCJcbiAgICApO1xuICB9XG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgKDxRdWVzdGlvbj50aGlzLmVsZW1lbnQpLmFmdGVyUmVuZGVyKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZWxlbWVudFwiLCBTdXJ2ZXlFbGVtZW50VnVlKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleUVsZW1lbnRWdWU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIFF1ZXN0aW9uLCBkb0tleTJDbGljayB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRWxlbWVudEhlYWRlciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgZWxlbWVudDogSUVsZW1lbnQ7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVsZW1lbnQuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICB9XG5cbiAgZ2V0VGl0bGVDbGFzcyhlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIHJldHVybiBlbGVtZW50LmNzc1RpdGxlO1xuICB9XG4gIGdldEhlYWRlckNsYXNzKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY3NzSGVhZGVyO1xuICB9XG4gIGtleXVwKGV2dDogYW55KSB7XG4gICAgZG9LZXkyQ2xpY2soZXZ0KTtcbiAgfVxuICBjbGlja1RpdGxlRnVuY3Rpb24oKSB7XG4gICAgaWYodHlwZW9mICg8YW55PnRoaXMuZWxlbWVudCkuY2xpY2tUaXRsZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICg8YW55PnRoaXMuZWxlbWVudCkuY2xpY2tUaXRsZUZ1bmN0aW9uKCk7XG4gICAgfVxuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIEVsZW1lbnRIZWFkZXIpO1xuZXhwb3J0IGRlZmF1bHQgRWxlbWVudEhlYWRlcjtcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25FbXB0eU1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbXB0eVwiLCBFbXB0eSk7XG5leHBvcnQgZGVmYXVsdCBFbXB0eTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBFcnJvcnMgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgQFByb3AoKSBsb2NhdGlvbjogU3RyaW5nO1xuXG4gIGdldCBjbGFzc2VzKCkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICA/IHF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3Iucm9vdFxuICAgICAgOiBcInBhbmVsLWVycm9yLXJvb3RcIjtcblxuICAgIHZhciBhZGRpdGlvbmFsQ2xhc3NlcyA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5sb2NhdGlvbiA9PT0gXCJ0b3BcIikge1xuICAgICAgYWRkaXRpb25hbENsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uVG9wO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgYWRkaXRpb25hbENsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uQm90dG9tO1xuICAgIH1cblxuICAgIGlmIChhZGRpdGlvbmFsQ2xhc3NlcykgY2xhc3NlcyArPSBcIiBcIiArIGFkZGl0aW9uYWxDbGFzc2VzO1xuXG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZXJyb3JzXCIsIEVycm9ycyk7XG5leHBvcnQgZGVmYXVsdCBFcnJvcnM7XG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbiBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1leHByZXNzaW9uXCIsIEV4cHJlc3Npb24pO1xuZXhwb3J0IGRlZmF1bHQgRXhwcmVzc2lvbjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GaWxlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGNvbmZpcm1BY3Rpb24sIGRldGVjdElFT3JFZGdlLCBsb2FkRmlsZUZyb21CYXNlNjQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBGaWxlIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25GaWxlTW9kZWw+IHtcbiAgb25EcmFnT3ZlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSkge1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcImNvcHlcIjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuICBvbkRyb3AgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHNyYyA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICB0aGlzLm9uQ2hhbmdlKHNyYyk7XG4gIH07XG4gIGRvQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB2YXIgc3JjID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgdGhpcy5vbkNoYW5nZShzcmMpO1xuICB9XG4gIGRvQ2xlYW4oZXZlbnQ6IGFueSkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgIGlmIChxdWVzdGlvbi5uZWVkQ29uZmlybVJlbW92ZUZpbGUpIHtcbiAgICAgIHZhciBpc0NvbmZpcm1lZCA9IGNvbmZpcm1BY3Rpb24ocXVlc3Rpb24uY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UpO1xuICAgICAgaWYgKCFpc0NvbmZpcm1lZCkgcmV0dXJuO1xuICAgIH1cbiAgICBxdWVzdGlvbi5jbGVhcigpO1xuICAgIHNyYy5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKVswXS52YWx1ZSA9IFwiXCI7XG4gIH1cbiAgZG9SZW1vdmVGaWxlKGRhdGE6IGFueSkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgaWYgKHF1ZXN0aW9uLm5lZWRDb25maXJtUmVtb3ZlRmlsZSkge1xuICAgICAgdmFyIGlzQ29uZmlybWVkID0gY29uZmlybUFjdGlvbihcbiAgICAgICAgcXVlc3Rpb24uZ2V0Q29uZmlybVJlbW92ZU1lc3NhZ2UoZGF0YS5uYW1lKVxuICAgICAgKTtcbiAgICAgIGlmICghaXNDb25maXJtZWQpIHJldHVybjtcbiAgICB9XG4gICAgcXVlc3Rpb24ucmVtb3ZlRmlsZShkYXRhKTtcbiAgfVxuICBkb0Rvd25sb2FkRmlsZShldmVudDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBpZiAoZGV0ZWN0SUVPckVkZ2UoKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxvYWRGaWxlRnJvbUJhc2U2NChkYXRhLmNvbnRlbnQsIGRhdGEubmFtZSk7XG4gICAgfVxuICB9XG4gIGdldFBsYWNlaG9sZGVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwiZm9ybS1jb250cm9sIFwiICsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnBsYWNlaG9sZGVySW5wdXQ7XG4gIH1cbiAgcHJpdmF0ZSBvbkNoYW5nZShzcmM6IGFueSkge1xuICAgIGlmICghKDxhbnk+d2luZG93KVtcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcbiAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKSByZXR1cm47XG4gICAgbGV0IGZpbGVzID0gW107XG4gICAgbGV0IGFsbG93Q291bnQgPSB0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGUgPyBzcmMuZmlsZXMubGVuZ3RoIDogMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbG93Q291bnQ7IGkrKykge1xuICAgICAgZmlsZXMucHVzaChzcmMuZmlsZXNbaV0pO1xuICAgIH1cbiAgICBzcmMudmFsdWUgPSBcIlwiO1xuICAgIHRoaXMucXVlc3Rpb24ubG9hZEZpbGVzKGZpbGVzKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1maWxlXCIsIEZpbGUpO1xuZXhwb3J0IGRlZmF1bHQgRmlsZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWxCYXNlLCBQYW5lbE1vZGVsLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEZsb3dQYW5lbCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IEZsb3dQYW5lbE1vZGVsO1xuICBAUHJvcCgpIGlzRWRpdE1vZGU6IEJvb2xlYW47XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHByaXZhdGUgaXNDb2xsYXBzZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJvb3ROb2RlVmFsdWU6IE5vZGU7XG5cbiAgZ2V0IHJvb3ROb2RlKCk6IE5vZGUge1xuICAgIHJldHVybiB0aGlzLnJvb3ROb2RlVmFsdWU7XG4gIH1cbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucXVlc3Rpb24ub25DdXN0b21IdG1sUHJvZHVjaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gc2VsZi5yZW5kZXJRdWVzdGlvbjtcbiAgICB0aGlzLnNldFJvb3ROb2RlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFJvb3ROb2RlKCkge1xuICAgIGxldCBodG1sID0gXCI8c3Bhbj5cIiArIHRoaXMucXVlc3Rpb24ucHJvZHVjZUh0bWwoKSArIFwiPC9zcGFuPlwiO1xuICAgIGxldCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgdGhpcy5yb290Tm9kZVZhbHVlID1cbiAgICAgICEhZG9jICYmIGRvYy5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgPyBkb2MuY2hpbGROb2Rlc1swXSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPHF1ZXN0aW9uPlwiICsgcXVlc3Rpb24ubmFtZSArIFwiPC9xdWVzdGlvbj5cIjtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnN1cnZleSkge1xuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYW5lbCh0aGlzLnF1ZXN0aW9uLCB0aGlzLiRlbCBhcyBIVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJzdGF0ZVwiLFxuICAgICAgZnVuY3Rpb24gKHZhbDogYW55KSB7XG4gICAgICAgIHNlbGYuaXNDb2xsYXBzZWQgPSBzZWxmLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgZ2V0IHJvb3RTdHlsZSgpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGgpIHtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4QmFzaXNcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcImZsZXhHcm93XCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4U2hyaW5rXCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJ3aWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGg7XG4gICAgICAoPGFueT5yZXN1bHQpW1wibWluV2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLm1pbldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1heFdpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgc2hvd0ljb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucXVlc3Rpb24gJiYgKHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkKVxuICAgICk7XG4gIH1cbiAgZ2V0IHJvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24ucm93cztcbiAgfVxuICBnZXQgaGFzVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udGl0bGUubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgc3VydmV5KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleTtcbiAgfVxuICBnZXQgaWNvbkNzcygpIHtcbiAgICB2YXIgcmVzdWx0ID0gXCJzdl9wYW5lbF9pY29uXCI7XG4gICAgaWYgKCF0aGlzLmlzQ29sbGFwc2VkKSByZXN1bHQgKz0gXCIgc3ZfZXhwYW5kZWRcIjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGdldCBpc0NvbGxhcHNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZFZhbHVlO1xuICB9XG4gIHNldCBpc0NvbGxhcHNlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkVmFsdWUgPSB2YWw7XG4gIH1cbiAgY2hhbmdlRXhwYW5kZWQoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0V4cGFuZGVkKSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmV4cGFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jb2xsYXBzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRUaXRsZVN0eWxlKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmNzcy5wYW5lbC50aXRsZTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzLnBhbmVsLnRpdGxlRXhwYW5kYWJsZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LWZsb3dwYW5lbFwiLCBGbG93UGFuZWwpO1xuZXhwb3J0IGRlZmF1bHQgRmxvd1BhbmVsO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBGbG93UGFuZWxNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRmxvd1BhbmVsRWxlbWVudCBleHRlbmRzIFZ1ZSB7XG4gIHN0YXRpYyBpZFZhbHVlOiBudW1iZXI7XG4gIEBQcm9wKCkgbm9kZTogTm9kZTtcbiAgQFByb3AoKSBwYW5lbDogRmxvd1BhbmVsTW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHByaXZhdGUgZWxlbWVudElkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHF1ZXN0aW9uOiBRdWVzdGlvbiA9IG51bGw7XG4gIHB1YmxpYyB0YWdOYW1lOiBzdHJpbmcgPSBcInNwYW5cIjtcbiAgcHVibGljIG5vZGVzOiBBcnJheTxOb2RlPiA9IFtdO1xuICBwdWJsaWMgdGV4dDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHN0eWxlOiBhbnkgPSB7fTtcblxuICBwcml2YXRlIGdldFN0eWxlKG5vZGVUeXBlOiBzdHJpbmcpIHtcbiAgICB2YXIgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImJcIikge1xuICAgICAgc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInVcIikge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcInVuZGVybGluZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudElkVmFsdWUpIHtcbiAgICAgIGlmICghRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlKSB7XG4gICAgICAgIEZsb3dQYW5lbEVsZW1lbnQuaWRWYWx1ZSA9IDA7XG4gICAgICB9XG4gICAgICBGbG93UGFuZWxFbGVtZW50LmlkVmFsdWUrKztcbiAgICAgIHRoaXMuZWxlbWVudElkVmFsdWUgPSBcImZwX2VsXCIgKyBGbG93UGFuZWxFbGVtZW50LmlkVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVsZW1lbnRJZFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gPFN1cnZleU1vZGVsPnRoaXMucGFuZWwuc3VydmV5O1xuICB9XG4gIGJlZm9yZU1vdW50KCkge1xuICAgIGlmICghdGhpcy5wYW5lbCB8fCAhdGhpcy5ub2RlKSByZXR1cm47XG4gICAgdmFyIG5vZGVUeXBlID0gdGhpcy5ub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCF0aGlzLmhhc1RleHRDaGlsZE5vZGVzT25seSh0aGlzLm5vZGUpKSB7XG4gICAgICB0aGlzLm5vZGVzID0gdGhpcy5nZXRDaGlsZERvbU5vZGVzKHRoaXMubm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlVHlwZSA9PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHRoaXMucGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUodGhpcy5ub2RlLnRleHRDb250ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMubm9kZS50ZXh0Q29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlID09IFwiZGl2XCIgJiYgIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMudGFnTmFtZSA9IFwiZGl2XCI7XG4gICAgfVxuICAgIHRoaXMuc3R5bGUgPSB0aGlzLmdldFN0eWxlKG5vZGVUeXBlKTtcbiAgfVxuICAvL2R1cGxpY2F0ZWQgY29kZSBmcm9tIGVsZW1lbnQudnVlXG4gIGdldENvbXBvbmVudE5hbWUoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudC5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBcInN1cnZleS1jdXN0b213aWRnZXRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwic3VydmV5LVwiICsgZWxlbWVudC5nZXRUZW1wbGF0ZSgpO1xuICB9XG4gIC8vIGR1cGxpY2F0ZWQgY29kZSBmcm9tIHJlYWN0cGFnZXMudHN4XG4gIHByaXZhdGUgaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICB2YXIgbm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5vZGVzW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiI3RleHRcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldENoaWxkRG9tTm9kZXMobm9kZTogTm9kZSk6IEFycmF5PE5vZGU+IHtcbiAgICB2YXIgZG9tTm9kZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZG9tTm9kZXMucHVzaChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gZG9tTm9kZXM7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1mbG93cGFuZWxlbGVtZW50XCIsIEZsb3dQYW5lbEVsZW1lbnQpO1xuZXhwb3J0IGRlZmF1bHQgRmxvd1BhbmVsRWxlbWVudDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBWdWVTdXJ2ZXlNb2RlbCBhcyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleU1vZGVsXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlIZWFkZXIgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG5cbiAgbW91bnRlZCgpIHtcbiAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmRvQWZ0ZXJSZW5kZXJIZWFkZXIoZWwpO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaGVhZGVyXCIsIFN1cnZleUhlYWRlcik7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlIZWFkZXI7XG4iLCJcblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25IdG1sTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEh0bWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbkh0bWxNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaHRtbFwiLCBIdG1sKTtcbmV4cG9ydCBkZWZhdWx0IEh0bWw7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25JbWFnZU1vZGVsO1xuICBAUHJvcCgpIGNzczogYW55O1xufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1pbWFnZVwiLCBRdWVzdGlvbkltYWdlKTtcbmV4cG9ydCBkZWZhdWx0IFF1ZXN0aW9uSW1hZ2U7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBJbWFnZVBpY2tlciBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbD4ge1xuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWltYWdlcGlja2VyXCIsIEltYWdlUGlja2VyKTtcbmV4cG9ydCBkZWZhdWx0IEltYWdlUGlja2VyO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25NYXRyaXhNb2RlbD4ge1xuICBjZWxsQ2xpY2socm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5KSByZXR1cm47XG4gICAgcm93LnZhbHVlID0gY29sdW1uLnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW1hdHJpeFwiLCBNYXRyaXgpO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNYXRyaXhDZWxsIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb247XG4gIEBQcm9wKCkgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbDtcblxuICBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIGlmIChlbGVtZW50LmN1c3RvbVdpZGdldCkge1xuICAgICAgcmV0dXJuIFwic3VydmV5LWN1c3RvbXdpZGdldFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdXJ2ZXktXCIgKyBlbGVtZW50LmdldFR5cGUoKTtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5zaG93RXJyb3JPblRvcDtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Cb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5zaG93RXJyb3JPbkJvdHRvbTtcbiAgfVxuICBnZXRIZWFkZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5oZWFkZXJzO1xuICB9XG4gIGdldENlbGxTdHlsZSgpIHtcbiAgICBpZiAoISF0aGlzLmNlbGwud2lkdGggfHwgISF0aGlzLmNlbGwubWluV2lkdGgpXG4gICAgICByZXR1cm4geyB3aWR0aDogdGhpcy5jZWxsLndpZHRoLCBtaW5XaWR0aDogdGhpcy5jZWxsLm1pbldpZHRoIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLmNlbGwucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IGl0ZW0udmFsdWUgPT09IHRoaXMuY2VsbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlO1xuICAgIHZhciBhbGxvd0hvdmVyID0gIWlzRGlzYWJsZWQgJiYgIWlzQ2hlY2tlZDtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBpZiAoYWxsb3dIb3ZlcikgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5jZWxsLmhhc1F1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLnN1cnZleSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5jZWxsLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJpc1Zpc2libGVcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbC5jZWxsLFxuICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLmNlbGwucXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogdGhpcy4kZWwsXG4gICAgICByb3c6IHRoaXMuY2VsbC5yb3csXG4gICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uc3VydmV5Lm1hdHJpeEFmdGVyQ2VsbFJlbmRlcih0aGlzLnF1ZXN0aW9uLCBvcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIG9uVmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSB0aGlzLmNlbGwucXVlc3Rpb24uaXNWaXNpYmxlO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCBNYXRyaXhDZWxsKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeENlbGw7XG4iLCJcblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWw+IHt9XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHJvcGRvd25cIiwgTWF0cml4RHJvcGRvd24pO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4RHJvcGRvd247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE1hdHJpeER5bmFtaWMgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbD4ge1xuICBhZGRSb3dDbGljaygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmFkZFJvd1VJKCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHluYW1pY1wiLCBNYXRyaXhEeW5hbWljKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeER5bmFtaWM7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4VGFibGUgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgZ2V0IHRhYmxlKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgTWF0cml4VGFibGUpO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4VGFibGU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVRleHQgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsPiB7XG4gIGdldENvbXBvbmVudE5hbWUocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKHF1ZXN0aW9uLmN1c3RvbVdpZGdldCkge1xuICAgICAgcmV0dXJuIFwic3VydmV5LWN1c3RvbXdpZGdldFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdXJ2ZXktdGV4dFwiO1xuICB9XG4gIGdldCBoYXNFcnJvcnNPblRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uID09PSBcInRvcFwiO1xuICB9XG4gIGdldCBoYXNFcnJvcnNPbkJvdHRvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uID09PSBcImJvdHRvbVwiO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW11bHRpcGxldGV4dFwiLCBNdWx0aXBsZVRleHQpO1xuZXhwb3J0IGRlZmF1bHQgTXVsdGlwbGVUZXh0O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIEJhc2UsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb24gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgcHJpdmF0ZSBtb3VzZURvd25QYWdlOiBQYWdlTW9kZWw7XG4gIHNob3dQcmV2QnRuOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd05leHRCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93Q29tcGxldGVCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgQFdhdGNoKFwic3VydmV5XCIpXG4gIG9uUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uQ3JlYXRlZCgpO1xuICAgIHRoaXMudXBkYXRlU2hvd0J1dHRvbnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIHRoaXMuc3VydmV5Lm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNob3dCdXR0b25zKCk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVTaG93QnV0dG9ucygpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU2hvd0J1dHRvbnMoKSB7XG4gICAgdGhpcy5zaG93UHJldkJ0biA9ICF0aGlzLnN1cnZleS5pc0ZpcnN0UGFnZSAmJiB0aGlzLnN1cnZleS5pc1Nob3dQcmV2QnV0dG9uO1xuICAgIHRoaXMuc2hvd05leHRCdG4gPSAhdGhpcy5zdXJ2ZXkuaXNMYXN0UGFnZTtcbiAgICB0aGlzLnNob3dDb21wbGV0ZUJ0biA9IHRoaXMuc3VydmV5LmlzTGFzdFBhZ2U7XG4gIH1cbiAgbmV4dEJ1dHRvbk1vdXNlRG93bigpIHtcbiAgICB0aGlzLm1vdXNlRG93blBhZ2UgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIGJ1dHRvbk1vdXNlRG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIHByZXZQYWdlKCkge1xuICAgIHRoaXMuc3VydmV5LnByZXZQYWdlKCk7XG4gIH1cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKCEhdGhpcy5tb3VzZURvd25QYWdlICYmIHRoaXMubW91c2VEb3duUGFnZSAhPT0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5tb3VzZURvd25QYWdlID0gbnVsbDtcbiAgICB0aGlzLnN1cnZleS5uZXh0UGFnZSgpO1xuICB9XG4gIGNvbXBsZXRlTGFzdFBhZ2UoKSB7XG4gICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVMYXN0UGFnZSgpO1xuICB9XG4gIHNob3dQcmV2aWV3KCkge1xuICAgIHRoaXMuc3VydmV5LnNob3dQcmV2aWV3KCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbmF2aWdhdGlvblwiLCBOYXZpZ2F0aW9uKTtcbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBPdGhlckNob2ljZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBAUHJvcCgpIGNvbW1lbnRDbGFzczogYW55O1xuICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uY29tbWVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBrZXl1cChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKSByZXR1cm47XG4gICAgdGhpcy5xdWVzdGlvbi5jb21tZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW90aGVyLWNob2ljZVwiLCBPdGhlckNob2ljZSk7XG5leHBvcnQgZGVmYXVsdCBPdGhlckNob2ljZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFnZSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgcGFnZTogUGFnZU1vZGVsO1xuICBAUHJvcCgpIGNzczogT2JqZWN0O1xuXG4gIGlzQ3VycmVudFBhZ2VDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIEBXYXRjaChcInBhZ2VcIilcbiAgb25QYWdlUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uVXBkYXRlZCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5zdXJ2ZXkuc2Nyb2xsVG9Ub3BPblBhZ2VDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBnZXQgc2hvd0hlYWRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLl9zaG93VGl0bGU7XG4gIH1cbiAgZ2V0IHNob3dEZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLl9zaG93RGVzY3JpcHRpb247XG4gIH1cbiAgZ2V0IG51bSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLm51bSA+IDAgPyB0aGlzLnBhZ2UubnVtICsgXCIuIFwiIDogXCJcIjtcbiAgfVxuICBnZXQgcm93cygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLnJvd3M7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFnZVwiLCBQYWdlKTtcbmV4cG9ydCBkZWZhdWx0IFBhZ2U7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbEJhc2UsIFBhbmVsTW9kZWwsIGRvS2V5MkNsaWNrIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWwgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUGFuZWxNb2RlbDtcbiAgQFByb3AoKSBpc0VkaXRNb2RlOiBCb29sZWFuO1xuICBAUHJvcCgpIGNzczogYW55O1xuXG4gIHByaXZhdGUgaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwoXG4gICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgIHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcblxuICAgIHRoaXMucXVlc3Rpb24uc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICB9O1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5zdGF0ZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gIH1cbiAgZ2V0IHJvb3RTdHlsZSgpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGgpIHtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4QmFzaXNcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcImZsZXhHcm93XCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4U2hyaW5rXCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJ3aWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGg7XG4gICAgICAoPGFueT5yZXN1bHQpW1wibWluV2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLm1pbldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1heFdpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgc2hvd0ljb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICB9XG4gIGdldCByb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJvd3M7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnRpdGxlLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXk7XG4gIH1cbiAgZ2V0IGljb25Dc3MoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzLnBhbmVsLmljb247XG4gICAgaWYgKCF0aGlzLmlzQ29sbGFwc2VkKSByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzcy5wYW5lbC5pY29uRXhwYW5kZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBrZXl1cChldnQ6IGFueSkge1xuICAgIGRvS2V5MkNsaWNrKGV2dCk7XG4gIH1cbiAgY2FuY2VsUHJldmlldygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNhbmNlbFByZXZpZXcoKTtcbiAgfVxuICBnZXQgcmVxdWlyZWRUZXh0Q3NzKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IHx8XG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0XG4gICAgKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbFwiLCBQYW5lbCk7XG5leHBvcnQgZGVmYXVsdCBQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbD4ge1xuICBnZXQgcmVuZGVyZWRQYW5lbHMoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCkgcmV0dXJuIHRoaXMucXVlc3Rpb24ucGFuZWxzO1xuICAgIHZhciBwYW5lbHMgPSBbXTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwpIHtcbiAgICAgIHBhbmVscy5wdXNoKHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhbmVscztcbiAgfVxuICBhZGRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWwoKTtcbiAgfVxuICBnZXRCdXR0b25BZGRDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdmFyIGJ0bkNsYXNzZXMgPVxuICAgICAgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b24gKyBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIGJ0bkNsYXNzZXMgKz0gXCIgXCIgKyBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZCArIFwiLS1saXN0LW1vZGVcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gYnRuQ2xhc3NlcztcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbGR5bmFtaWNcIiwgUGFuZWxEeW5hbWljKTtcbmV4cG9ydCBkZWZhdWx0IFBhbmVsRHluYW1pYztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuXG4gIGdldCBjc3NDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICB9XG4gIGdldCByYW5nZU1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50IC0gMTtcbiAgfVxuICBhZGRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWxVSSgpO1xuICB9XG4gIHByZXZQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIG5leHRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub05leHRQYW5lbCgpO1xuICB9XG5cbiAgY2hhbmdlUmFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgZ2V0QnV0dG9uQWRkQ3NzKHF1ZXN0aW9uOiBRdWVzdGlvbikge31cblxuICBnZXRCdXR0b25QcmV2Q3NzKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHZhciBidG5DbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25QcmV2O1xuICAgIGlmICghcXVlc3Rpb24uaXNQcmV2QnV0dG9uU2hvd2luZykge1xuICAgICAgYnRuQ2xhc3NlcyArPSBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUHJldiArIFwiLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gYnRuQ2xhc3NlcztcbiAgfVxuXG4gIGdldEJ1dHRvbk5leHRDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdmFyIGJ0bkNsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbk5leHQ7XG4gICAgaWYgKCFxdWVzdGlvbi5pc05leHRCdXR0b25TaG93aW5nKSB7XG4gICAgICBidG5DbGFzc2VzICs9IFwiIFwiICsgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25OZXh0ICsgXCItLWRpc2FibGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBidG5DbGFzc2VzO1xuICB9XG5cbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiAodGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXggLyB0aGlzLnJhbmdlTWF4KSAqIDEwMCArIFwiJVwiO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUHJvZ3Jlc3M7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQYW5lbER5bmFtaWNSZW1vdmUgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICBAUHJvcCgpIHBhbmVsOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIGlzQ29sbGFwc2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnBhbmVsLmlzQ29sbGFwc2VkO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnBhbmVsLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJzdGF0ZVwiLFxuICAgICAgZnVuY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgc2VsZi5pc0NvbGxhcHNlZCA9IHNlbGYucGFuZWwuaXNDb2xsYXBzZWQ7XG4gICAgICB9LFxuICAgICAgXCJidXR0b25cIlxuICAgICk7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnBhbmVsLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJzdGF0ZVwiLCBcImJ1dHRvblwiKTtcbiAgfVxuICByZW1vdmVQYW5lbENsaWNrKHBhbmVsOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVBhbmVsVUkocGFuZWwpO1xuICAgIH1cbiAgfVxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZTtcbiAgfVxuICBzZXQgaXNDb2xsYXBzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdmFsO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXBhbmVsZHluYW1pY3JlbW92ZVwiLCBQYW5lbER5bmFtaWNSZW1vdmUpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUmVtb3ZlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQcm9ncmVzcyBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlICsgXCIlXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1wYWdlc1wiLCBQcm9ncmVzcyk7XG5WdWUuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtcXVlc3Rpb25zXCIsIFByb2dyZXNzKTtcblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1jb3JyZWN0UXVlc3Rpb25zXCIsIFByb2dyZXNzKTtcblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1yZXF1aXJlZFF1ZXN0aW9uc1wiLCBQcm9ncmVzcyk7XG5leHBvcnQgZGVmYXVsdCBQcm9ncmVzcztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0J1dHRvbnMgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHB1YmxpYyBoYXNTY3JvbGxlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsOiBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbDtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSBuZXcgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwodGhpcy5zdXJ2ZXkpO1xuICB9XG4gIG1vdW50ZWQoKSB7XG4gICAgbGV0IGxpc3RDb250YWluZXJFbGVtZW50OiBhbnkgPSB0aGlzLiRyZWZzW1wicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiXTtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5oYXNTY3JvbGxlciA9XG4gICAgICAgIGxpc3RDb250YWluZXJFbGVtZW50LnNjcm9sbFdpZHRoID4gbGlzdENvbnRhaW5lckVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBwdWJsaWMgaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCk7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KTtcbiAgfVxuICBwdWJsaWMgY2xpY2tMaXN0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5jbGlja0xpc3RFbGVtZW50KGluZGV4KTtcbiAgfVxuICBwdWJsaWMgZ2V0U2Nyb2xsQnV0dG9uQ3NzKGhhc1Njcm9sbGVyOiBib29sZWFuLCBpc0xlZnRTY3JvbGw6IGJvb2xlYW4pOiBhbnkge1xuICAgIGxldCBzY3JvbGxDc3M6IHN0cmluZyA9IGlzTGVmdFNjcm9sbFxuICAgICAgPyB0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnRcbiAgICAgIDogdGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDtcbiAgICBpZiAoIWhhc1Njcm9sbGVyKVxuICAgICAgc2Nyb2xsQ3NzICs9IFwiIFwiICsgdGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW47XG4gICAgcmV0dXJuIHNjcm9sbENzcztcbiAgfVxuICBwdWJsaWMgY2xpY2tTY3JvbGxCdXR0b24oaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IGxpc3RDb250YWluZXJFbGVtZW50OiBhbnkgPSB0aGlzLiRyZWZzW1wicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiXTtcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlU2Nyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVTY3JvbGxlcik7XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtYnV0dG9uc1wiLCBQcm9ncmVzc0J1dHRvbnMpO1xuZXhwb3J0IGRlZmF1bHQgUHJvZ3Jlc3NCdXR0b25zO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhZGlvZ3JvdXAgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbD4ge1xuICBnZXQgY2hvaWNlc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aCAtIDE7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYWRpb2dyb3VwXCIsIFJhZGlvZ3JvdXApO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9ncm91cDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgSXRlbVZhbHVlLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFkaW9ncm91cEl0ZW0gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogYW55O1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBpbmRleDogYW55O1xuICBAUHJvcCgpIGhpZGVMYWJlbDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG4gIGdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCBSYWRpb2dyb3VwSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYWRpb2dyb3VwSXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhbmtpbmdJdGVtIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBpbmRleDogbnVtYmVyO1xuICBAUHJvcCgpIHRleHQ6IHN0cmluZztcbiAgQFByb3AoKSBoYW5kbGVLZXlkb3duOiAoKT0+e307XG4gIEBQcm9wKCkgY3NzQ2xhc3NlczogYW55XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmctaXRlbVwiLCBSYW5raW5nSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nSXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFua2luZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmFua2luZ01vZGVsPiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmdcIiwgUmFua2luZyk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhdGluZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgZ2V0Um9vdENsYXNzKHF1ZXN0aW9uOiBRdWVzdGlvblJhdGluZ01vZGVsKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHJldHVybiBjbGFzc2VzLnJvb3QgKyBcIiBcIiArIGNsYXNzZXMuZGlzYWJsZWQ7XG4gICAgcmV0dXJuIGNsYXNzZXMucm9vdDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYXRpbmdcIiwgUmF0aW5nKTtcbmV4cG9ydCBkZWZhdWx0IFJhdGluZztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSwgUGFuZWxNb2RlbCwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVnVlU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBSb3cgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgaWYgKCEhdGhpcy5yb3cpIHtcbiAgICAgIGlmICghdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICAgIHZhciByb3dDb250YWluZXJEaXYgPSB0aGlzLiRlbDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdiBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAoISF0aGlzLnJvdykge1xuICAgICAgdGhpcy5yb3cuaXNOZWVkUmVuZGVyID0gIXRoaXMucm93LmlzTGF6eVJlbmRlcmluZztcbiAgICB9XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcm93XCIsIFJvdyk7XG5leHBvcnQgZGVmYXVsdCBSb3c7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTaWduYXR1cmVQYWQgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1zaWduYXR1cmVwYWRcIiwgU2lnbmF0dXJlUGFkKTtcbmV4cG9ydCBkZWZhdWx0IFNpZ25hdHVyZVBhZDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmdFZGl0b3IgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG5cbiAgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5sb2NTdHJpbmcudGV4dCA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQ7XG4gIH07XG4gIG9uQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH07XG59XG5cblZ1ZS5jb21wb25lbnQoTG9jYWxpemFibGVTdHJpbmcuZWRpdGFibGVSZW5kZXJlciwgU3VydmV5U3RyaW5nRWRpdG9yKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleVN0cmluZ0VkaXRvcjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmdWaWV3ZXIgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG59XG5cblZ1ZS5jb21wb25lbnQoTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyLCBTdXJ2ZXlTdHJpbmdWaWV3ZXIpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5U3RyaW5nVmlld2VyO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmcgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktc3RyaW5nXCIsIFN1cnZleVN0cmluZyk7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlTdHJpbmc7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFZ1ZVN1cnZleU1vZGVsIGFzIFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5TW9kZWxcIjtcbmltcG9ydCB7IFN0eWxlc01hbmFnZXIsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXkgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWU6IHN0cmluZztcbiAgY3VycmVudFBhZ2VJZDogbnVtYmVyID0gMTtcbiAgZ2V0IHBhZ2VJZCgpIHtcbiAgICByZXR1cm4gXCJwYWdlXCIgKyB0aGlzLmN1cnJlbnRQYWdlSWQudG9TdHJpbmcoKTtcbiAgfVxuICBnZXQgbmF2SWQoKSB7XG4gICAgcmV0dXJuIFwibmF2XCIgKyB0aGlzLmN1cnJlbnRQYWdlSWQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGZvcmNlVXBkYXRlKCkge1xuICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZUlkKys7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgQFdhdGNoKFwic3VydmV5XCIpXG4gIG9uUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uQ3JlYXRlZCgpO1xuICAgIHRoaXMuc3VydmV5T25Nb3VudGVkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHtcbiAgICB0aGlzLnN1cnZleU9uTW91bnRlZCgpO1xuICB9XG4gIHByaXZhdGUgc3VydmV5T25Nb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICBWdWUuc2V0KHRoaXMuc3VydmV5LCBcImN1cnJlbnRQYWdlXCIsIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLnN1cnZleS5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUlkKys7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJZCsrO1xuICAgIH0pO1xuICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgIGlmIChlbCkgdGhpcy5zdXJ2ZXkuZG9BZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSB0aGlzLmZvcmNlVXBkYXRlO1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuc3VydmV5LnN0b3BUaW1lcigpO1xuICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5LnRpdGxlICYmIHRoaXMuc3VydmV5LnNob3dUaXRsZTtcbiAgfVxuICBnZXQgaGFzQ29tcGxldGVkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT09IFwiY29tcGxldGVkXCI7XG4gIH1cbiAgZ2V0IGNzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG4gIGdldENvbXBsZXRlZFBhZ2VDbGFzc2VzKCkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICByZXR1cm4gY3NzLmJvZHkgKyBcIiBcIiArIGNzcy5jb21wbGV0ZWRQYWdlO1xuICB9XG4gIGdldFByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0NvbXBsZXRlZFBhZ2UpIHJldHVybiBcIlwiO1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlID0gdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlO1xuICB9XG4gIGdldENvbXBsZXRlZFN0YXRlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jc3Muc2F2ZURhdGFbdGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVdO1xuICB9XG4gIHN0YXJ0KCkge1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0KCk7XG4gIH1cbiAgZG9UcnlTYXZlQWdhaW4oKSB7XG4gICAgdGhpcy5zdXJ2ZXkuZG9Db21wbGV0ZSgpO1xuICB9XG59XG5cbi8vIFRPRE86IG1ha2UgdGhpcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB2aWEgc3VydmV5Q3NzIGluIGFsbCBleGFtcGxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleSwgXCJjc3NUeXBlXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKG5ld1R5cGUpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUobmV3VHlwZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG59KTtcblxuVnVlLmNvbXBvbmVudChcInN1cnZleVwiLCBTdXJ2ZXkpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25UZXh0TW9kZWw+IHtcbiAgY2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uLmlucHV0V2lkdGgpIHtcbiAgICAgIHN0eWxlLndpZHRoID0gdGhpcy5xdWVzdGlvbi5pbnB1dFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktdGV4dFwiLCBRdWVzdGlvblRleHQpO1xuZXhwb3J0IGRlZmF1bHQgUXVlc3Rpb25UZXh0O1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBUaW1lclBhbmVsIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBAUHJvcCgpIGNzczogYW55O1xuICBnZXQgdGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkudGltZXJJbmZvVGV4dDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS10aW1lcnBhbmVsXCIsIFRpbWVyUGFuZWwpO1xuZXhwb3J0IGRlZmF1bHQgVGltZXJQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgVGl0bGVDb250ZW50IGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBlbGVtZW50OiBJRWxlbWVudDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcXVlc3Rpb24tdGl0bGUtY29udGVudFwiLCBUaXRsZUNvbnRlbnQpO1xuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgV2luZG93IGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSB3aW5kb3c6IFN1cnZleVdpbmRvd01vZGVsO1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgQFByb3AoKSBpc2V4cGFuZGVkOiBib29sZWFuO1xuICBAUHJvcCgpIGNsb3NlT25Db21wbGV0ZVRpbWVvdXQ6IG51bWJlcjtcblxuICBzdXJ2ZXlXaW5kb3c6IFN1cnZleVdpbmRvd01vZGVsO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0aGlzLndpbmRvdykge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cgPSB0aGlzLndpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cgPSBuZXcgVnVlU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc2V4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSB0aGlzLmlzZXhwYW5kZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9IHRoaXMuaXNFeHBhbmRlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN1cnZleVdpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gdGhpcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVdpbmRvdy5pc1Nob3dpbmcgPSB0cnVlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnN1cnZleVdpbmRvdy5jbG9zZVdpbmRvd09uQ29tcGxldGVDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZG9IaWRlKCk7XG4gICAgfTtcbiAgfVxuICBnZXQgd2luZG93U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuc3VydmV5O1xuICB9XG4gIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICB9XG4gIGdldCBleHBhbmRlZENzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZFxuICAgICAgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkNvbGxhcHNlZFxuICAgICAgOiB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkV4cGFuZGVkO1xuICB9XG4gIGdldCBpc0V4cGFuZGVkU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkO1xuICB9XG4gIHNldCBpc0V4cGFuZGVkU3VydmV5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSB2YWw7XG4gIH1cbiAgZG9FeHBhbmQoKSB7XG4gICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9ICF0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkO1xuICB9XG4gIGRvSGlkZSgpIHtcbiAgICBWdWUuc2V0KHRoaXMuc3VydmV5V2luZG93LCBcImlzU2hvd2luZ1wiLCBmYWxzZSk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktd2luZG93XCIsIFdpbmRvdyk7XG5leHBvcnQgZGVmYXVsdCBXaW5kb3c7XG4iLCIvKipcbiAgKiB2dWUtY2xhc3MtY29tcG9uZW50IHY3LjIuNlxuICAqIChjKSAyMDE1LXByZXNlbnQgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxuLy8gVGhlIHJhdGlvbmFsIGJlaGluZCB0aGUgdmVyYm9zZSBSZWZsZWN0LWZlYXR1cmUgY2hlY2sgYmVsb3cgaXMgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgcG9seWZpbGxzXG4vLyB3aGljaCBhZGQgYW4gaW1wbGVtZW50YXRpb24gZm9yIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEgYnV0IG5vdCBmb3IgUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMuXG4vLyBXaXRob3V0IHRoaXMgY2hlY2sgY29uc3VtZXJzIHdpbGwgZW5jb3VudGVyIGhhcmQgdG8gdHJhY2sgZG93biBydW50aW1lIGVycm9ycy5cbmZ1bmN0aW9uIHJlZmxlY3Rpb25Jc1N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBSZWZsZWN0LmRlZmluZU1ldGFkYXRhICYmIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzO1xufVxuZnVuY3Rpb24gY29weVJlZmxlY3Rpb25NZXRhZGF0YSh0bywgZnJvbSkge1xuICBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20pO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZm9yd2FyZE1ldGFkYXRhKHRvLnByb3RvdHlwZSwgZnJvbS5wcm90b3R5cGUsIGtleSk7XG4gIH0pO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20sIGtleSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20sIHByb3BlcnR5S2V5KSB7XG4gIHZhciBtZXRhS2V5cyA9IHByb3BlcnR5S2V5ID8gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoZnJvbSwgcHJvcGVydHlLZXkpIDogUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoZnJvbSk7XG4gIG1ldGFLZXlzLmZvckVhY2goZnVuY3Rpb24gKG1ldGFLZXkpIHtcbiAgICB2YXIgbWV0YWRhdGEgPSBwcm9wZXJ0eUtleSA/IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEobWV0YUtleSwgZnJvbSwgcHJvcGVydHlLZXkpIDogUmVmbGVjdC5nZXRPd25NZXRhZGF0YShtZXRhS2V5LCBmcm9tKTtcblxuICAgIGlmIChwcm9wZXJ0eUtleSkge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhS2V5LCBtZXRhZGF0YSwgdG8sIHByb3BlcnR5S2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhS2V5LCBtZXRhZGF0YSwgdG8pO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBmYWtlQXJyYXkgPSB7XG4gIF9fcHJvdG9fXzogW11cbn07XG52YXIgaGFzUHJvdG8gPSBmYWtlQXJyYXkgaW5zdGFuY2VvZiBBcnJheTtcbmZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcihmYWN0b3J5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGluZGV4KSB7XG4gICAgdmFyIEN0b3IgPSB0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nID8gdGFyZ2V0IDogdGFyZ2V0LmNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKCFDdG9yLl9fZGVjb3JhdG9yc19fKSB7XG4gICAgICBDdG9yLl9fZGVjb3JhdG9yc19fID0gW107XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIEN0b3IuX19kZWNvcmF0b3JzX18ucHVzaChmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGZhY3Rvcnkob3B0aW9ucywga2V5LCBpbmRleCk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBtaXhpbnMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBDdG9ycyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBDdG9yc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBWdWUuZXh0ZW5kKHtcbiAgICBtaXhpbnM6IEN0b3JzXG4gIH0pO1xufVxuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHZhbHVlKTtcblxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlICE9PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gd2FybihtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLndhcm4oJ1t2dWUtY2xhc3MtY29tcG9uZW50XSAnICsgbWVzc2FnZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tQ29uc3RydWN0b3Iodm0sIENvbXBvbmVudCkge1xuICAvLyBvdmVycmlkZSBfaW5pdCB0byBwcmV2ZW50IHRvIGluaXQgYXMgVnVlIGluc3RhbmNlXG4gIHZhciBvcmlnaW5hbEluaXQgPSBDb21wb25lbnQucHJvdG90eXBlLl9pbml0O1xuXG4gIENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vIHByb3h5IHRvIGFjdHVhbCB2bVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModm0pOyAvLyAyLjIuMCBjb21wYXQgKHByb3BzIGFyZSBubyBsb25nZXIgZXhwb3NlZCBhcyBzZWxmIHByb3BlcnRpZXMpXG5cbiAgICBpZiAodm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICBpZiAoIXZtLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdm1ba2V5XTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgICB2bVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIHNob3VsZCBiZSBhY3F1aXJlZCBjbGFzcyBwcm9wZXJ0eSB2YWx1ZXNcblxuXG4gIHZhciBkYXRhID0gbmV3IENvbXBvbmVudCgpOyAvLyByZXN0b3JlIG9yaWdpbmFsIF9pbml0IHRvIGF2b2lkIG1lbW9yeSBsZWFrICgjMjA5KVxuXG4gIENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQgPSBvcmlnaW5hbEluaXQ7IC8vIGNyZWF0ZSBwbGFpbiBkYXRhIG9iamVjdFxuXG4gIHZhciBwbGFpbkRhdGEgPSB7fTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwbGFpbkRhdGFba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCEoQ29tcG9uZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIFZ1ZSkgJiYgT2JqZWN0LmtleXMocGxhaW5EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB3YXJuKCdDb21wb25lbnQgY2xhc3MgbXVzdCBpbmhlcml0IFZ1ZSBvciBpdHMgZGVzY2VuZGFudCBjbGFzcyAnICsgJ3doZW4gY2xhc3MgcHJvcGVydHkgaXMgdXNlZC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGxhaW5EYXRhO1xufVxuXG52YXIgJGludGVybmFsSG9va3MgPSBbJ2RhdGEnLCAnYmVmb3JlQ3JlYXRlJywgJ2NyZWF0ZWQnLCAnYmVmb3JlTW91bnQnLCAnbW91bnRlZCcsICdiZWZvcmVEZXN0cm95JywgJ2Rlc3Ryb3llZCcsICdiZWZvcmVVcGRhdGUnLCAndXBkYXRlZCcsICdhY3RpdmF0ZWQnLCAnZGVhY3RpdmF0ZWQnLCAncmVuZGVyJywgJ2Vycm9yQ2FwdHVyZWQnLCAnc2VydmVyUHJlZmV0Y2gnIC8vIDIuNlxuXTtcbmZ1bmN0aW9uIGNvbXBvbmVudEZhY3RvcnkoQ29tcG9uZW50KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IENvbXBvbmVudC5fY29tcG9uZW50VGFnIHx8IENvbXBvbmVudC5uYW1lOyAvLyBwcm90b3R5cGUgcHJvcHMuXG5cbiAgdmFyIHByb3RvID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGhvb2tzXG5cblxuICAgIGlmICgkaW50ZXJuYWxIb29rcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgb3B0aW9uc1trZXldID0gcHJvdG9ba2V5XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG5cbiAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAvLyBtZXRob2RzXG4gICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKG9wdGlvbnMubWV0aG9kcyB8fCAob3B0aW9ucy5tZXRob2RzID0ge30pKVtrZXldID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHR5cGVzY3JpcHQgZGVjb3JhdGVkIGRhdGFcbiAgICAgICAgKG9wdGlvbnMubWl4aW5zIHx8IChvcHRpb25zLm1peGlucyA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZ2V0IHx8IGRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gICAgICAob3B0aW9ucy5jb21wdXRlZCB8fCAob3B0aW9ucy5jb21wdXRlZCA9IHt9KSlba2V5XSA9IHtcbiAgICAgICAgZ2V0OiBkZXNjcmlwdG9yLmdldCxcbiAgICAgICAgc2V0OiBkZXNjcmlwdG9yLnNldFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuICAob3B0aW9ucy5taXhpbnMgfHwgKG9wdGlvbnMubWl4aW5zID0gW10pKS5wdXNoKHtcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3REYXRhRnJvbUNvbnN0cnVjdG9yKHRoaXMsIENvbXBvbmVudCk7XG4gICAgfVxuICB9KTsgLy8gZGVjb3JhdGUgb3B0aW9uc1xuXG4gIHZhciBkZWNvcmF0b3JzID0gQ29tcG9uZW50Ll9fZGVjb3JhdG9yc19fO1xuXG4gIGlmIChkZWNvcmF0b3JzKSB7XG4gICAgZGVjb3JhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZuKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGRlbGV0ZSBDb21wb25lbnQuX19kZWNvcmF0b3JzX187XG4gIH0gLy8gZmluZCBzdXBlclxuXG5cbiAgdmFyIHN1cGVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29tcG9uZW50LnByb3RvdHlwZSk7XG4gIHZhciBTdXBlciA9IHN1cGVyUHJvdG8gaW5zdGFuY2VvZiBWdWUgPyBzdXBlclByb3RvLmNvbnN0cnVjdG9yIDogVnVlO1xuICB2YXIgRXh0ZW5kZWQgPSBTdXBlci5leHRlbmQob3B0aW9ucyk7XG4gIGZvcndhcmRTdGF0aWNNZW1iZXJzKEV4dGVuZGVkLCBDb21wb25lbnQsIFN1cGVyKTtcblxuICBpZiAocmVmbGVjdGlvbklzU3VwcG9ydGVkKCkpIHtcbiAgICBjb3B5UmVmbGVjdGlvbk1ldGFkYXRhKEV4dGVuZGVkLCBDb21wb25lbnQpO1xuICB9XG5cbiAgcmV0dXJuIEV4dGVuZGVkO1xufVxudmFyIHJlc2VydmVkUHJvcGVydHlOYW1lcyA9IFsvLyBVbmlxdWUgaWRcbidjaWQnLCAvLyBTdXBlciBWdWUgY29uc3RydWN0b3JcbidzdXBlcicsIC8vIENvbXBvbmVudCBvcHRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBjb21wb25lbnRcbidvcHRpb25zJywgJ3N1cGVyT3B0aW9ucycsICdleHRlbmRPcHRpb25zJywgJ3NlYWxlZE9wdGlvbnMnLCAvLyBQcml2YXRlIGFzc2V0c1xuJ2NvbXBvbmVudCcsICdkaXJlY3RpdmUnLCAnZmlsdGVyJ107XG52YXIgc2hvdWxkSWdub3JlID0ge1xuICBwcm90b3R5cGU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBjYWxsZXI6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGZvcndhcmRTdGF0aWNNZW1iZXJzKEV4dGVuZGVkLCBPcmlnaW5hbCwgU3VwZXIpIHtcbiAgLy8gV2UgaGF2ZSB0byB1c2UgZ2V0T3duUHJvcGVydHlOYW1lcyBzaW5jZSBCYWJlbCByZWdpc3RlcnMgbWV0aG9kcyBhcyBub24tZW51bWVyYWJsZVxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPcmlnaW5hbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgLy8gU2tpcCB0aGUgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgYmUgb3ZlcndyaXR0ZW5cbiAgICBpZiAoc2hvdWxkSWdub3JlW2tleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNvbWUgYnJvd3NlcnMgZG9lcyBub3QgYWxsb3cgcmVjb25maWd1cmUgYnVpbHQtaW4gcHJvcGVydGllc1xuXG5cbiAgICB2YXIgZXh0ZW5kZWREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeHRlbmRlZCwga2V5KTtcblxuICAgIGlmIChleHRlbmRlZERlc2NyaXB0b3IgJiYgIWV4dGVuZGVkRGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT3JpZ2luYWwsIGtleSk7IC8vIElmIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IHN1cHBvcnQgYF9fcHJvdG9fX2Agb3IgaXRzIGZhbWlseSAoSUUgPD0gMTApLFxuICAgIC8vIHRoZSBzdWIgY2xhc3MgcHJvcGVydGllcyBtYXkgYmUgaW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSB0aGUgc3VwZXIgY2xhc3MgaW4gVHlwZVNjcmlwdC5cbiAgICAvLyBXZSBuZWVkIHRvIGV4Y2x1ZGUgc3VjaCBwcm9wZXJ0aWVzIHRvIHByZXZlbnQgdG8gb3ZlcndyaXRlXG4gICAgLy8gdGhlIGNvbXBvbmVudCBvcHRpb25zIG9iamVjdCB3aGljaCBzdG9yZWQgb24gdGhlIGV4dGVuZGVkIGNvbnN0cnVjdG9yIChTZWUgIzE5MikuXG4gICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlZCB2YWx1ZSAob2JqZWN0IG9yIGZ1bmN0aW9uKSxcbiAgICAvLyB3ZSBjYW4gY2hlY2sgZXF1YWxpdHkgb2YgdGhlbSBhbmQgZXhjbHVkZSBpdCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICAgIC8vIElmIGl0IGlzIGEgcHJpbWl0aXZlIHZhbHVlLCBpdCB3aWxsIGJlIGZvcndhcmRlZCBmb3Igc2FmZXR5LlxuXG4gICAgaWYgKCFoYXNQcm90bykge1xuICAgICAgLy8gT25seSBgY2lkYCBpcyBleHBsaWNpdGx5IGV4bHVkZWQgZnJvbSBwcm9wZXJ0eSBmb3J3YXJkaW5nXG4gICAgICAvLyBiZWNhdXNlIHdlIGNhbm5vdCBkZXRlY3Qgd2hldGhlciBpdCBpcyBhIGluaGVyaXRlZCBwcm9wZXJ0eSBvciBub3RcbiAgICAgIC8vIG9uIHRoZSBubyBgX19wcm90b19fYCBlbnZpcm9ubWVudCBldmVuIHRob3VnaCB0aGUgcHJvcGVydHkgaXMgcmVzZXJ2ZWQuXG4gICAgICBpZiAoa2V5ID09PSAnY2lkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzdXBlckRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN1cGVyLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzUHJpbWl0aXZlKGRlc2NyaXB0b3IudmFsdWUpICYmIHN1cGVyRGVzY3JpcHRvciAmJiBzdXBlckRlc2NyaXB0b3IudmFsdWUgPT09IGRlc2NyaXB0b3IudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gLy8gV2FybiBpZiB0aGUgdXNlcnMgbWFudWFsbHkgZGVjbGFyZSByZXNlcnZlZCBwcm9wZXJ0aWVzXG5cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHJlc2VydmVkUHJvcGVydHlOYW1lcy5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgd2FybihcIlN0YXRpYyBwcm9wZXJ0eSBuYW1lICdcIi5jb25jYXQoa2V5LCBcIicgZGVjbGFyZWQgb24gY2xhc3MgJ1wiKS5jb25jYXQoT3JpZ2luYWwubmFtZSwgXCInIFwiKSArICdjb25mbGljdHMgd2l0aCByZXNlcnZlZCBwcm9wZXJ0eSBuYW1lIG9mIFZ1ZSBpbnRlcm5hbC4gJyArICdJdCBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgY29tcG9uZW50LiBDb25zaWRlciByZW5hbWluZyB0aGUgcHJvcGVydHkuJyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4dGVuZGVkLCBrZXksIGRlc2NyaXB0b3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudEZhY3Rvcnkob3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbXBvbmVudCkge1xuICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCwgb3B0aW9ucyk7XG4gIH07XG59XG5cbkNvbXBvbmVudC5yZWdpc3Rlckhvb2tzID0gZnVuY3Rpb24gcmVnaXN0ZXJIb29rcyhrZXlzKSB7XG4gICRpbnRlcm5hbEhvb2tzLnB1c2guYXBwbHkoJGludGVybmFsSG9va3MsIF90b0NvbnN1bWFibGVBcnJheShrZXlzKSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQ7XG5leHBvcnQgeyBjcmVhdGVEZWNvcmF0b3IsIG1peGlucyB9O1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5pdGVtQ2xhc3MgfSwgW1xuICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5jaGVja2VkVmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2wsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCIgOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogX3ZtLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUpXG4gICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLCBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlKSA+IC0xXG4gICAgICAgICAgICA6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgJCRpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImNoZWNrZWRWYWx1ZVwiLCAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgXCJjaGVja2VkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgJCRhLnNsaWNlKDAsICQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImNoZWNrZWRWYWx1ZVwiLCAkJGMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudW5jaGVja2VkUGF0aCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgeDogXCI1XCIsIHk6IFwiMTBcIiwgd2lkdGg6IFwiMTRcIiwgaGVpZ2h0OiBcIjRcIiB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hlY2tlZFBhdGgsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOlxuICAgICAgICAgICAgICAgICAgXCIxOSwxMCAxNCwxMCAxNCw1IDEwLDUgMTAsMTAgNSwxMCA1LDE0IDEwLDE0IDEwLDE5IDE0LDE5IDE0LDE0IDE5LDE0IFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbmRldGVybWluYXRlUGF0aCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBkOlxuICAgICAgICAgICAgICAgICAgXCJNMjIsMEgyQzAuOSwwLDAsMC45LDAsMnYyMGMwLDEuMSwwLjksMiwyLDJoMjBjMS4xLDAsMi0wLjksMi0yVjJDMjQsMC45LDIzLjEsMCwyMiwweiBNMjEsMThMNiwzaDE1VjE4eiBNMyw2bDE1LDE1SDNWNnpcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnRpdGxlTG9jYXRpb24gPT09IFwiaGlkZGVuXCJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubGFiZWwgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NEaXNwbGF5TGFiZWwgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0uaXRlbUNsYXNzIH0sIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uY2hlY2tlZFZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IF92bS5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlKVxuICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSwgX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSkgPiAtMVxuICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICQkaSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJjaGVja2VkVmFsdWVcIiwgJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIFwiY2hlY2tlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJjaGVja2VkVmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5nZXRMYWJlbENsYXNzKGZhbHNlKSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnN3aXRjaCxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uU3dpdGNoQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zbGlkZXIgfSldXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0TGFiZWxDbGFzcyh0cnVlKSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QsIGF0dHJzOiB7IHJvbGU6IFwiZ3JvdXBcIiB9IH0sXG4gICAgW1xuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBfYyhcInN2LWJ1dHRvbi1ncm91cC1pdGVtXCIsIHtcbiAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgYXR0cnM6IHsgaXRlbTogaXRlbSwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgaW5kZXg6IGluZGV4IH1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MubGFiZWwsXG4gICAgICBhdHRyczogeyB0aXRsZTogX3ZtLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MuY29udHJvbCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgbmFtZTogX3ZtLm1vZGVsLm5hbWUsXG4gICAgICAgICAgaWQ6IF92bS5tb2RlbC5pZCxcbiAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLm1vZGVsLmlzUmVxdWlyZWQsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLm1vZGVsLmhhc0Vycm9ycyxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLm1vZGVsLmRlc2NyaWJlQnksXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5tb2RlbC5yZWFkT25seVxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwudmFsdWUsXG4gICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKF92bS5tb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdm0ubW9kZWwudmFsdWUpXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICBcInJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnZhbHVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBjbGFzczogX3ZtLm1vZGVsLmNzcy5kZWNvcmF0b3IgfSxcbiAgICAgICAgW1xuICAgICAgICAgICEhX3ZtLm1vZGVsLmljb25OYW1lXG4gICAgICAgICAgICA/IF9jKFwic3Ytc3ZnLWljb25cIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuY3NzLmljb24sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGljb25OYW1lOiBfdm0ubW9kZWwuaWNvbk5hbWUsXG4gICAgICAgICAgICAgICAgICBzaXplOiBfdm0ubW9kZWwuaWNvblNpemVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLm1vZGVsLnNob3dDYXB0aW9uXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5tb2RlbC5jc3MuY2FwdGlvbiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLm1vZGVsLmNhcHRpb24gfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImZpZWxkc2V0XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFfdm0ucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uY29sdW1ucywgZnVuY3Rpb24oY29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKSB9LFxuICAgICAgICAgICAgICBfdm0uX2woY29sdW1uLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBjb2xJbmRleCArIGluZGV4XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3MoX3ZtLml0ZW0pIH0sIFtcbiAgICAgICAgX3ZtLml0ZW0gPT0gX3ZtLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzQWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Db250cm9sLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB8fCAhX3ZtLml0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLml0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLmlzQWxsU2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0uaXNBbGxTZWxlY3RlZCwgX3ZtLmlzQWxsU2VsZWN0ZWQpID4gLTFcbiAgICAgICAgICAgICAgICAgIDogX3ZtLmlzQWxsU2VsZWN0ZWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0uaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmIChfdm0uaXNBbGxTZWxlY3RlZCA9ICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLmlzQWxsU2VsZWN0ZWQgPSAkJGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsICQkaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaXNBbGxTZWxlY3RlZCA9ICQkY1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uaXRlbSAhPSBfdm0ucXVlc3Rpb24uc2VsZWN0QWxsSXRlbVxuICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgX3ZtLmluZGV4LFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFfdm0uaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0uaXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLml0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdm0uaXRlbS52YWx1ZSkgPiAtMVxuICAgICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyZWRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGEuY29uY2F0KFskJHZdKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRhLnNsaWNlKDAsICQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInJlbmRlcmVkVmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3IsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcInBhdGhcIiwgeyBhdHRyczogeyBkOiBcIk01LDEzbDItMmwzLDNsNy03bDIsMmwtOSw5TDUsMTN6XCIgfSB9KV1cbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgIV92bS5oaWRlTGFiZWxcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5pdGVtLmxvY1RleHQudGV4dCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5pdGVtLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS52YWx1ZSA9PSBfdm0ucXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaGFzT3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIHF1ZXN0aW9uLmhhc090aGVyICYmIHF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiYgcXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXFxuICAgIFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKVxuICAgICAgPyBfYyhcInRleHRhcmVhXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdFxuICAgICAgICAgICAgOiBcInBhbmVsLWNvbW1lbnQtcm9vdFwiLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIGNvbHM6IF92bS5xdWVzdGlvbi5jb2xzLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICByb3dzOiBfdm0ucXVlc3Rpb24ucm93cyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcixcbiAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnZhbHVlIH0sXG4gICAgICAgICAgb246IHsgY2hhbmdlOiBfdm0uY2hhbmdlLCBrZXl1cDogX3ZtLmtleXVwIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi52YWx1ZSkpXSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICB7IFwic3YtYWN0aW9uLWJhci1pdGVtLS1hY3RpdmVcIjogX3ZtLml0ZW0uaXNBY3RpdmUgfSxcbiAgICAgICAgX3ZtLml0ZW0uaW5uZXJDc3NcbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICBkaXNhYmxlZDogX3ZtLml0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmIF92bS5pdGVtLmVuYWJsZWQsXG4gICAgICAgIHRpdGxlOiBfdm0uaXRlbS50b29sdGlwIHx8IF92bS5pdGVtLnRpdGxlXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF92bS5pdGVtLmFjdGlvbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5pdGVtLmljb25OYW1lXG4gICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX2ljb25cIixcbiAgICAgICAgICAgIGF0dHJzOiB7IGljb25OYW1lOiBfdm0uaXRlbS5pY29uTmFtZSwgc2l6ZTogMjQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLml0ZW0uc2hvd1RpdGxlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIF92bS5pdGVtLnNob3dUaXRsZSB8fFxuICAgICAgIV92bS5pdGVtLmljb25OYW1lXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtYWN0aW9uLWJhci1pdGVtX190aXRsZVwiLFxuICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgIFwic3YtYWN0aW9uLWJhci1pdGVtX190aXRsZS0td2l0aC1pY29uXCI6ICEhX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5pdGVtLnRpdGxlKSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3YtcG9wdXBcIiwgeyBhdHRyczogeyBtb2RlbDogX3ZtLml0ZW0ucG9wdXBNb2RlbCB9IH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICB7IFwic3YtYWN0aW9uLWJhci1pdGVtLS1hY3RpdmVcIjogX3ZtLml0ZW0uaXNBY3RpdmUgfSxcbiAgICAgICAgX3ZtLml0ZW0uaW5uZXJDc3NcbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBkaXNhYmxlZDogX3ZtLml0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICFfdm0uaXRlbS5lbmFibGVkLFxuICAgICAgICB0aXRsZTogX3ZtLml0ZW0udG9vbHRpcCB8fCBfdm0uaXRlbS50aXRsZSxcbiAgICAgICAgdGFiaW5kZXg6IF92bS5pdGVtLmRpc2FibGVUYWJTdG9wID8gLTEgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3ZtLml0ZW0uYWN0aW9uKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItaXRlbV9faWNvblwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IF92bS5pdGVtLmljb25OYW1lLCBzaXplOiAyNCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS5zaG93VGl0bGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgX3ZtLml0ZW0uc2hvd1RpdGxlIHx8XG4gICAgICAhX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlLS13aXRoLWljb25cIjogISFfdm0uaXRlbS5pY29uTmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLml0ZW0udGl0bGUpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gICAgY2xhc3M6IF92bS5pbm5lckNzc1xuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLm1vZGVsLmhhc0l0ZW1zXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJjb250YWluZXJcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyXCIsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3ZtLl9sKF92bS5tb2RlbC5hY3Rpb25zLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF9jKFwic3YtYWN0aW9uXCIsIHsga2V5OiBpdGVtLmlkLCBhdHRyczogeyBpdGVtOiBpdGVtIH0gfSlcbiAgICAgICAgfSksXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInNwYW5cIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52aXNpYmxlIHx8IF92bS5pdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHByZXNzaW9uOiBcIml0ZW0udmlzaWJsZSB8fCBpdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZFwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb25cIixcbiAgICAgIGNsYXNzOiB7IFwic3YtYWN0aW9uLS1oaWRkZW5cIjogIV92bS5pdGVtLmlzVmlzaWJsZSB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uaXRlbS5uZWVkU2VwYXJhdG9yID8gX2MoXCJzdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiKSA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKF92bS5nZXRDb21wb25lbnROYW1lKCksIHtcbiAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICBhdHRyczogeyBpdGVtOiBfdm0uaXRlbSB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwic3VydmV5LXF1ZXN0aW9uLXRpdGxlLWNvbnRlbnRcIiwge1xuICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dJY29uLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93SWNvblwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLmdldEljb25Dc3MoX3ZtLmlzQ29sbGFwc2VkKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0YWJpbmRleDogXCIwXCIsXG4gICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5pc0NvbGxhcHNlZCA/IFwiZmFsc2VcIiA6IFwidHJ1ZVwiLFxuICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAhX3ZtLmlzQ29sbGFwc2VkID8gX3ZtLmVsZW1lbnQuY29udGVudElkIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgISRldmVudC50eXBlLmluZGV4T2YoXCJrZXlcIikgJiZcbiAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdm0uY2hhbmdlRXhwYW5kZWQuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ1bFwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWxpc3RcIixcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZG93bjogZnVuY3Rpb24oZGF0YSwgZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBfdm0uX2woX3ZtLm1vZGVsLml0ZW1zLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwibGlcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCBpdGVtLnZpc2libGUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXRlbS52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgaXRlbS52aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGtleTogaXRlbS5pZCxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1saXN0X19pdGVtXCIsXG4gICAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5tb2RlbC5nZXRJdGVtSW5kZW50KGl0ZW0pIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5tb2RlbC5zZWxlY3RJdGVtKGl0ZW0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgaXRlbS5pY29uTmFtZVxuICAgICAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1saXN0X19pdGVtLWljb25cIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwgc2l6ZTogMjQgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhpdGVtLnRpdGxlKSldKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3MoX3ZtLnJvdyksXG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLnF1ZXN0aW9uLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKF92bS5yb3cpXG4gICAgICAgICAgPyBcInRydWVcIlxuICAgICAgICAgIDogXCJmYWxzZVwiLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3ZtLnF1ZXN0aW9uLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKF92bS5yb3cpXG4gICAgICAgICAgPyBfdm0ucm93LmRldGFpbFBhbmVsSWRcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIF92bS5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW19jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxJY29uQ3NzKF92bS5yb3cpIH0pXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkRyYWcgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgY2xhc3M6XG4gICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgIFwiIFwiICtcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlLFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLnJlbW92ZVJvd1VJKF92bS5yb3cpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY1JlbW92ZVJvd1RleHQgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmUgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwuaXNWaXNpYmxlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWwuaXNWaXNpYmxlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwXCIsXG4gICAgICBjbGFzczogX3ZtLm1vZGVsLnN0eWxlQ2xhc3MsXG4gICAgICBhdHRyczogeyB0YWJpbmRleDogXCItMVwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBrZXlkb3duOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIF92bS5tb2RlbC5vbktleURvd24oZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdm0ubW9kZWwuY2xpY2tPdXRzaWRlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fY29udGFpbmVyXCIsXG4gICAgICAgICAgc3R5bGU6IHsgbGVmdDogX3ZtLm1vZGVsLmxlZnQsIHRvcDogX3ZtLm1vZGVsLnRvcCB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tJbnNpZGUgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5zaG93UG9pbnRlcixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLnNob3dQb2ludGVyXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19wb2ludGVyXCIsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBsZWZ0OiBfdm0ubW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgICAgICAgICB0b3A6IF92bS5tb2RlbC5wb2ludGVyVGFyZ2V0LnRvcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnRcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19oZWFkZXJcIiB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fY29udGVudFwiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5jb250ZW50Q29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0ubW9kZWwuaXNNb2RhbFxuICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtcG9wdXBfX2Zvb3RlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICBcInN2LXBvcHVwX19mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWNhbmNlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5jYW5jZWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5tb2RlbC5jYW5jZWxCdXR0b25UZXh0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdi1wb3B1cF9fZm9vdGVyLWl0ZW0gc3YtcG9wdXBfX2J1dHRvbiBzdi1wb3B1cF9fYnV0dG9uLS1jYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwuYXBwbHkoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5tb2RlbC5hcHBseUJ1dHRvblRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInN2Z1wiLFxuICAgIHsgcmVmOiBcInN2Z0ljb25cIiwgc3RhdGljQ2xhc3M6IFwic3Ytc3ZnLWljb25cIiwgYXR0cnM6IHsgcm9sZTogXCJpbWdcIiB9IH0sXG4gICAgW19jKFwidXNlXCIpXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwic3YtdGl0bGUtYWN0aW9uc1wiIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInN2LXRpdGxlLWFjdGlvbnNfX3RpdGxlXCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5lbGVtZW50LmlzUGFnZVxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmVsZW1lbnQubG9jVGl0bGUgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhZ2VcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktcXVlc3Rpb24tdGl0bGUtY29udGVudFwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtdGl0bGUtYWN0aW9uc19fYmFyXCIsXG4gICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0udG9vbGJhciB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInN1cnZleS1wYW5lbFwiLCB7XG4gICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jb250ZW50UGFuZWwsIGNzczogX3ZtLmNzcyB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhfdm0uZ2V0Q29tcG9uZW50TmFtZShfdm0uY29udGVudFF1ZXN0aW9uKSwge1xuICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNvbnRlbnRRdWVzdGlvbiwgY3NzOiBfdm0uY3NzIH1cbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX3ZtLmhhc0h0bWxcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5jdXN0b21IdG1sKSB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmhhc0RlZmF1bHRSZW5kZXJcbiAgICAgICAgPyBfYyhfdm0uY29tcG9uZW50TmFtZSwge1xuICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCksXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLnF1ZXN0aW9uLmF1dG9Db21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJCRzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsIGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvLnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd09wdGlvbnNDYXB0aW9uXG4gICAgICAgICAgICAgICAgICA/IF9jKFwib3B0aW9uXCIsIHsgZG9tUHJvcHM6IHsgdmFsdWU6IHVuZGVmaW5lZCB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICBcIm9wdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6ICFpdGVtLmlzRW5hYmxlZCB9LFxuICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBpdGVtLnZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoaXRlbS50ZXh0KSArIFwiXFxuICAgICAgXCIpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IFwiXCIsIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgXCJcXG4gICAgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICBfdm0uaXNPdGhlclNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24ub3RoZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uZGlzcGxheVZhbHVlXG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5pc090aGVyU2VsZWN0ZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcImlzT3RoZXJTZWxlY3RlZFwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLmdldFJvb3RDbGFzcyhfdm0uZWxlbWVudCkgfSxcbiAgICBbXG4gICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uZWxlbWVudC5oYXNUaXRsZU9uTGVmdFRvcFxuICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmVsZW1lbnQuaXNQYW5lbCB8fCAhX3ZtLmVsZW1lbnQuaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZWxlbWVudC5pc1BhbmVsIHx8ICFlbGVtZW50LmlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q29udGVudENsYXNzKF92bS5lbGVtZW50KVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5lbGVtZW50LCBsb2NhdGlvbjogXCJ0b3BcIiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmVsZW1lbnQpLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uZWxlbWVudC5oYXNDb21tZW50XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5mb3JtR3JvdXAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5jb21tZW50VGV4dCkpXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50Q2xhc3M6IF92bS5jc3MuY29tbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsICYmIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uZWxlbWVudCwgbG9jYXRpb246IFwiYm90dG9tXCIgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsICYmIF92bS5lbGVtZW50Lmhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMuZGVzY3JpcHRpb25VbmRlcklucHV0IH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uZWxlbWVudC5sb2NEZXNjcmlwdGlvbiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmVsZW1lbnQuaGFzVGl0bGVPbkJvdHRvbVxuICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLmdldEhlYWRlckNsYXNzKF92bS5lbGVtZW50KSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tUaXRsZUZ1bmN0aW9uIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5lbGVtZW50Lmhhc1RpdGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImg1XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0VGl0bGVDbGFzcyhfdm0uZWxlbWVudCksXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5lbGVtZW50LmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICBpZDogX3ZtLmVsZW1lbnQuYXJpYVRpdGxlSWQsXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5lbGVtZW50LnRpdGxlVGFiSW5kZXgsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5lbGVtZW50LnRpdGxlQXJpYUV4cGFuZGVkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5lbGVtZW50LnRvZ2dsZVN0YXRlKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5rZXl1cCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhfdm0uZWxlbWVudC5nZXRUaXRsZUNvbXBvbmVudE5hbWUoKSwge1xuICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5lbGVtZW50Lmhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uaGFzVmlzaWJsZUVycm9ycyxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Zpc2libGVFcnJvcnNcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5jbGFzc2VzLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJhbGVydFwiLFxuICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLFxuICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZXJyb3JzLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3IuaWNvblxuICAgICAgICAgICAgOiBcInBhbmVsLWVycm9yLWljb25cIixcbiAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLml0ZW1cbiAgICAgICAgICAgICAgOiBcInBhbmVsLWVycm9yLWl0ZW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogZXJyb3IubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy50ZXh0IH0sIFtcbiAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5kaXNwbGF5VmFsdWUpKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIG11bHRpcGxlOiBfdm0ucXVlc3Rpb24uYWxsb3dNdWx0aXBsZSA/IFwibXVsdGlwbGVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRpdGxlOiBfdm0ucXVlc3Rpb24uaW5wdXRUaXRsZSxcbiAgICAgICAgICAgIGFjY2VwdDogX3ZtLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmRvQ2hhbmdlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLmdldFBsYWNlaG9sZGVyQ2xhc3MoKSxcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH0sXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJmaWxlXCIsIGRpc2FibGVkOiBcIlwiLCBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnRpdGxlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlRGVjb3JhdG9yLFxuICAgICAgICBvbjogeyBkcm9wOiBfdm0ub25Ecm9wLCBkcmFnb3ZlcjogX3ZtLm9uRHJhZ092ZXIgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMud3JhcHBlciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGUgK1xuICAgICAgICAgICAgICAgIChfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBcIiBcIiArIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgOiBcIlwiKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIGZvcjogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9uXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbikpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNFbXB0eSgpXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ZpbGVDaG9zZW4gfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb24pKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdKVxuICAgICAgXVxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0NsZWFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikgKyBcIlxcbiAgXCIpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSwgZnVuY3Rpb24odmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcmV2aWV3XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YWwubmFtZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdmFsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZG9Eb3dubG9hZEZpbGUoJGV2ZW50LCB2YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3ModmFsLm5hbWUpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNhblByZXZpZXdJbWFnZSh2YWwpXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0OiBcIkZpbGUgcHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIHZhbC5uYW1lICYmICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbikpXVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNOCwyQzQuNywyLDIsNC43LDIsOHMyLjcsNiw2LDZzNi0yLjcsNi02UzExLjMsMiw4LDJ6IE0xMSwxMGwtMSwxTDgsOWwtMiwybC0xLTFsMi0yTDUsNmwxLTFsMiwybDItMmwxLDFMOSw4IEwxMSwxMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgdmFsLm5hbWVcbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb0Rvd25sb2FkRmlsZSgkZXZlbnQsIHZhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHZhbC5uYW1lKSldXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0NsZWFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikgKyBcIlxcbiAgXCIpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ucXVlc3Rpb24uaXNWaXNpYmxlXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250YWluZXIsXG4gICAgICAgICAgc3R5bGU6IF92bS5yb290U3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJoNFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYXNUaXRsZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFzVGl0bGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRUaXRsZVN0eWxlKCksXG4gICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2hhbmdlRXhwYW5kZWQgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NUaXRsZSB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd0ljb24sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5pY29uQ3NzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJmLXBhbmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHBhZGRpbmdMZWZ0OiBfdm0ucXVlc3Rpb24uaW5uZXJQYWRkaW5nTGVmdCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1mbG93cGFuZWxlbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBub2RlOiBfdm0ucm9vdE5vZGUsIHBhbmVsOiBfdm0ucXVlc3Rpb24sIGNzczogXCJjc3NcIiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3BhblwiLFxuICAgIHsgc3R5bGU6IF92bS5zdHlsZSB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIF92bS50YWdOYW1lLFxuICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5ub2RlcywgZnVuY3Rpb24oZWxOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwic3VydmV5LWZsb3dwYW5lbGVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBlbE5vZGUuZWxlbWVudElkLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbm9kZTogZWxOb2RlLCBwYW5lbDogX3ZtLnBhbmVsLCBjc3M6IFwiY3NzXCIgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnRleHQpICsgXCJcXG4gIFwiKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1lbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IF92bS5xdWVzdGlvbi5pZFZhbHVlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IF92bS5xdWVzdGlvbi5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24ucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBtaW5XaWR0aDogX3ZtLnF1ZXN0aW9uLm1pbldpZHRoLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IF92bS5xdWVzdGlvbi5tYXhXaWR0aFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyXG4gICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5oZWFkZXIgfSwgW1xuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0JlZm9yZVxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5sb2dvQ2xhc3NOYW1lcyB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnN1cnZleS5sb2dvRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb1dpZHRoXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBhbHQ6IF92bS5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uc3VydmV5LnJlbmRlcmVkSGFzVGl0bGVcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmhlYWRlclRleHQsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgbWF4V2lkdGg6IF92bS5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiaDNcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLnRpdGxlIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uc3VydmV5LmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJoNVwiLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnN1cnZleS5jc3MuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5zdXJ2ZXkubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0FmdGVyXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmxvZ29DbGFzc05hbWVzIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzcy5sb2dvSW1hZ2UsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0uc3VydmV5LmxvZ29GaXQgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgc3JjOiBfdm0uc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5zdXJ2ZXkubG9nb1dpZHRoXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnN1cnZleS5sb2dvV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5zdXJ2ZXkubG9nb0hlaWdodFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb0hlaWdodFxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGFsdDogX3ZtLnN1cnZleS5sb2NUaXRsZS5yZW5kZXJlZEh0bWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5zdXJ2ZXkuaXNMb2dvQWZ0ZXJcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtbG9nby0tcmlnaHQtdGFpbFwiIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QsXG4gICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmxvY0h0bWwucmVuZGVyZWRIdG1sKSB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIlxuICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHNyYzogX3ZtLnF1ZXN0aW9uLmltYWdlTGluayxcbiAgICAgICAgICAgIGFsdDogX3ZtLnF1ZXN0aW9uLnRleHQgfHwgX3ZtLnF1ZXN0aW9uLnRpdGxlLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwidmlkZW9cIlxuICAgICAgPyBfYyhcImVtYmVkXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgc3JjOiBfdm0ucXVlc3Rpb24uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX2MoXCJsZWdlbmRcIiwge1xuICAgICAgICBhdHRyczogeyBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBrZXk6IGl0ZW0udmFsdWUsIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pIH0sIFtcbiAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmxhYmVsIH0sIFtcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5xdWVzdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24udmFsdWUsIGl0ZW0udmFsdWUpID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5xdWVzdGlvbi52YWx1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJ2YWx1ZVwiLCAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInZhbHVlXCIsICQkYylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0uX3EoX3ZtLnF1ZXN0aW9uLnZhbHVlLCBpdGVtLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJ2YWx1ZVwiLCBpdGVtLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3JjOiBpdGVtLmltYWdlTGluayxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgYWx0OiBpdGVtLnRleHQgfHwgaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJ2aWRlb1wiXG4gICAgICAgICAgICAgICAgPyBfYyhcImVtYmVkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBvYmplY3RGaXQ6IF92bS5xdWVzdGlvbi5pbWFnZUZpdCB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHNyYzogaXRlbS5pbWFnZUxpbmssXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dMYWJlbFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBpdGVtLnRleHQgfHwgaXRlbS52YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udGV4dCB8fCBpdGVtLnZhbHVlKSldXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudGFibGVXcmFwcGVyIH0sIFtcbiAgICBfYyhcImZpZWxkc2V0XCIsIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJ0YWJsZVwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dIZWFkZXJcbiAgICAgICAgICA/IF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJ0ZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Jvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Jvd3NcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucywgZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBjb2x1bW4ubG9jVGV4dCB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidGJvZHlcIixcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVSb3dzLCBmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJyb3ctXCIgKyByb3cubmFtZSArIFwiLVwiICsgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHJvdy5yb3dDbGFzc2VzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uaGFzUm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzUm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IHJvdy5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NlbGxUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmdldENlbGxEaXNwbGF5TG9jVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IGNvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInJvdy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByb3cuZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaW5wdXRJZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0uX3Eocm93LnZhbHVlLCBjb2x1bW4udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChyb3csIFwidmFsdWVcIiwgY29sdW1uLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIi0xMiAtMTIgMjQgMjRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImNpcmNsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcjogXCI2XCIsIGN4OiBcIjBcIiwgY3k6IFwiMFwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2lyY2xlXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGRcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLmNlbGwuY2xhc3NOYW1lLFxuICAgICAgc3R5bGU6IF92bS5nZXRDZWxsU3R5bGUoKSxcbiAgICAgIGF0dHJzOiB7IHRpdGxlOiBfdm0uZ2V0SGVhZGVycygpLCBjb2xzcGFuOiBfdm0uY2VsbC5jb2xTcGFucyB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uY2VsbC5pc0FjdGlvbnNDZWxsXG4gICAgICAgID8gX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0uY2VsbC5pdGVtLmdldERhdGEoKSwgaGFuZGxlQ2xpY2s6IGZhbHNlIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5jZWxsLmhhc1BhbmVsXG4gICAgICAgID8gX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmNlbGwucGFuZWwpLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNlbGwucGFuZWwsIGNzczogX3ZtLnF1ZXN0aW9uLnN1cnZleS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmNlbGwuaGFzUXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPblRvcFxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLCBsb2NhdGlvbjogXCJ0b3BcIiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICFfdm0uY2VsbC5pc0Nob2ljZSAmJiBfdm0uY2VsbC5xdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICAgICAgICAgID8gX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoX3ZtLmNlbGwucXVlc3Rpb24pLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgIV92bS5jZWxsLmlzQ2hvaWNlICYmICFfdm0uY2VsbC5xdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICAgICAgICAgID8gX2MoX3ZtLmNlbGwucXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLmNlbGwuaXNDaG9pY2UgJiYgIV92bS5jZWxsLmlzQ2hlY2tib3hcbiAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLmNlbGwuaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoX3ZtLmNlbGwuaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IF92bS5jZWxsLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBfdm0uY2VsbC5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBoaWRlTGFiZWw6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uY2VsbC5pc0Nob2ljZSAmJiBfdm0uY2VsbC5pc0NoZWNrYm94XG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uY2VsbC5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhfdm0uY2VsbC5pdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLmNlbGwucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbTogX3ZtLmNlbGwuaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIF92bS5jZWxsLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGhpZGVMYWJlbDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLCBsb2NhdGlvbjogXCJib3R0b21cIiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5jZWxsLmhhc1RpdGxlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uY2VsbC5sb2NUaXRsZSB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0uY2VsbC5yZXF1aXJlZFRleHRcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLmNlbGwucmVxdWlyZWRUZXh0KSldKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdHlsZTogeyBvdmVyZmxvd1g6IF92bS5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8gXCJzY3JvbGxcIiA6IFwiXCIgfSB9LFxuICAgIFtfYyhcInN1cnZleS1tYXRyaXh0YWJsZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KV0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3R5bGU6IHsgb3ZlcmZsb3dYOiBfdm0ucXVlc3Rpb24uaG9yaXpvbnRhbFNjcm9sbCA/IFwic2Nyb2xsXCIgOiBcIlwiIH0gfSxcbiAgICBbXG4gICAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Ub3BcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uYWRkUm93Q2xpY2sgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0FkZFJvd1RleHQgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25BZGQgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAhX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzU2VjdGlvbiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzVGV4dCB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0VtcHR5Um93c1RleHQgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQgK1xuICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzQnV0dG9uLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFJvd0NsaWNrIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NBZGRSb3dUZXh0IH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uQWRkIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPbkJvdHRvbVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uICtcbiAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRSb3dDbGljayB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jQWRkUm93VGV4dCB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkFkZCB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRhYmxlXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgIF92bS50YWJsZS5zaG93SGVhZGVyXG4gICAgICA/IF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZS5oZWFkZXJSb3cuY2VsbHMsIGZ1bmN0aW9uKGNlbGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwiaGVhZGVyX1wiICsgY2VsbC5pZCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5oZWFkZXJDZWxsLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWluV2lkdGg6IGNlbGwubWluV2lkdGgsIHdpZHRoOiBjZWxsLndpZHRoIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIGNlbGwuaGFzVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBjZWxsLmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICEhY2VsbC5yZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoY2VsbC5yZXF1aXJlZFRleHQpKV0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJ0Ym9keVwiLFxuICAgICAgX3ZtLl9sKF92bS50YWJsZS5yb3dzLCBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICB7IGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIHJvdy5pZCwgY2xhc3M6IHJvdy5jbGFzc05hbWUgfSxcbiAgICAgICAgICBfdm0uX2wocm93LmNlbGxzLCBmdW5jdGlvbihjZWxsLCBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1tYXRyaXhjZWxsXCIsIHtcbiAgICAgICAgICAgICAga2V5OiByb3cuaWQgKyBcIl9cIiArIGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY2VsbDogY2VsbCwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICAwXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS50YWJsZS5zaG93Rm9vdGVyXG4gICAgICA/IF9jKFwidGZvb3RcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZS5mb290ZXJSb3cuY2VsbHMsIGZ1bmN0aW9uKGNlbGwsIGNlbGxJbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9cIiArIGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyBjZWxsOiBjZWxsLCBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGFibGVcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5nZXRSb3dzKCksIGZ1bmN0aW9uKHJvdywgcm93aW5kZXgpIHtcbiAgICAgIHJldHVybiBfYyhcbiAgICAgICAgXCJ0clwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwicm93a2V5XCIgKyByb3dpbmRleCxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm93XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uX2wocm93LCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImxhYmVsXCIgKyBpdGVtLmVkaXRvci5pZCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSB8fFxuICAgICAgICAgICAgICAgICAgaXRlbS5lZGl0b3IuaXNSZXF1aXJlVGV4dE9uU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLmVkaXRvci5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBpdGVtLmxvY1RpdGxlIH0gfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgaXRlbS5lZGl0b3IuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLmVkaXRvci5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS5lZGl0b3IuaWQsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBjc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGwgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBpdGVtLmVkaXRvciwgbG9jYXRpb246IFwidG9wXCIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoaXRlbS5lZGl0b3IpLCB7XG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IGl0ZW0uZWRpdG9yIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogaXRlbS5lZGl0b3IsIGxvY2F0aW9uOiBcImJvdHRvbVwiIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLmZvb3RlciB9LCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1ByZXZCdG4sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UHJldkJ0blwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uUHJldixcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0uc3VydmV5LnBhZ2VQcmV2VGV4dCB9LFxuICAgICAgb246IHsgbW91c2Vkb3duOiBfdm0uYnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLnByZXZQYWdlIH1cbiAgICB9KSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dOZXh0QnRuLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd05leHRCdG5cIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvbk5leHQsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5wYWdlTmV4dFRleHQgfSxcbiAgICAgIG9uOiB7IG1vdXNlZG93bjogX3ZtLm5leHRCdXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0ubmV4dFBhZ2UgfVxuICAgIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LmlzTGFzdFBhZ2UsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic3VydmV5LmlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXcsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5zdXJ2ZXkucHJldmlld1RleHQgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWRvd246IF92bS5idXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0uc2hvd1ByZXZpZXcgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5zdXJ2ZXkuaXNDb21wbGV0ZUJ1dHRvblZpc2libGVcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93Q29tcGxldGVCdG4sXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0NvbXBsZXRlQnRuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25Db21wbGV0ZSxcbiAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5jb21wbGV0ZVRleHQgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWRvd246IF92bS5idXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0uY29tcGxldGVMYXN0UGFnZSB9XG4gICAgICAgIH0pXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImZvcm0tZ3JvdXBcIiB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyIHx8IF92bS5jb21tZW50Q2xhc3MsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRPdGhlcnNNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ub3RoZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNvbW1lbnQgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNvbW1lbnQpKV0pXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnNob3dIZWFkZXJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiaDRcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS50aXRsZSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAhX3ZtLnBhZ2UuaGFzVGl0bGVBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5wYWdlLmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnBhZ2UuaGFzVGl0bGVBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBfYyhcInN2LXRpdGxlLWFjdGlvbnNcIiwgeyBhdHRyczogeyBlbGVtZW50OiBfdm0ucGFnZSB9IH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnNob3dEZXNjcmlwdGlvblxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnBhZ2UubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbihyb3csIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByb3cudmlzaWJsZVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsga2V5OiBfdm0ucGFnZS5pZCArIFwiX1wiICsgaW5kZXgsIGNsYXNzOiBfdm0uY3NzLnJvdyB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcm93XCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHJvdzogcm93LCBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZTogX3ZtLnJvb3RTdHlsZVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImg0XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYXNUaXRsZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc1RpdGxlLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHRhYmluZGV4OiBfdm0ucXVlc3Rpb24udGl0bGVUYWJJbmRleCxcbiAgICAgICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLnF1ZXN0aW9uLnRpdGxlQXJpYUV4cGFuZGVkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi50b2dnbGVTdGF0ZSgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBfdm0ua2V5dXAoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoX3ZtLnF1ZXN0aW9uLmdldFRpdGxlQ29tcG9uZW50TmFtZSgpLCB7XG4gICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5xdWVzdGlvbiwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5pc0NvbGxhcHNlZFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5xdWVzdGlvbi5pbm5lclBhZGRpbmdMZWZ0IH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmNvbnRlbnRJZCB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnJvd3MsIGZ1bmN0aW9uKHJvdywgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdy52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlkICsgXCJfXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXJvd1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhc0VkaXRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5mb290ZXIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvbkVkaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5lZGl0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jYW5jZWxQcmV2aWV3IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnJlbmRlcmVkUGFuZWxzLCBmdW5jdGlvbihwYW5lbCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsga2V5OiBwYW5lbC5pZCwgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYW5lbFwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBwYW5lbCwgY3NzOiBfdm0uY3NzIH0gfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3JlbW92ZVwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiaHJcIiwge1xuICAgICAgICAgICAga2V5OiBcInNlcGFyYXRvclwiICsgcGFuZWwuaWQsXG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiBfdm0ucXVlc3Rpb24uY2FuQWRkUGFuZWxcbiAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0QnV0dG9uQWRkQ3NzKF92bS5xdWVzdGlvbiksXG4gICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dCB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRQYW5lbENsaWNrIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IHRoaXMuY3NzQ2xhc3MsIHN0YXRpY1N0eWxlOiB7IGNsZWFyOiBcImJvdGhcIiB9IH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lciB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxQcmV2VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvblByZXZDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucHJldlBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3MgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ucHJvZ3Jlc3MgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcm9ncmVzc2JhclwiIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxOZXh0VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvbk5leHRDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dFBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5jYW5BZGRQYW5lbFxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5xdWVzdGlvbi5wYW5lbEFkZFRleHQgfSxcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFBhbmVsQ2xpY2sgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVGV4dCB9LCBbXG4gICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLnByb2dyZXNzVGV4dCkgKyBcIlxcbiAgXCIpXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCAmJiAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6ICFfdm0uaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIiFpc0NvbGxhcHNlZFwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCksXG4gICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0ucXVlc3Rpb24ucGFuZWxSZW1vdmVUZXh0IH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5yZW1vdmVQYW5lbENsaWNrKF92bS5wYW5lbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzcyB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0JhcixcbiAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5wcm9ncmVzcyB9LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIixcbiAgICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgICAgXCJhcmlhLXZhbHVlbWF4XCI6IFwiMTAwXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc1RleHQgKyBcIiBcIiArIF92bS5jc3MucHJvZ3Jlc3NUZXh0SW5CYXIgfSxcbiAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uc3VydmV5LnByb2dyZXNzVGV4dCkpXVxuICAgICAgICApXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJzcGFuXCIsXG4gICAgICB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzVGV4dCArIFwiIFwiICsgX3ZtLmNzcy5wcm9ncmVzc1RleHRVbmRlckJhciB9LFxuICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5wcm9ncmVzc1RleHQpKV1cbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlciB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXIgfSwgW1xuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogX3ZtLmdldFNjcm9sbEJ1dHRvbkNzcyhfdm0uaGFzU2Nyb2xsZXIsIHRydWUpLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbih0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiLFxuICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0IH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnN1cnZleS52aXNpYmxlUGFnZXMsIGZ1bmN0aW9uKHBhZ2UsIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImxpc3RlbGVtZW50XCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0uY2xpY2tMaXN0RWxlbWVudChpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhZ2UubG9jTmF2aWdhdGlvblRpdGxlLnJlbmRlcmVkSHRtbCB8fCBwYWdlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UubG9jTmF2aWdhdGlvblRpdGxlLnJlbmRlcmVkSHRtbCB8fCBwYWdlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFnZS5sb2NOYXZpZ2F0aW9uRGVzY3JpcHRpb24ucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhwYWdlLmxvY05hdmlnYXRpb25EZXNjcmlwdGlvbi5yZW5kZXJlZEh0bWwpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uZ2V0U2Nyb2xsQnV0dG9uQ3NzKF92bS5oYXNTY3JvbGxlciwgZmFsc2UpLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbihmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LCBhdHRyczogeyByb2xlOiBcInJhZGlvZ3JvdXBcIiB9IH0sXG4gICAgW1xuICAgICAgIV92bS5xdWVzdGlvbi5oYXNUaXRsZVxuICAgICAgICA/IF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uY29sdW1ucywgZnVuY3Rpb24oY29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKSB9LFxuICAgICAgICAgICAgICBfdm0uX2woY29sdW1uLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIGNvbEluZGV4ICsgaW5kZXhcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5jYW5TaG93Q2xlYXJCdXR0b25cbiAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uLFxuICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbiB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jbGVhclZhbHVlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3MoX3ZtLml0ZW0pIH0sIFtcbiAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFfdm0uaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLml0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSwgX3ZtLml0ZW0udmFsdWUpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJyZW5kZXJlZFZhbHVlXCIsIF92bS5pdGVtLnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCItMTIgLTEyIDI0IDI0XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcImNpcmNsZVwiLCB7IGF0dHJzOiB7IHI6IFwiNlwiLCBjeDogXCIwXCIsIGN5OiBcIjBcIiB9IH0pXVxuICAgICAgICAgIClcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICFfdm0uaGlkZUxhYmVsXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENvbnRyb2xMYWJlbENsYXNzKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0aXRsZTogX3ZtLml0ZW0ubG9jVGV4dC50ZXh0IH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLml0ZW0ubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5pdGVtLnZhbHVlID09IF92bS5xdWVzdGlvbi5vdGhlckl0ZW0udmFsdWVcbiAgICAgICAgPyBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5oYXNPdGhlciAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgcXVlc3Rpb24uaGFzT3RoZXIgJiYgcXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcXG4gICAgXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGF0dHJzOiB7IHRhYmluZGV4OiBcIjBcIiB9LCBvbjogeyBrZXlkb3duOiBfdm0uaGFuZGxlS2V5ZG93biB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljU3R5bGU6IHsgb3V0bGluZTogXCJub25lXCIgfSwgYXR0cnM6IHsgdGFiaW5kZXg6IFwiLTFcIiB9IH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnQgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICBfdm0uY3NzQ2xhc3Nlcy5pdGVtSWNvbiArXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Ib3Zlck1vZCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxNlwiLFxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMCAxNlwiLFxuICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBcIk02IDJDNiAwLjkgNi45IDAgOCAwQzkuMSAwIDEwIDAuOSAxMCAyQzEwIDMuMSA5LjEgNCA4IDRDNi45IDQgNiAzLjEgNiAyWk0yIDBDMC45IDAgMCAwLjkgMCAyQzAgMy4xIDAuOSA0IDIgNEMzLjEgNCA0IDMuMSA0IDJDNCAwLjkgMy4xIDAgMiAwWk04IDZDNi45IDYgNiA2LjkgNiA4QzYgOS4xIDYuOSAxMCA4IDEwQzkuMSAxMCAxMCA5LjEgMTAgOEMxMCA2LjkgOS4xIDYgOCA2Wk0yIDZDMC45IDYgMCA2LjkgMCA4QzAgOS4xIDAuOSAxMCAyIDEwQzMuMSAxMCA0IDkuMSA0IDhDNCA2LjkgMy4xIDYgMiA2Wk04IDEyQzYuOSAxMiA2IDEyLjkgNiAxNEM2IDE1LjEgNi45IDE2IDggMTZDOS4xIDE2IDEwIDE1LjEgMTAgMTRDMTAgMTIuOSA5LjEgMTIgOCAxMlpNMiAxMkMwLjkgMTIgMCAxMi45IDAgMTRDMCAxNS4xIDAuOSAxNiAyIDE2QzMuMSAxNiA0IDE1LjEgNCAxNEM0IDEyLjkgMy4xIDEyIDIgMTJaXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgIF92bS5jc3NDbGFzc2VzLml0ZW1JY29uICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uY3NzQ2xhc3Nlcy5pdGVtSWNvbkZvY3VzTW9kLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwIDI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7IGF0dHJzOiB7IGQ6IFwiTTEwIDVMNSAwTDAgNUg0VjlINlY1SDEwWlwiIH0gfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogXCJNNiAxOVYxNUg0VjE5SDBMNSAyNEwxMCAxOUg2WlwiIH0gfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3NDbGFzc2VzLml0ZW1JbmRleCB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmluZGV4KSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwgfSxcbiAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnRleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5yb290Q2xhc3MgfSxcbiAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIF9jKFwic3VydmV5LXJhbmtpbmctaXRlbVwiLCB7XG4gICAgICAgIGtleTogaXRlbS52YWx1ZSArIFwiLVwiICsgaW5kZXggKyBcIi1pdGVtXCIsXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRleHQ6IGl0ZW0ubG9jVGV4dCxcbiAgICAgICAgICBpbmRleDogX3ZtLnF1ZXN0aW9uLmdldE51bWJlckJ5SW5kZXgoaW5kZXgpLFxuICAgICAgICAgIGhhbmRsZUtleWRvd246IF92bS5xdWVzdGlvbi5oYW5kbGVLZXlkb3duLFxuICAgICAgICAgIGNzc0NsYXNzZXM6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSksXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5nZXRSb290Q2xhc3MoX3ZtLnF1ZXN0aW9uKSB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZmllbGRzZXRcIixcbiAgICAgICAgICB7IGF0dHJzOiB7IHJvbGU6IFwicmFkaW9ncm91cFwiIH0gfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImxlZ2VuZFwiLCB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgeyBrZXk6IGl0ZW0udmFsdWUsIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBpdGVtLmxvY1RleHQudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGl0ZW0udmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5zZXRWYWx1ZUZyb21DbGljayhlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1pblRleHQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTWluUmF0ZURlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogaXRlbS5sb2NUZXh0IH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSBfdm0ucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXhUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY01heFJhdGVEZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5oYXNPdGhlcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzT3RoZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyLFxuICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJzdi12dWUtcm93LWFkZGl0aW9uYWwtZGl2XCIgfSxcbiAgICBfdm0uX2woX3ZtLnJvdy5lbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIF92bS5yb3cuaXNOZWVkUmVuZGVyICYmIGVsZW1lbnQuaXNWaXNpYmxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IGVsZW1lbnQuaWRWYWx1ZSxcbiAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IGVsZW1lbnQucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgICB3aWR0aDogZWxlbWVudC5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWxlbWVudC5taW5XaWR0aCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogZWxlbWVudC5tYXhXaWR0aFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1lbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGVsZW1lbnQucGFkZGluZ0xlZnQsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IGVsZW1lbnQucGFkZGluZ1JpZ2h0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICByb2xlOiBlbGVtZW50LmFyaWFSb2xlLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogZWxlbWVudC5oYXNUaXRsZVxuICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnQuYXJpYVRpdGxlSWRcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLndpZHRoICsgXCJweFwiXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLm5lZWRTaG93UGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGxhY2Vob2xkZXJcbiAgICAgICAgfSxcbiAgICAgICAgW192bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0ucXVlc3Rpb24ucGxhY2VIb2xkZXJUZXh0KSArIFwiXFxuICBcIildXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbSgwKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9scyB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdGl0bGU6IF92bS5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb24gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihcIlxcbiAgICAgIOKcllxcbiAgICBcIildXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW1xuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCBbX2MoXCJjYW52YXNcIiwgeyBhdHRyczogeyB0YWJpbmRleDogXCIwXCIgfSB9KV0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9IH0sIFtcbiAgICBfdm0ubG9jU3RyaW5nLmhhc0h0bWxcbiAgICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1zdHJpbmctZWRpdG9yXCIsXG4gICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSxcbiAgICAgICAgICBhdHRyczogeyBjb250ZW50ZWRpdGFibGU6IFwidHJ1ZVwiIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpIH0sXG4gICAgICAgICAgb246IHsgYmx1cjogX3ZtLm9uSW5wdXQsIGNsaWNrOiBfdm0ub25DbGljayB9XG4gICAgICAgIH0pXG4gICAgICA6IF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy1lZGl0b3JcIixcbiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgICBhdHRyczogeyBjb250ZW50ZWRpdGFibGU6IFwidHJ1ZVwiIH0sXG4gICAgICAgICAgICBvbjogeyBibHVyOiBfdm0ub25JbnB1dCwgY2xpY2s6IF92bS5vbkNsaWNrIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKSldXG4gICAgICAgIClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0gfSwgW1xuICAgIF92bS5sb2NTdHJpbmcuaGFzSHRtbFxuICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpIH1cbiAgICAgICAgfSlcbiAgICAgIDogX2MoXCJzcGFuXCIsIHsgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSB9LCBbXG4gICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkpXG4gICAgICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhfdm0ubG9jU3RyaW5nLnJlbmRlckFzLCB7XG4gICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmxvY1N0cmluZyB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnJvb3QgfSwgW1xuICAgIF9jKFwiZm9ybVwiLCB7IGF0dHJzOiB7IG9uc3VibWl0OiBcInJldHVybiBmYWxzZTtcIiB9IH0sIFtcbiAgICAgICFfdm0uc3VydmV5Lmhhc0xvZ29cbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2X2N1c3RvbV9oZWFkZXJcIiB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzOiBfdm0uY3NzLmNvbnRhaW5lciB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktaGVhZGVyXCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcInN0YXJ0aW5nXCJcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5jc3MuYm9keSB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT25Ub3BcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MuZm9vdGVyIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zdXJ2ZXkuc3RhcnRTdXJ2ZXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnN0YXJ0IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFnZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdm0uc3VydmV5LnN0YXJ0ZWRQYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX3ZtLnN1cnZleS5zdGFydGVkUGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzc1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5mb290ZXIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5zdGFydFN1cnZleVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uc3RhcnQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwicnVubmluZ1wiIHx8IF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwicHJldmlld1wiXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uY3NzLmJvZHkgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPblRvcFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktdGltZXJwYW5lbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uVG9wXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1uYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ubmF2SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFnZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ucGFnZUlkLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBfdm0uc3VydmV5LmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Cb3R0b21cbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXRpbWVycGFuZWxcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1uYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ubmF2SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uaGFzQ29tcGxldGVkUGFnZVxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDb21wbGV0ZWRQYWdlQ2xhc3NlcygpLFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmdldFByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGUgIT0gXCJcIlxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnNhdmVEYXRhLnJvb3QgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5nZXRDb21wbGV0ZWRTdGF0ZUNsYXNzZXMoKSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGVUZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGUgPT0gXCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5nZXRMb2NTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzYXZlQWdhaW5CdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb1RyeVNhdmVBZ2FpbiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJjb21wbGV0ZWRiZWZvcmVcIlxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MuYm9keSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRCZWZvcmVIdG1sKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImxvYWRpbmdcIlxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MuYm9keSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0uc3VydmV5LnByb2Nlc3NlZExvYWRpbmdIdG1sKSB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJlbXB0eVwiXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MuYm9keUVtcHR5IH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoX3ZtLnN1cnZleS5lbXB0eVN1cnZleVRleHQpICsgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpLFxuICAgICAgc3R5bGU6IF92bS5pbnB1dFN0eWxlLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgIHR5cGU6IF92bS5xdWVzdGlvbi5pbnB1dFR5cGUsXG4gICAgICAgIG1heGxlbmd0aDogX3ZtLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpLFxuICAgICAgICBtaW46IF92bS5xdWVzdGlvbi5yZW5kZXJlZE1pbixcbiAgICAgICAgbWF4OiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRNYXgsXG4gICAgICAgIHN0ZXA6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0ZXAsXG4gICAgICAgIHNpemU6IF92bS5xdWVzdGlvbi5pbnB1dFNpemUsXG4gICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgbGlzdDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWQsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0ucXVlc3Rpb24uYXV0b0NvbXBsZXRlLFxuICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiIDogbnVsbFxuICAgICAgfSxcbiAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUgfSxcbiAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmNoYW5nZSwga2V5dXA6IF92bS5rZXl1cCB9XG4gICAgfSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uZGF0YUxpc3RJZFxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRhdGFsaXN0XCIsXG4gICAgICAgICAgeyBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWQgfSB9LFxuICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZGF0YUxpc3QsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiBpdGVtIH0gfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50ZXh0KSldKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQubm9cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5udW1iZXIsXG4gICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQubm8pKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0LFxuICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LnJlcXVpcmVkVGV4dCkpXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH0gfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleVdpbmRvdy5pc1Nob3dpbmcsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzdXJ2ZXlXaW5kb3cuaXNTaG93aW5nXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5yb290LFxuICAgICAgc3RhdGljU3R5bGU6IHtcbiAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgYm90dG9tOiBcIjNweFwiLFxuICAgICAgICByaWdodDogXCIxMHB4XCIsXG4gICAgICAgIFwibWF4LXdpZHRoXCI6IFwiNjAlXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3Mud2luZG93LmhlYWRlci5yb290IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6IFwiMTAwJVwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIudGl0bGUsXG4gICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiMTBweFwiIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS53aW5kb3dTdXJ2ZXkubG9jVGl0bGUgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5leHBhbmRlZENzcyxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLmlzRXhwYW5kZWRTdXJ2ZXlcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IFwicGFkZGluZy1yaWdodFwiOiBcIjEwcHhcIiB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihcIlhcIildXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzRXhwYW5kZWRTdXJ2ZXksXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNFeHBhbmRlZFN1cnZleVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuYm9keVxuICAgICAgICB9LFxuICAgICAgICBbX2MoXCJzdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS53aW5kb3dTdXJ2ZXkgfSB9KV0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICApXG4gICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwidmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG4vLyBDb2RlIGNvcGllZCBmcm9tIFZ1ZS9zcmMvc2hhcmVkL3V0aWwuanNcbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpOyB9O1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYW4gZXZlbnQtZW1pdHRlciBmdW5jdGlvblxuICogQHBhcmFtICBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEByZXR1cm4gTWV0aG9kRGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWl0KGV2ZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfdGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICB2YXIga2V5ID0gaHlwaGVuYXRlKHByb3BlcnR5S2V5KTtcbiAgICAgICAgdmFyIG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVtaXQgPSBmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW1pdE5hbWUgPSBldmVudCB8fCBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZW1pdChlbWl0TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0KGVtaXROYW1lLCBhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0LmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5cyhbZW1pdE5hbWVdLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0LmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5cyhbZW1pdE5hbWVdLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXR1cm5WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS50aGVuKGVtaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZW1pdChyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgUHJvbWlzZSB8fCAob2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGFuIGluamVjdFxuICogQHBhcmFtIGZyb20ga2V5XG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3Qob3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtrZXldID0gb3B0aW9ucyB8fCBrZXk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgcmVhY3RpdmVJbmplY3RLZXkgfSBmcm9tICcuLi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSByZWFjdGl2ZSBpbmplY3RcbiAqIEBwYXJhbSBmcm9tIGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0UmVhY3RpdmUob3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICB2YXIgZnJvbUtleV8xID0gISFvcHRpb25zID8gb3B0aW9ucy5mcm9tIHx8IG9wdGlvbnMgOiBrZXk7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdFZhbF8xID0gKCEhb3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHQpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZClcbiAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge307XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXNbcmVhY3RpdmVJbmplY3RLZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogPyBvYmpbZnJvbUtleV8xXSA6IGRlZmF1bHRWYWxfMTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtyZWFjdGl2ZUluamVjdEtleV0gPSByZWFjdGl2ZUluamVjdEtleTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBhcHBseU1ldGFkYXRhIH0gZnJvbSAnLi4vaGVscGVycy9tZXRhZGF0YSc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBtb2RlbFxuICogQHBhcmFtICBldmVudCBldmVudCBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbChldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlba10gPSBvcHRpb25zO1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5tb2RlbCA9IHsgcHJvcDogaywgZXZlbnQ6IGV2ZW50IHx8IGsgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGFwcGx5TWV0YWRhdGEgfSBmcm9tICcuLi9oZWxwZXJzL21ldGFkYXRhJztcbi8qKlxuICogZGVjb3JhdG9yIG9mIHN5bmNlZCBtb2RlbCBhbmQgcHJvcFxuICogQHBhcmFtIHByb3BOYW1lIHRoZSBuYW1lIHRvIGludGVyZmFjZSB3aXRoIGZyb20gb3V0c2lkZSwgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSAgZXZlbnQgZXZlbnQgbmFtZVxuICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uc1xuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxTeW5jKHByb3BOYW1lLCBldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbcHJvcE5hbWVdID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMubW9kZWwgPSB7IHByb3A6IHByb3BOYW1lLCBldmVudDogZXZlbnQgfHwgayB9O1xuICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tdID0ge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoZXZlbnQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGFwcGx5TWV0YWRhdGEgfSBmcm9tICcuLi9oZWxwZXJzL21ldGFkYXRhJztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcHJvcFxuICogQHBhcmFtICBvcHRpb25zIHRoZSBvcHRpb25zIGZvciB0aGUgcHJvcFxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3Aob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlba10gPSBvcHRpb25zO1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgYXBwbHlNZXRhZGF0YSB9IGZyb20gJy4uL2hlbHBlcnMvbWV0YWRhdGEnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBzeW5jZWQgcHJvcFxuICogQHBhcmFtIHByb3BOYW1lIHRoZSBuYW1lIHRvIGludGVyZmFjZSB3aXRoIGZyb20gb3V0c2lkZSwgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIGZvciB0aGUgc3luY2VkIHByb3BcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcm9wU3luYyhwcm9wTmFtZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbcHJvcE5hbWVdID0gb3B0aW9ucztcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkIHx8IChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge30pKVtrXSA9IHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTpcIiArIHByb3BOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKHRhcmdldCwga2V5KTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbmhlcml0SW5qZWN0ZWQsIG5lZWRUb1Byb2R1Y2VQcm92aWRlLCBwcm9kdWNlUHJvdmlkZSwgfSBmcm9tICcuLi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBwcm92aWRlXG4gKiBAcGFyYW0ga2V5IGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3ZpZGUoa2V5KSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICB2YXIgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZTtcbiAgICAgICAgaW5oZXJpdEluamVjdGVkKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFRvUHJvZHVjZVByb3ZpZGUocHJvdmlkZSkpIHtcbiAgICAgICAgICAgIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGUgPSBwcm9kdWNlUHJvdmlkZShwcm92aWRlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlLm1hbmFnZWRba10gPSBrZXkgfHwgaztcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgaW5oZXJpdEluamVjdGVkLCBuZWVkVG9Qcm9kdWNlUHJvdmlkZSwgcHJvZHVjZVByb3ZpZGUsIH0gZnJvbSAnLi4vaGVscGVycy9wcm92aWRlSW5qZWN0Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcmVhY3RpdmUgcHJvdmlkZVxuICogQHBhcmFtIGtleSBrZXlcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcm92aWRlUmVhY3RpdmUoa2V5KSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICB2YXIgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZTtcbiAgICAgICAgaW5oZXJpdEluamVjdGVkKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFRvUHJvZHVjZVByb3ZpZGUocHJvdmlkZSkpIHtcbiAgICAgICAgICAgIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGUgPSBwcm9kdWNlUHJvdmlkZShwcm92aWRlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtrXSA9IGtleSB8fCBrO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHJlZiBwcm9wXG4gKiBAcGFyYW0gcmVmS2V5IHRoZSByZWYga2V5IGRlZmluZWQgaW4gdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlZihyZWZLZXkpIHtcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChvcHRpb25zLCBrZXkpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQgfHwge307XG4gICAgICAgIG9wdGlvbnMuY29tcHV0ZWRba2V5XSA9IHtcbiAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRyZWZzW3JlZktleSB8fCBrZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuLyoqXG4gKiBkZWNvcmF0b3IgZm9yIGNhcHR1cmluZ3Mgdi1tb2RlbCBiaW5kaW5nIHRvIGNvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm9wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWTW9kZWwob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHZhbHVlS2V5ID0gJ3ZhbHVlJztcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrZXkpIHtcbiAgICAgICAgO1xuICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbdmFsdWVLZXldID0gb3B0aW9ucztcbiAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tleV0gPSB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t2YWx1ZUtleV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgd2F0Y2ggZnVuY3Rpb25cbiAqIEBwYXJhbSAgcGF0aCB0aGUgcGF0aCBvciB0aGUgZXhwcmVzc2lvbiB0byBvYnNlcnZlXG4gKiBAcGFyYW0gIFdhdGNoT3B0aW9uXG4gKiBAcmV0dXJuIE1ldGhvZERlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gV2F0Y2gocGF0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIF9hID0gb3B0aW9ucy5kZWVwLCBkZWVwID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5pbW1lZGlhdGUsIGltbWVkaWF0ZSA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRPcHRpb25zLndhdGNoICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdhdGNoID0gY29tcG9uZW50T3B0aW9ucy53YXRjaDtcbiAgICAgICAgaWYgKHR5cGVvZiB3YXRjaFtwYXRoXSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkod2F0Y2hbcGF0aF0pKSB7XG4gICAgICAgICAgICB3YXRjaFtwYXRoXSA9IFt3YXRjaFtwYXRoXV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdhdGNoW3BhdGhdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2F0Y2hbcGF0aF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB3YXRjaFtwYXRoXS5wdXNoKHsgaGFuZGxlcjogaGFuZGxlciwgZGVlcDogZGVlcCwgaW1tZWRpYXRlOiBpbW1lZGlhdGUgfSk7XG4gICAgfSk7XG59XG4iLCIvKiogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGFzcy1jb21wb25lbnQvYmxvYi9tYXN0ZXIvc3JjL3JlZmxlY3QudHN9ICovXG52YXIgcmVmbGVjdE1ldGFkYXRhSXNTdXBwb3J0ZWQgPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJlZmxlY3QuZ2V0TWV0YWRhdGEgIT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWV0YWRhdGEob3B0aW9ucywgdGFyZ2V0LCBrZXkpIHtcbiAgICBpZiAocmVmbGVjdE1ldGFkYXRhSXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmXG4gICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciB0eXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCB0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBuZWVkVG9Qcm9kdWNlUHJvdmlkZShvcmlnaW5hbCkge1xuICAgIHJldHVybiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICghb3JpZ2luYWwubWFuYWdlZCAmJiAhb3JpZ2luYWwubWFuYWdlZFJlYWN0aXZlKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjZVByb3ZpZGUob3JpZ2luYWwpIHtcbiAgICB2YXIgcHJvdmlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJ2ID0gdHlwZW9mIG9yaWdpbmFsID09PSAnZnVuY3Rpb24nID8gb3JpZ2luYWwuY2FsbCh0aGlzKSA6IG9yaWdpbmFsO1xuICAgICAgICBydiA9IE9iamVjdC5jcmVhdGUocnYgfHwgbnVsbCk7XG4gICAgICAgIC8vIHNldCByZWFjdGl2ZSBzZXJ2aWNlcyAocHJvcGFnYXRlcyBwcmV2aW91cyBzZXJ2aWNlcyBpZiBuZWNlc3NhcnkpXG4gICAgICAgIHJ2W3JlYWN0aXZlSW5qZWN0S2V5XSA9IE9iamVjdC5jcmVhdGUodGhpc1tyZWFjdGl2ZUluamVjdEtleV0gfHwge30pO1xuICAgICAgICBmb3IgKHZhciBpIGluIHByb3ZpZGUubWFuYWdlZCkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkW2ldXSA9IHRoaXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmVbaV1dID0gdGhpc18xW2ldOyAvLyBEdXBsaWNhdGVzIHRoZSBiZWhhdmlvciBvZiBgQFByb3ZpZGVgXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocnZbcmVhY3RpdmVJbmplY3RLZXldLCBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtpXSwge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXNbaV07IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXM7XG4gICAgICAgIGZvciAodmFyIGkgaW4gcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUpIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgIH07XG4gICAgcHJvdmlkZS5tYW5hZ2VkID0ge307XG4gICAgcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUgPSB7fTtcbiAgICByZXR1cm4gcHJvdmlkZTtcbn1cbi8qKiBVc2VkIGZvciBrZXlpbmcgcmVhY3RpdmUgcHJvdmlkZS9pbmplY3QgcHJvcGVydGllcyAqL1xuZXhwb3J0IHZhciByZWFjdGl2ZUluamVjdEtleSA9ICdfX3JlYWN0aXZlSW5qZWN0X18nO1xuZXhwb3J0IGZ1bmN0aW9uIGluaGVyaXRJbmplY3RlZChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgLy8gaW5qZWN0IHBhcmVudCByZWFjdGl2ZSBzZXJ2aWNlcyAoaWYgYW55KVxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wb25lbnRPcHRpb25zLmluamVjdCkpIHtcbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSBjb21wb25lbnRPcHRpb25zLmluamVjdCB8fCB7fTtcbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3RbcmVhY3RpdmVJbmplY3RLZXldID0ge1xuICAgICAgICAgICAgZnJvbTogcmVhY3RpdmVJbmplY3RLZXksXG4gICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCIvKiogdnVlLXByb3BlcnR5LWRlY29yYXRvciB2ZXJzb24gOS4xLjIgTUlUIExJQ0VOU0UgY29weXJpZ2h0IDIwMjAga2FvcnVuMzQzICovXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz0ncmVmbGVjdC1tZXRhZGF0YScvPlxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IENvbXBvbmVudCwgeyBtaXhpbnMgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmV4cG9ydCB7IENvbXBvbmVudCwgVnVlLCBtaXhpbnMgYXMgTWl4aW5zIH07XG5leHBvcnQgeyBFbWl0IH0gZnJvbSAnLi9kZWNvcmF0b3JzL0VtaXQnO1xuZXhwb3J0IHsgSW5qZWN0IH0gZnJvbSAnLi9kZWNvcmF0b3JzL0luamVjdCc7XG5leHBvcnQgeyBJbmplY3RSZWFjdGl2ZSB9IGZyb20gJy4vZGVjb3JhdG9ycy9JbmplY3RSZWFjdGl2ZSc7XG5leHBvcnQgeyBNb2RlbCB9IGZyb20gJy4vZGVjb3JhdG9ycy9Nb2RlbCc7XG5leHBvcnQgeyBNb2RlbFN5bmMgfSBmcm9tICcuL2RlY29yYXRvcnMvTW9kZWxTeW5jJztcbmV4cG9ydCB7IFByb3AgfSBmcm9tICcuL2RlY29yYXRvcnMvUHJvcCc7XG5leHBvcnQgeyBQcm9wU3luYyB9IGZyb20gJy4vZGVjb3JhdG9ycy9Qcm9wU3luYyc7XG5leHBvcnQgeyBQcm92aWRlIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1Byb3ZpZGUnO1xuZXhwb3J0IHsgUHJvdmlkZVJlYWN0aXZlIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1Byb3ZpZGVSZWFjdGl2ZSc7XG5leHBvcnQgeyBSZWYgfSBmcm9tICcuL2RlY29yYXRvcnMvUmVmJztcbmV4cG9ydCB7IFZNb2RlbCB9IGZyb20gJy4vZGVjb3JhdG9ycy9WTW9kZWwnO1xuZXhwb3J0IHsgV2F0Y2ggfSBmcm9tICcuL2RlY29yYXRvcnMvV2F0Y2gnO1xuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi9iYXNlXCI7XHJcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIGFuIGluZGl2aWR1YWwgYWN0aW9uLiBBY3Rpb24gaXRlbXMgY2FuIGJlIGRpc3BsYXllZCBpbiBjZXJ0YWluIHN1cnZleSBlbGVtZW50cyAtIGluIFRvb2xiYXIgKG9yIGFjdGlvbiBiYXIpLCBpbiB0aXRsZXMgKG9mIHBhZ2VzLCBwYW5lbHMsIHF1ZXN0aW9ucyksIGluIG1hdHJpeCByb3dzIChhcyAnZXhwYW5kIGRldGFpbHMnIG9yICdyZW1vdmUgcm93JyBidXR0b25zKSwgYW5kIGV0Yy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbiB7XHJcbiAgLyoqXHJcbiAgICogVW5pcXVlIHN0cmluZyBpZFxyXG4gICAqL1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gbWFrZSB0aGUgdG9vbGJhciBpdGVtIGludmlzaWJsZS5cclxuICAgKi9cclxuICB2aXNpYmxlPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBUb29sYmFyIGl0ZW0gdGl0bGVcclxuICAgKi9cclxuICB0aXRsZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBUb29sYmFyIGl0ZW0gdG9vbHRpcFxyXG4gICAqL1xyXG4gIHRvb2x0aXA/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgdG9vbGJhciBpdGVtLlxyXG4gICAqL1xyXG4gIGVuYWJsZWQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGhpZGUgdGhlIHRvb2xiYXIgaXRlbSB0aXRsZS5cclxuICAgKi9cclxuICBzaG93VGl0bGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgdGhhdCBjYWxscyBvbiB0b29sYmFyIGl0ZW0gY2xpY2suXHJcbiAgICovXHJcbiAgYWN0aW9uPzogKGNvbnRleHQ/OiBhbnkpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGNzcyBjbGFzc1xyXG4gICAqL1xyXG4gIGNzcz86IHN0cmluZztcclxuICAvKipcclxuICAgKiBUb29sYmFyIGlubmVyIGVsZW1lbnQgY3NzIGNsYXNzXHJcbiAgICovXHJcbiAgaW5uZXJDc3M/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGRhdGEgb2JqZWN0LiBVc2VkIGFzIGRhdGEgZm9yIGN1c3RvbSB0ZW1wbGF0ZSBvciBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICovXHJcbiAgZGF0YT86IGFueTtcclxuICBwb3B1cE1vZGVsPzogYW55OyAvL1RPRE86IHRlbXAsIHVzZSBkYXRhIGluc3RlYWRcclxuICBuZWVkU2VwYXJhdG9yPzogYm9vbGVhbjsgLy9UT0RPOiB0ZW1wXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBhY3RpdmF0ZSB0aGUgdG9vbGJhciBpdGVtIChwYWdlKVxyXG4gICAqL1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIHRlbXBsYXRlIG5hbWVcclxuICAgKi9cclxuICB0ZW1wbGF0ZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBUb29sYmFyIGl0ZW0gY29tcG9uZW50IG5hbWVcclxuICAgKi9cclxuICBjb21wb25lbnQ/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGljb24gbmFtZVxyXG4gICAqL1xyXG4gIGljb25OYW1lPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFRvb2xiYXIgaXRlbSBjaGlsZCBpdGVtcy4gQ2FuIGJlIHVzZWQgYXMgY29udGlhbmVyIGZvciBvcHRpb25zXHJcbiAgICovXHJcbiAgaXRlbXM/OiBhbnk7XHJcbiAgLyoqXHJcbiAgICogR2V0cyBvciBzZXRzIGFuIGFjdGlvbidzIGxvY2F0aW9uIGluIGEgbWF0cml4IHF1ZXN0aW9uJ3Mgcm93LlxyXG4gICAqXHJcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XHJcbiAgICpcclxuICAgKiAtIGBzdGFydGAgLSBBbiBhY3Rpb24gaXMgbG9jYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcm93LlxyXG4gICAqIC0gYGVuZGAgLSBBbiBhY3Rpb24gaXMgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIGEgcm93LlxyXG4gICAqL1xyXG4gIGxvY2F0aW9uPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIG1ha2UgdGhlIHRhYkluZGV4IC0xIHRvIGRpc2FibGUga2V5Ym9hcmQgbmF2aWdhdGlvbiB0byB0aGlzIGl0ZW1cclxuICAgKi9cclxuICBkaXNhYmxlVGFiU3RvcD86IGJvb2xlYW47XHJcbiAgdmlzaWJsZUluZGV4PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9uIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIGNvbnN0cnVjdG9yKGl0ZW06IElBY3Rpb24pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGl0ZW0pO1xyXG4gIH1cclxuICBsb2NhdGlvbj86IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBpZDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGljb25OYW1lOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgdmlzaWJsZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIHRvb2x0aXA6IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBlbmFibGVkOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSgpIHNob3dUaXRsZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSBhY3Rpb246IChjb250ZXh0PzogYW55KSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSgpIGNzczogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGlubmVyQ3NzOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgZGF0YTogYW55O1xyXG4gIEBwcm9wZXJ0eSgpIHBvcHVwTW9kZWw6IGFueTtcclxuICBAcHJvcGVydHkoKSBuZWVkU2VwYXJhdG9yOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSgpIGFjdGl2ZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSB0ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGNvbXBvbmVudDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGl0ZW1zOiBhbnk7XHJcbiAgQHByb3BlcnR5KCkgdmlzaWJsZUluZGV4OiBudW1iZXI7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImxhcmdlXCIgfSkgbW9kZTogXCJsYXJnZVwiIHwgXCJzbWFsbFwiIHwgXCJwb3B1cFwiO1xyXG4gIEBwcm9wZXJ0eSgpIGRpc2FibGVUYWJTdG9wOiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCh0aGlzLm1vZGUgIT0gXCJzbWFsbFwiICYmXHJcbiAgICAgICAgKHRoaXMuc2hvd1RpdGxlIHx8IHRoaXMuc2hvd1RpdGxlID09PSB1bmRlZmluZWQpKSB8fFxyXG4gICAgICAgICF0aGlzLmljb25OYW1lKSAmJlxyXG4gICAgICAhIXRoaXMudGl0bGVcclxuICAgICk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSAhPT0gXCJwb3B1cFwiO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNhblNocmluaygpIHtcclxuICAgIHJldHVybiAhIXRoaXMuaWNvbk5hbWU7XHJcbiAgfVxyXG5cclxuICBtaW5EaW1lbnNpb246IG51bWJlcjtcclxuICBtYXhEaW1lbnNpb246IG51bWJlcjtcclxufVxyXG4iLCJpbXBvcnQgeyBMaXN0TW9kZWwgfSBmcm9tIFwiLi4vbGlzdFwiO1xyXG5pbXBvcnQgeyBQb3B1cE1vZGVsIH0gZnJvbSBcIi4uL3BvcHVwXCI7XHJcbmltcG9ydCB7IEFjdGlvbiwgSUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiO1xyXG5pbXBvcnQgeyBBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi9jb250YWluZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcjxUIGV4dGVuZHMgQWN0aW9uID0gQWN0aW9uLCBWIGV4dGVuZHMgSUFjdGlvbiA9IElBY3Rpb24+IGV4dGVuZHMgQWN0aW9uQ29udGFpbmVyPFQ+IHtcclxuICBwcm90ZWN0ZWQgZG90c0l0ZW06IEFjdGlvbjsgLy8gKC4uLikgYnV0dG9uXHJcbiAgcHVibGljIGRvdHNJdGVtUG9wdXBNb2RlbDogUG9wdXBNb2RlbDtcclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmxlSXRlbXMoKTogQXJyYXk8QWN0aW9uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5tb2RlICE9PSBcInBvcHVwXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEl0ZW1zKGl0ZW1zOiBBcnJheTxWPiwgc29ydEJ5VmlzaWJsZUluZGV4ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgYWN0aW9uczogQXJyYXk8VD4gPSA8YW55Pml0ZW1zLm1hcCgoaXRlbSkgPT4gKGl0ZW0gaW5zdGFuY2VvZiBBY3Rpb24gPyBpdGVtIDogbmV3IEFjdGlvbihpdGVtKSkpO1xyXG4gICAgaWYgKHNvcnRCeVZpc2libGVJbmRleCkge1xyXG4gICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnNvcnRJdGVtcyhhY3Rpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aW9ucyA9IGFjdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBwcml2YXRlIHNvcnRJdGVtcyhpdGVtczogQXJyYXk8VD4pIHtcclxuICAgIHJldHVybiBbXVxyXG4gICAgICAuY29uY2F0KGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS52aXNpYmxlSW5kZXggPj0gMCB8fCBpdGVtLnZpc2libGVJbmRleCA9PT0gdW5kZWZpbmVkKSlcclxuICAgICAgLnNvcnQoKGZpcnN0SXRlbSwgc2Vjb25kSXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBmaXJzdEl0ZW0udmlzaWJsZUluZGV4IC0gc2Vjb25kSXRlbS52aXNpYmxlSW5kZXg7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kb3RzSXRlbVBvcHVwTW9kZWwgPSBuZXcgUG9wdXBNb2RlbChcInN2LWxpc3RcIiwge1xyXG4gICAgICBtb2RlbDogdGhpcy5pbnZpc2libGVJdGVtc0xpc3RNb2RlbFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRvdHNJdGVtID0gbmV3IEFjdGlvbih7XHJcbiAgICAgIGlkOiBcImRvdHNJdGVtLWlkXCIsXHJcbiAgICAgIGNvbXBvbmVudDogXCJzdi1hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIixcclxuICAgICAgY3NzOiBcInN2LWRvdHNcIixcclxuICAgICAgaW5uZXJDc3M6IFwic3YtZG90c19faXRlbVwiLFxyXG4gICAgICBpY29uTmFtZTogXCJpY29uLWRvdHNcIixcclxuICAgICAgLy8gc2hvd1RpdGxlOiB0cnVlLFxyXG4gICAgICAvLyB0aXRsZTogXCIuLi5cIixcclxuICAgICAgYWN0aW9uOiAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb3RzSXRlbVBvcHVwTW9kZWwudG9nZ2xlVmlzaWJpbGl0eSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBwb3B1cE1vZGVsOiB0aGlzLmRvdHNJdGVtUG9wdXBNb2RlbFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0l0ZW1zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmFjdGlvbnMgfHwgW10pLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW52aXNpYmxlSXRlbVNlbGVjdGVkKGl0ZW06IFQpOiB2b2lkIHtcclxuICAgIGlmICghIWl0ZW0gJiYgdHlwZW9mIGl0ZW0uYWN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgaXRlbS5hY3Rpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnZpc2libGVJdGVtc0xpc3RNb2RlbDogTGlzdE1vZGVsID0gbmV3IExpc3RNb2RlbChcclxuICAgIFtdLFxyXG4gICAgKGl0ZW06IFQpID0+IHtcclxuICAgICAgdGhpcy5pbnZpc2libGVJdGVtU2VsZWN0ZWQoaXRlbSk7XHJcbiAgICAgIHRoaXMuZG90c0l0ZW1Qb3B1cE1vZGVsLnRvZ2dsZVZpc2liaWxpdHkoKTtcclxuICAgIH0sXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIHB1YmxpYyBzaG93Rmlyc3ROKHZpc2libGVJdGVtc0NvdW50OiBudW1iZXIpIHtcclxuICAgIGxldCBsZWZ0SXRlbXNUb1Nob3cgPSB2aXNpYmxlSXRlbXNDb3VudDtcclxuICAgIGNvbnN0IGludmlzaWJsZUl0ZW1zOiBBY3Rpb25bXSA9IFtdO1xyXG4gICAgdGhpcy5hY3Rpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuZG90c0l0ZW0pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxlZnRJdGVtc1RvU2hvdyA8PSAwKSB7XHJcbiAgICAgICAgaXRlbS5tb2RlID0gXCJwb3B1cFwiO1xyXG4gICAgICAgIGludmlzaWJsZUl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgbGVmdEl0ZW1zVG9TaG93LS07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuaW52aXNpYmxlSXRlbXNMaXN0TW9kZWwuaXRlbXMgPSBpbnZpc2libGVJdGVtcztcclxuICAgIHRoaXMuYWRkRG90c0J1dHRvbih2aXNpYmxlSXRlbXNDb3VudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRG90c0J1dHRvbigpIHtcclxuICAgIHZhciBpbmRleCA9IHRoaXMuYWN0aW9ucy5pbmRleE9mKDxhbnk+dGhpcy5kb3RzSXRlbSk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGREb3RzQnV0dG9uKG5ld0luZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChuZXdJbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hY3Rpb25zLnNwbGljZShuZXdJbmRleCwgMCwgPGFueT50aGlzLmRvdHNJdGVtKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgcHJvcGVydHlBcnJheSB9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250YWluZXI8VCBleHRlbmRzIEFjdGlvbj4gZXh0ZW5kcyBCYXNlIHtcclxuICAgIEBwcm9wZXJ0eUFycmF5KCkgYWN0aW9uczogQXJyYXk8VD47XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNJdGVtcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYWN0aW9ucyB8fCBbXSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7XG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxuICBKc29uT2JqZWN0LFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG59IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgSUZpbmRFbGVtZW50LCBJUHJvZ3Jlc3NJbmZvLCBJU3VydmV5IH0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBCaW5kaW5ncyB7XG4gIHByaXZhdGUgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IG51bGw7XG4gIHByaXZhdGUgdmFsdWVzOiBhbnkgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9iajogQmFzZSkge31cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiaW5kaW5nc1wiO1xuICB9XG4gIHB1YmxpYyBnZXROYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdGhpcy5maWxsUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLmlzVmlzaWJsZShcIlwiLCB0aGlzLm9iaikpIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzKCk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4gPSBbXTtcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldEJpbmRpbmcocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMudmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZU5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckJpbmRpbmcocHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEJpbmRpbmcocHJvcGVydHlOYW1lLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudmFsdWVzO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZU5hbWVCeVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbcHJvcGVydHlOYW1lXTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllc0J5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgcmV0dXJuIFtdO1xuICAgIHZhciByZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlc1trZXldID09IHZhbHVlTmFtZSkge1xuICAgICAgICByZXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiBhbnkgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXMpIHtcbiAgICAgIHJlc1trZXldID0gdGhpcy52YWx1ZXNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbFByb3BlcnRpZXMoKSB7XG4gICAgaWYgKHRoaXMucHJvcGVydGllcyAhPT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMucHJvcGVydGllcyA9IFtdO1xuICAgIHZhciBvYmpQcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzQnlPYmoodGhpcy5vYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9ialByb3BlcnRpZXNbaV0uaXNCaW5kYWJsZSkge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMucHVzaChvYmpQcm9wZXJ0aWVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIFN1cnZleUpTIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgY29tbWVudFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZXR0aW5ncy5jb21tZW50UHJlZml4O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGNvbW1lbnRQcmVmaXgodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5jb21tZW50UHJlZml4ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSXRlbVZhbHVlOiAoaXRlbTogYW55LCB0eXBlPzogc3RyaW5nKSA9PiBhbnk7XG4gIHB1YmxpYyBzdGF0aWMgaXRlbVZhbHVlTG9jU3RyQ2hhbmdlZDogKGFycjogQXJyYXk8YW55PikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nIG9yIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIHRyaW1TdHJpbmcgYSBib29sZWFuIHBhcmFtZXRlciwgZGVmYXVsdCB2YWx1ZSB0cnVlLiBJZiB0cnVlIHRoZW4gaXQgdHJpbXMgdGhlIHN0cmluZyBhbmQgZnVuY3Rpb25zIHJldHVybnMgdHJ1ZSBmb3IgYSBzdHJpbmcgdGhhdCBjb250YWlucyB3aGl0ZSBzcGFjZXMgb25seS5cbiAgICovXG4gIHB1YmxpYyBpc1ZhbHVlRW1wdHkodmFsdWU6IGFueSwgdHJpbVN0cmluZzogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBpZiAodHJpbVN0cmluZykge1xuICAgICAgdmFsdWUgPSB0aGlzLnRyaW1WYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHRyaW1WYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoISF2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSlcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBJc1Byb3BlcnR5RW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gXCJcIiAmJiB0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb3BlcnR5SGFzaDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgbG9jYWxpemFibGVTdHJpbmdzOiB7IFtpbmRleDogc3RyaW5nXTogTG9jYWxpemFibGVTdHJpbmcgfTtcbiAgcHJpdmF0ZSBhcnJheXNJbmZvOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH07XG4gIHByaXZhdGUgZXZlbnRMaXN0OiBBcnJheTxFdmVudEJhc2U8YW55Pj4gPSBbXTtcbiAgcHJpdmF0ZSBiaW5kaW5nc1ZhbHVlOiBCaW5kaW5ncztcbiAgcHJpdmF0ZSBpc0Rpc3Bvc2VkVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgb25Qcm9wQ2hhbmdlRnVuY3Rpb25zOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZ1bmM6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbiAgICBrZXk6IHN0cmluZztcbiAgfT47XG4gIHByb3RlY3RlZCBpc0xvYWRpbmdGcm9tSnNvblZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2FkaW5nT3duZXI6IEJhc2UgPSBudWxsO1xuICAvKipcbiAgICogRXZlbnQgdGhhdCByYWlzZSBvbiBwcm9wZXJ0eSBjaGFuZ2Ugb2YgdGhlIHNlbmRlciBvYmplY3RcbiAgICogc2VuZGVyIC0gdGhlIG9iamVjdCB0aGF0IG93bnMgdGhlIHByb3BlcnR5XG4gICAqIG9wdGlvbnMubmFtZSAtIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBvcHRpb25zLm9sZFZhbHVlIC0gb2xkIHZhbHVlLiBQbGVhc2Ugbm90ZSwgaXQgZXF1YWxzIHRvIG9wdGlvbnMubmV3VmFsdWUgaWYgcHJvcGVydHkgaXMgYW4gYXJyYXlcbiAgICogb3B0aW9ucy5uZXdWYWx1ZSAtIG5ldyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvblByb3BlcnR5Q2hhbmdlZDogRXZlbnRCYXNlPEJhc2U+ID0gdGhpcy5hZGRFdmVudDxCYXNlPigpO1xuICAvKipcbiAgICogRXZlbnQgdGhhdCByYWlzZWQgb24gY2hhbmdpbmcgcHJvcGVydHkgb2YgdGhlIEl0ZW1WYWx1ZSBvYmplY3QuXG4gICAqIHNlbmRlciAtIHRoZSBvYmplY3QgdGhhdCBvd25zIHRoZSBwcm9wZXJ0eVxuICAgKiBvcHRpb25zLnByb3BlcnR5TmFtZSAtIHRoZSBwcm9wZXJ0eSBuYW1lIHRvIHdoaWNoIEl0ZW1WYWx1ZSBhcnJheSBpcyBiZWxvbmcuIEl0IGNhbiBiZSBcImNob2ljZXNcIiBmb3IgZHJvcGRvd24gcXVlc3Rpb25cbiAgICogb3B0aW9ucy5vYmogLSB0aGUgaW5zdGFuY2Ugb2YgSXRlbVZhbHVlIG9iamVjdCB3aGljaCBwcm9wZXJ0eSBoYXMgYmVlbiBjaGFuZ2VkXG4gICAqIG9wdGlvbnMubmFtZSAtIHRoZSBwcm9wZXJ0eSBvZiBJdGVtT2JqZWN0IHRoYXQgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBvcHRpb25zLm9sZFZhbHVlIC0gb2xkIHZhbHVlXG4gICAqIG9wdGlvbnMubmV3VmFsdWUgLSBuZXcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBvbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogQmFzZSwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSB0aGlzLmFkZEV2ZW50PEJhc2U+KCk7XG5cbiAgZ2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyOiAocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nKSA9PiBhbnk7XG5cbiAgc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyOiAoXG4gICAgcHJvcGVydGllc0hhc2g6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBjcmVhdGVBcnJheUNvcmVIYW5kbGVyOiAocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nKSA9PiBBcnJheTxhbnk+O1xuICBzdXJ2ZXlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBpc0NyZWF0aW5nID0gdHJ1ZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5iaW5kaW5nc1ZhbHVlID0gbmV3IEJpbmRpbmdzKHRoaXMpO1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXModGhpcyk7XG4gICAgdGhpcy5vbkJhc2VDcmVhdGluZygpO1xuICAgIHRoaXMuaXNDcmVhdGluZyA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ldmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0W2ldLmNsZWFyKCk7XG4gICAgfVxuICAgIHRoaXMuaXNEaXNwb3NlZFZhbHVlID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGlzcG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwb3NlZFZhbHVlID09PSB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBhZGRFdmVudDxUPigpOiBFdmVudEJhc2U8VD4ge1xuICAgIHZhciByZXMgPSBuZXcgRXZlbnRCYXNlPFQ+KCk7XG4gICAgdGhpcy5ldmVudExpc3QucHVzaChyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmFzZUNyZWF0aW5nKCkge31cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBhcyBhIHN0cmluZyBhcyBpdCByZXByZXNlbnRzIGluIHRoZSBqc29uLiBJdCBzaG91bGQgYmUgaW4gbG93Y2FzZS5cbiAgICovXG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkoaXNMaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgaW5sdWRlZCBpbnRvIHN1cnZleSwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGluU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0U3VydmV5KHRydWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgYmluZGluZ3MoKTogQmluZGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmJpbmRpbmdzVmFsdWU7XG4gIH1cbiAgY2hlY2tCaW5kaW5ncyh2YWx1ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge31cbiAgcHJvdGVjdGVkIHVwZGF0ZUJpbmRpbmdzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdmFyIHZhbHVlTmFtZSA9IHRoaXMuYmluZGluZ3MuZ2V0VmFsdWVOYW1lQnlQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTtcbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMudXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7fVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZWxlbWVudCB0ZW1wbGF0ZSBuYW1lIHdpdGhvdXQgcHJlZml4LiBUeXBpY2FsbHkgaXQgZXF1YWxzIHRvIGdldFR5cGUoKS5cbiAgICogQHNlZSBnZXRUeXBlXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGxvYWRpbmcgZnJvbSBKc29uIGF0IHRoZSBjdXJyZW50IG1vbWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXNMb2FkaW5nRnJvbUpzb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5sb2FkaW5nT3duZXIgJiYgdGhpcy5sb2FkaW5nT3duZXIuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWU7XG4gIH1cblxuICBzdGFydExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSB0cnVlO1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogRGVzZXJpYWxpemVkIHRoZSBjdXJyZW50IG9iamVjdCBpbnRvIEpTT05cbiAgICogQHNlZSBmcm9tSlNPTlxuICAgKi9cbiAgcHVibGljIHRvSlNPTigpOiBhbnkge1xuICAgIHJldHVybiBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzKTtcbiAgfVxuICAvKipcbiAgICogTG9hZCBvYmplY3QgcHJvcGVydGllcyBhbmQgZWxlbWVudHMuIEl0IGRvZXNuJ3QgcmVzZXQgcHJvcGVydGllcyB0aGF0IHdhcyBjaGFuZ2VkIGJlZm9yZSBhbmQgdGhleSBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGpzb24gcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0ganNvbiB0aGUgb2JqZWN0IEpTT04gZGVmaW5pdGlvblxuICAgKiBAc2VlIHRvSlNPTlxuICAgKi9cbiAgcHVibGljIGZyb21KU09OKGpzb246IGFueSkge1xuICAgIHJldHVybiBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgY2xvbmUgb2YgdGhlIGV4aXN0aW5nIG9iamVjdC4gQ3JlYXRlIGEgbmV3IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCBsb2FkIGFsbCBwcm9wZXJ0aWVzIGludG8gaXQuXG4gICAqL1xuICBwdWJsaWMgY2xvbmUoKTogQmFzZSB7XG4gICAgdmFyIGNsb25lZE9iaiA9IDxCYXNlPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3ModGhpcy5nZXRUeXBlKCkpO1xuICAgIGNsb25lZE9iai5mcm9tSlNPTih0aGlzLnRvSlNPTigpKTtcbiAgICByZXR1cm4gY2xvbmVkT2JqO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXJpYWxpemFibGUgcHJvcGVydHkgdGhhdCBiZWxvbmdzIHRvIHRoaXMgaW5zdGFuY2UgYnkgcHJvcGVydHkgbmFtZS4gSXQgcmV0dXJucyBudWxsIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZXhpc3RzLlxuICAgKiBAcGFyYW0gcHJvcE5hbWUgcHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5QnlOYW1lKHByb3BOYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHJldHVybiBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLmdldFR5cGUoKSwgcHJvcE5hbWUpO1xuICB9XG4gIHB1YmxpYyBpc1Byb3BlcnR5VmlzaWJsZShwcm9wTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcCA9IHRoaXMuZ2V0UHJvcGVydHlCeU5hbWUocHJvcE5hbWUpO1xuICAgIHJldHVybiAhIXByb3AgPyBwcm9wLmlzVmlzaWJsZShcIlwiLCB0aGlzKSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlUHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBxdWVzdGlvbkNvdW50OiAwLFxuICAgICAgYW5zd2VyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgcmVxdWlyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgcmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBCYXNlLmNyZWF0ZVByb2dyZXNzSW5mbygpO1xuICB9XG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkKCkge31cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIGlmICghIXRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuYXJyYXlzSW5mb1trZXldO1xuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzSXRlbVZhbHVlcykge1xuICAgICAgICAgIHZhciBhcnIgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5KTtcbiAgICAgICAgICBpZiAoYXJyICYmICEhQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKVxuICAgICAgICAgICAgQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKGFycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIGl0ZW0uc3RyQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgYnkgbmFtZVxuICAgKiBAcGFyYW0gbmFtZSBwcm9wZXJ0eSBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvcGVydHlWYWx1ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUpO1xuICAgIGlmICh0aGlzLklzUHJvcGVydHlFbXB0eShyZXMpKSB7XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICB2YXIgcHJvcCA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KHRoaXMuZ2V0VHlwZSgpLCBuYW1lKTtcbiAgICAgIGlmICghIXByb3AgJiYgKCFwcm9wLmlzQ3VzdG9tIHx8ICF0aGlzLmlzQ3JlYXRpbmcpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5Jc1Byb3BlcnR5RW1wdHkocHJvcC5kZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkocHJvcC5kZWZhdWx0VmFsdWUpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gcHJvcC5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGlmIChwcm9wLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgcHJvcC50eXBlID09IFwic3dpdGNoXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHByb3AuaXNDdXN0b20gJiYgISFwcm9wLm9uR2V0VmFsdWUpIHJldHVybiBwcm9wLm9uR2V0VmFsdWUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnR5VmFsdWVDb3JlKHByb3BlcnRpZXNIYXNoOiBhbnksIG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcilcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcihwcm9wZXJ0aWVzSGFzaCwgbmFtZSk7XG4gICAgZWxzZSByZXR1cm4gcHJvcGVydGllc0hhc2hbbmFtZV07XG4gIH1cbiAgcHVibGljIGdlVmFsdWVGcm9tSGFzaCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5SGFzaFtcInZhbHVlXCJdO1xuICB9XG4gIHByb3RlY3RlZCBzZXRQcm9wZXJ0eVZhbHVlQ29yZShwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyICYmICF0aGlzLmlzRGlzcG9zZWRWYWx1ZSlcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyKHByb3BlcnRpZXNIYXNoLCBuYW1lLCB2YWwpO1xuICAgIGVsc2UgcHJvcGVydGllc0hhc2hbbmFtZV0gPSB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgIHJldHVybiAhIXN1cnZleSAmJiBzdXJ2ZXkuaXNFZGl0aW5nU3VydmV5RWxlbWVudDtcbiAgfVxuICBwdWJsaWMgaXRlcmF0ZVByb3BlcnRpZXNIYXNoKGZ1bmM6IChoYXNoOiBhbnksIGtleTogYW55KSA9PiB2b2lkKSB7XG4gICAgdmFyIGtleXM6IGFueVtdID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydHlIYXNoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgICAgIHRoaXMuaXNFZGl0aW5nU3VydmV5RWxlbWVudCAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KCg8YW55PnRoaXMpLnZhbHVlKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcblxuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiBmdW5jKHRoaXMucHJvcGVydHlIYXNoLCBrZXkpKTtcbiAgfVxuICAvKipcbiAgICogc2V0IHByb3BlcnR5IHZhbHVlXG4gICAqIEBwYXJhbSBuYW1lIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIHZhbCBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzZXRQcm9wZXJ0eVZhbHVlKG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gICAgaWYgKG9sZFZhbHVlICYmIEFycmF5LmlzQXJyYXkob2xkVmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCB2YWwpKSByZXR1cm47XG4gICAgICB2YXIgYXJyYXlJbmZvID0gdGhpcy5hcnJheXNJbmZvW25hbWVdO1xuICAgICAgdGhpcy5zZXRBcnJheShcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgIHZhbCxcbiAgICAgICAgYXJyYXlJbmZvID8gYXJyYXlJbmZvLmlzSXRlbVZhbHVlcyA6IGZhbHNlLFxuICAgICAgICBhcnJheUluZm8gPyBhcnJheUluZm8ub25QdXNoIDogbnVsbFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSwgdmFsKTtcbiAgICAgIGlmICghdGhpcy5pc0Rpc3Bvc2VkVmFsdWUgJiYgIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgdmFsKSkge1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJQcm9wZXJ0eVZhbHVlKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIG51bGwpO1xuICAgIGRlbGV0ZSB0aGlzLnByb3BlcnR5SGFzaFtuYW1lXTtcbiAgfVxuICBwdWJsaWMgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgc2VuZGVyOiBCYXNlLFxuICAgIGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzXG4gICkge31cbiAgcHVibGljIGl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICB0aGlzLm9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgb2JqOiBpdGVtLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIHByb3BlcnR5TmFtZTogaXRlbS5vd25lclByb3BlcnR5TmFtZSxcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge31cbiAgcHJvdGVjdGVkIHByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgYXJyYXlDaGFuZ2VzPzogQXJyYXlDaGFuZ2VzLFxuICAgIHRhcmdldD86IEJhc2VcbiAgKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUJpbmRpbmdzKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuZG9Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgbmFtZSxcbiAgICAgIG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWUsXG4gICAgICBhcnJheUNoYW5nZXMsXG4gICAgICB0aGlzXG4gICAgKTtcblxuICAgIGlmICghdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9uc1tpXS5mdW5jKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ludGVybmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIGFycmF5Q2hhbmdlcz86IEFycmF5Q2hhbmdlcyxcbiAgICB0YXJnZXQ/OiBCYXNlXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW50ZXJuYWwpIHJldHVybjtcbiAgICBpZiAoIXRhcmdldCkgdGFyZ2V0ID0gdGhpcztcbiAgICB2YXIgbm90aWZpZXI6IGFueSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgaWYgKCFub3RpZmllcikgbm90aWZpZXIgPSB0aGlzO1xuICAgIGlmICghIW5vdGlmaWVyLmRvUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjaykge1xuICAgICAgbm90aWZpZXIub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgICBuYW1lLFxuICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgYXJyYXlDaGFuZ2VzXG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGEgcHJvcGVydHkgdmFsdWUgY2hhbmdlZC5cbiAgICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHByb3BlcnR5IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBrZXkgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVnaXN0ZXJlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIGtleSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZnVuYzogYW55LFxuICAgIGtleTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBpZiAoIXRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zKSB7XG4gICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucyA9IFtdO1xuICAgIH1cbiAgICBpZiAoa2V5KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV07XG4gICAgICAgIGlmIChpdGVtLm5hbWUgPT0gbmFtZSAmJiBpdGVtLmtleSA9PSBrZXkpIHtcbiAgICAgICAgICBpdGVtLmZ1bmMgPSBmdW5jO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5wdXNoKHsgbmFtZTogbmFtZSwgZnVuYzogZnVuYywga2V5OiBrZXkgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBhIHByb3BlcnR5IHZhbHVlIGNoYW5nZWQgZnJvbSB0aGUgbmFtZXMgbGlzdC5cbiAgICogQHBhcmFtIG5hbWVzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgbmFtZXNcbiAgICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHByb3BlcnR5IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBrZXkgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVnaXN0ZXJlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIGtleSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIGZ1bmM6IGFueSxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lc1tpXSwgZnVuYywga2V5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgbm90aWZpY2F0aW9uIG9uIHByb3BlcnR5IHZhbHVlIGNoYW5nZWRcbiAgICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIGtleSB0aGUga2V5IHdpdGggd2hpY2ggeW91IGhhdmUgcmVnaXN0ZXJlZCB0aGUgbm90aWZpY2F0aW9uIGZvciB0aGlzIHByb3BlcnR5LiBJdCBjYW4gYmUgbnVsbC5cbiAgICovXG4gIHB1YmxpYyB1blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgaWYgKCF0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV07XG4gICAgICBpZiAoaXRlbS5uYW1lID09IG5hbWUgJiYgaXRlbS5rZXkgPT0ga2V5KSB7XG4gICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVW5yZWdpc3RlciBub3RpZmljYXRpb24gb24gcHJvcGVydHkgdmFsdWUgY2hhbmdlZCBmb3IgYWxsIHByb3BlcnRpZXMgaW4gdGhlIG5hbWVzIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG5hbWVzXG4gICAqIEBwYXJhbSBrZXkgdGhlIGtleSB3aXRoIHdoaWNoIHlvdSBoYXZlIHJlZ2lzdGVyZWQgdGhlIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eS4gSXQgY2FuIGJlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgdW5SZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIGtleTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZXNbaV0sIGtleSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjcmVhdGVDdXN0b21Mb2NhbGl6YWJsZU9iaihuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgbG9jU3RyID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhuYW1lKTtcbiAgICBpZiAobG9jU3RyIHx8ICEoPGFueT50aGlzKS5nZXRMb2NhbGUpIHJldHVybjtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKG5hbWUsIDxJTG9jYWxpemFibGVPd25lcj4oPGFueT50aGlzKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvd25lcjogSUxvY2FsaXphYmxlT3duZXIsXG4gICAgdXNlTWFya0Rvd246IGJvb2xlYW4gPSBmYWxzZVxuICApOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgdmFyIGxvY1N0ciA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyhvd25lciwgdXNlTWFya0Rvd24sIG5hbWUpO1xuICAgIGxvY1N0ci5vblN0ckNoYW5nZWQgPSAob2xkVmFsdWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3NbbmFtZV0gPSBsb2NTdHI7XG4gICAgcmV0dXJuIGxvY1N0cjtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZTogc3RyaW5nKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jYWxpemFibGVTdHJpbmdzID8gdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3NbbmFtZV0gOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGRlZmF1bHRTdHI6IHN0cmluZyA9IFwiXCJcbiAgKTogc3RyaW5nIHtcbiAgICB2YXIgbG9jU3RyID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhuYW1lKTtcbiAgICBpZiAoIWxvY1N0cikgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHJlcyA9IGxvY1N0ci50ZXh0O1xuICAgIHJldHVybiByZXMgPyByZXMgOiBkZWZhdWx0U3RyO1xuICB9XG4gIHB1YmxpYyBzZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvY1N0ciA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZSk7XG4gICAgaWYgKCFsb2NTdHIpIHJldHVybjtcbiAgICBsb2NTdHIudGV4dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBhZGRVc2VkTG9jYWxlcyhsb2NhbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKCEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyhpdGVtLCBsb2NhbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmFkZFVzZWRMb2NhbGVzKSB7XG4gICAgICAgICAgICBpdGVtLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2VhcmNoVGV4dCh0ZXh0OiBzdHJpbmcsIGZvdW5kZWQ6IEFycmF5PElGaW5kRWxlbWVudD4pIHtcbiAgICB2YXIgc3RyczogQXJyYXk8TG9jYWxpemFibGVTdHJpbmc+ID0gW107XG4gICAgdGhpcy5nZXRTZWFyY2hhYmxlTG9jYWxpemVkU3RyaW5ncyhzdHJzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdHJzW2ldLnNldEZpbmRUZXh0KHRleHQpKSB7XG4gICAgICAgIGZvdW5kZWQucHVzaCh7IGVsZW1lbnQ6IHRoaXMsIHN0cjogc3Ryc1tpXSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRTZWFyY2hhYmxlTG9jYWxpemVkU3RyaW5ncyhhcnI6IEFycmF5PExvY2FsaXphYmxlU3RyaW5nPikge1xuICAgIGlmICghIXRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICBsZXQga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgdGhpcy5nZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5c1tpXSk7XG4gICAgICAgIGlmIChpdGVtKSBhcnIucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmFycmF5c0luZm8pIHJldHVybjtcbiAgICBsZXQga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHRoaXMuZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5cyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5c1tpXSk7XG4gICAgICBpZiAoIWl0ZW1zKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgYXJyLnB1c2goaXRlbXNbal0ubG9jVGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7fVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge31cbiAgcHJvdGVjdGVkIEFkZExvY1N0cmluZ1RvVXNlZExvY2FsZXMoXG4gICAgbG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyxcbiAgICBsb2NhbGVzOiBBcnJheTxzdHJpbmc+XG4gICkge1xuICAgIHZhciBsb2NzID0gbG9jU3RyLmdldExvY2FsZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsb2NhbGVzLmluZGV4T2YobG9jc1tpXSkgPCAwKSB7XG4gICAgICAgIGxvY2FsZXMucHVzaChsb2NzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1WYWx1ZXMobmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmNyZWF0ZU5ld0FycmF5KG5hbWUsIGZ1bmN0aW9uKGl0ZW06IGFueSkge1xuICAgICAgaXRlbS5sb2NPd25lciA9IHNlbGY7XG4gICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gbmFtZTtcbiAgICB9KTtcbiAgICB0aGlzLmFycmF5c0luZm9bbmFtZV0uaXNJdGVtVmFsdWVzID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgbm90aWZ5QXJyYXlDaGFuZ2VkKGFyOiBhbnksIGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzKSB7XG4gICAgISFhci5vbkFycmF5Q2hhbmdlZCAmJiBhci5vbkFycmF5Q2hhbmdlZChhcnJheUNoYW5nZXMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdBcnJheUNvcmUobmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5jcmVhdGVBcnJheUNvcmVIYW5kbGVyKSB7XG4gICAgICByZXMgPSB0aGlzLmNyZWF0ZUFycmF5Q29yZUhhbmRsZXIodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmVzID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGVuc3VyZUFycmF5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvblB1c2g6IGFueSA9IG51bGwsXG4gICAgb25SZW1vdmU6IGFueSA9IG51bGxcbiAgKSB7XG4gICAgaWYgKHRoaXMuYXJyYXlzSW5mbyAmJiB0aGlzLmFycmF5c0luZm9bbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdBcnJheShuYW1lLCBvblB1c2gsIG9uUmVtb3ZlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVOZXdBcnJheShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb25QdXNoOiBhbnkgPSBudWxsLFxuICAgIG9uUmVtb3ZlOiBhbnkgPSBudWxsXG4gICk6IEFycmF5PGFueT4ge1xuICAgIHZhciBuZXdBcnJheSA9IHRoaXMuY3JlYXRlTmV3QXJyYXlDb3JlKG5hbWUpO1xuICAgIGlmICghdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICB0aGlzLmFycmF5c0luZm8gPSB7fTtcbiAgICB9XG4gICAgdGhpcy5hcnJheXNJbmZvW25hbWVdID0geyBvblB1c2g6IG9uUHVzaCwgaXNJdGVtVmFsdWVzOiBmYWxzZSB9O1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBuZXdBcnJheS5wdXNoID0gZnVuY3Rpb24odmFsdWUpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkucHVzaC5jYWxsKG5ld0FycmF5LCB2YWx1ZSk7XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblB1c2gpIG9uUHVzaCh2YWx1ZSwgbmV3QXJyYXkubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMoXG4gICAgICAgICAgbmV3QXJyYXkubGVuZ3RoIC0gMSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIFt2YWx1ZV0sXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG5ld0FycmF5LnVuc2hpZnQgPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS51bnNoaWZ0LmNhbGwoXG4gICAgICAgIG5ld0FycmF5LFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGlmICghc2VsZi5pc0Rpc3Bvc2VkVmFsdWUpIHtcbiAgICAgICAgaWYgKG9uUHVzaCkgb25QdXNoKHZhbHVlLCBuZXdBcnJheS5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcygwLCAwLCBbdmFsdWVdLCBbXSk7XG4gICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICBzZWxmLm5vdGlmeUFycmF5Q2hhbmdlZChuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBuZXdBcnJheS5wb3AgPSBmdW5jdGlvbigpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkucG9wLmNhbGwobmV3QXJyYXkpO1xuICAgICAgaWYgKCFzZWxmLmlzRGlzcG9zZWRWYWx1ZSkge1xuICAgICAgICBpZiAob25SZW1vdmUpIG9uUmVtb3ZlKHJlc3VsdCk7XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMobmV3QXJyYXkubGVuZ3RoIC0gMSwgMSwgW10sIFtdKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG5ld0FycmF5LnNwbGljZSA9IGZ1bmN0aW9uKFxuICAgICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgICBkZWxldGVDb3VudD86IG51bWJlcixcbiAgICAgIC4uLml0ZW1zOiBhbnlbXVxuICAgICk6IGFueVtdIHtcbiAgICAgIGlmICghc3RhcnQpIHN0YXJ0ID0gMDtcbiAgICAgIGlmICghZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3QXJyYXkpLnNwbGljZS5jYWxsKFxuICAgICAgICBuZXdBcnJheSxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGRlbGV0ZUNvdW50LFxuICAgICAgICAuLi5pdGVtc1xuICAgICAgKTtcbiAgICAgIGlmICghaXRlbXMpIGl0ZW1zID0gW107XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblJlbW92ZSAmJiByZXN1bHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb25SZW1vdmUocmVzdWx0W2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uUHVzaCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9uUHVzaChpdGVtc1tpXSwgc3RhcnQgKyBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ld0FycmF5O1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtVmFsdWVUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0QXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHNyYzogYW55W10sXG4gICAgZGVzdDogYW55W10sXG4gICAgaXNJdGVtVmFsdWVzOiBib29sZWFuLFxuICAgIG9uUHVzaDogYW55XG4gICkge1xuICAgIHZhciBkZWxldGVkSXRlbXMgPSBbXS5jb25jYXQoc3JjKTtcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKS5zcGxpY2UuY2FsbChzcmMsIDAsIHNyYy5sZW5ndGgpO1xuICAgIGlmICghIWRlc3QpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbSA9IGRlc3RbaV07XG4gICAgICAgIGlmIChpc0l0ZW1WYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoISFCYXNlLmNyZWF0ZUl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgaXRlbSA9IEJhc2UuY3JlYXRlSXRlbVZhbHVlKGl0ZW0sIHRoaXMuZ2V0SXRlbVZhbHVlVHlwZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykucHVzaC5jYWxsKHNyYywgaXRlbSk7XG4gICAgICAgIGlmIChvblB1c2gpIG9uUHVzaChzcmNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKFxuICAgICAgMCxcbiAgICAgIGRlbGV0ZWRJdGVtcy5sZW5ndGgsXG4gICAgICBzcmMsXG4gICAgICBkZWxldGVkSXRlbXNcbiAgICApO1xuICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgZGVsZXRlZEl0ZW1zLCBzcmMsIGFycmF5Q2hhbmdlcyk7XG4gICAgdGhpcy5ub3RpZnlBcnJheUNoYW5nZWQoc3JjLCBhcnJheUNoYW5nZXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1R3b1ZhbHVlRXF1YWxzKFxuICAgIHg6IGFueSxcbiAgICB5OiBhbnksXG4gICAgY2FzZUluU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UsXG4gICAgdHJpbVN0cmluZzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChjYXNlSW5TZW5zaXRpdmUpIHtcbiAgICAgIHggPSB0aGlzLmdldFZhbHVlSW5Mb3dDYXNlKHgpO1xuICAgICAgeSA9IHRoaXMuZ2V0VmFsdWVJbkxvd0Nhc2UoeSk7XG4gICAgfVxuICAgIGlmICh0cmltU3RyaW5nKSB7XG4gICAgICB4ID0gdGhpcy50cmltVmFsdWUoeCk7XG4gICAgICB5ID0gdGhpcy50cmltVmFsdWUoeSk7XG4gICAgfVxuICAgIHJldHVybiBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeCwgeSk7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY29weU9iamVjdChkc3Q6IGFueSwgc3JjOiBhbnkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICB2YXIgc291cmNlID0gc3JjW2tleV07XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBzb3VyY2UgPSB7fTtcbiAgICAgICAgdGhpcy5jb3B5T2JqZWN0KHNvdXJjZSwgc3JjW2tleV0pO1xuICAgICAgfVxuICAgICAgZHN0W2tleV0gPSBzb3VyY2U7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb3B5Q3NzQ2xhc3NlcyhkZXN0OiBhbnksIHNvdXJjZTogYW55KSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIiB8fCBzb3VyY2UgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIGRlc3RbXCJyb290XCJdID0gc291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBCYXNlLmNvcHlPYmplY3QoZGVzdCwgc291cmNlKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZUluTG93Q2FzZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCEhdmFsICYmIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5Q2hhbmdlcyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLFxuICAgIHB1YmxpYyBkZWxldGVDb3VudDogbnVtYmVyLFxuICAgIHB1YmxpYyBpdGVtc1RvQWRkOiBhbnlbXSxcbiAgICBwdWJsaWMgZGVsZXRlZEl0ZW1zOiBhbnlbXVxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudDxUIGV4dGVuZHMgRnVuY3Rpb24sIE9wdGlvbnM+IHtcbiAgcHVibGljIG9uQ2FsbGJhY2tzQ2hhbmdlZDogKCkgPT4gdm9pZDtcbiAgcHJvdGVjdGVkIGNhbGxiYWNrczogQXJyYXk8VD47XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuY2FsbGJhY2tzIHx8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aCA9PSAwO1xuICB9XG4gIHB1YmxpYyBmaXJlKHNlbmRlcjogYW55LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2FsbGJhY2tzW2ldKHNlbmRlciwgb3B0aW9ucyk7XG4gICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKSByZXR1cm47XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgYWRkKGZ1bmM6IFQpIHtcbiAgICBpZiAodGhpcy5oYXNGdW5jKGZ1bmMpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrcykge1xuICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgQXJyYXk8VD4oKTtcbiAgICB9XG4gICAgdGhpcy5jYWxsYmFja3MucHVzaChmdW5jKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFja0NoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlKGZ1bmM6IFQpIHtcbiAgICBpZiAodGhpcy5oYXNGdW5jKGZ1bmMpKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmNhbGxiYWNrcy5pbmRleE9mKGZ1bmMsIDApO1xuICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzRnVuYyhmdW5jOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFja3MuaW5kZXhPZihmdW5jLCAwKSA+IC0xO1xuICB9XG4gIHByaXZhdGUgZmlyZUNhbGxiYWNrQ2hhbmdlZCgpIHtcbiAgICBpZiAoISF0aGlzLm9uQ2FsbGJhY2tzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5vbkNhbGxiYWNrc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50QmFzZTxUPiBleHRlbmRzIEV2ZW50PFxuICAoc2VuZGVyOiBULCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgYW55XG4+IHt9XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleSwgSVN1cnZleURhdGEgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuXG4vKipcbiAqIFRoZSBjYWxjdWxhdGVkIHZhbHVlIGlzIGEgd2F5IHRvIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gU3VydmV5IENyZWF0b3IuXG4gKiBJdCBoYXMgdHdvIG1haW4gcHJvcGVydGllczogbmFtZSBhbmQgZXhwcmVzc2lvbi4gQmFzZWQgb24gZXhwcmVzc2lvbiB0aGUgdmFsdWUgcmVhZC1vbmx5IHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC5cbiAqIFRoZSBuYW1lIHByb3BlcnR5IHNob3VsZCBiZSB1bmlxdWUgdGhvdWdoIGFsbCBjYWxjdWxhdGVkIHZhbHVlcy5cbiAqIEl0IHVzZXMgc3VydmV5LmdldFZhcmlhYmxlL3NlcnV2ZXkuc2V0VmFyaWFibGUgZnVuY3Rpb25zIHRvIGdldC9zZXQgaXRzIHZhbHVlLiBUaGUgY2xhc3MgZG8gbm90IHN0b3JlIGl0cyB2YWx1ZSBpbnRlcm5hbGx5LlxuICogWW91IG1heSBzZXQgaW5jbHVkZUludG9SZXN1bHQgcHJvcGVydHkgdG8gdHJ1ZSB0byBzdG9yZSB0aGlzIGNhbGN1bGF0ZWQgdmFsdWUgaW50byBzdXJ2ZXkgcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgQ2FsY3VsYXRlZFZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIHByaXZhdGUgZGF0YTogSVN1cnZleURhdGE7XG4gIHByaXZhdGUgZXhwcmVzc2lvbklzUnVubmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGV4cHJlc3Npb25SdW5uZXI6IEV4cHJlc3Npb25SdW5uZXI7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IG51bGwsIGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGlmICghIWV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRPd25lcihkYXRhOiBJU3VydmV5RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNhbGN1bGF0ZWR2YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhICYmICEhKDxhbnk+dGhpcy5kYXRhKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmRhdGEpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBvd25lcigpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgbmFtZS4gSXQgc2hvdWxkIGJlIG5vbiBlbXB0eSBhbmQgdW5pcXVlLlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGluY2x1ZGUgdGhlIG5vbi1lbXB0eSBjYWxjdWxhdGVkIHZhbHVlIGludG8gc3VydmV5IHJlc3VsdCwgc3VydmV5LmRhdGEgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGluY2x1ZGVJbnRvUmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbmNsdWRlSW50b1Jlc3VsdFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpbmNsdWRlSW50b1Jlc3VsdCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbmNsdWRlSW50b1Jlc3VsdFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgRXhwcmVzc2lvbiB0aGF0IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2YWx1ZS4gWW91IG1heSB1c2Ugc3RhbmRhcmQgb3BlcmF0b3JzIGxpa2UgKywgLSwgKiBhbmQgLywgc3F1YXJlcyAoKS4gSGVyZSBpcyB0aGUgZXhhbXBsZSBvZiBhY2Nlc3NpbmcgdGhlIHF1ZXN0aW9uIHZhbHVlIHtxdWVzdGlvbm5hbWV9LlxuICAgKiA8YnIvPkV4YW1wbGU6IFwiKHtxdWFudGl0eX0gKiB7cHJpY2V9KSAqICgxMDAgLSB7ZGlzY291bnR9KSAvIDEwMFwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgfVxuICBwdWJsaWMgbG9jQ2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgdW5sb2NDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGlzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICBwdWJsaWMgcmVzZXRDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmlzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBkb0NhbGN1bGF0aW9uKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAodGhpcy5pc0NhbGN1bGF0ZWQpIHJldHVybjtcbiAgICB0aGlzLnJ1bkV4cHJlc3Npb25Db3JlKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5pc0NhbGN1bGF0ZWQgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyBydW5FeHByZXNzaW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdGhpcy5ydW5FeHByZXNzaW9uQ29yZShudWxsLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldFZhcmlhYmxlKHRoaXMubmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUodGhpcy5uYW1lLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNhblJ1bkV4cHJlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5kYXRhICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJlxuICAgICAgISF0aGlzLmV4cHJlc3Npb24gJiZcbiAgICAgICF0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgJiZcbiAgICAgICEhdGhpcy5uYW1lXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlcnVuRXhwcmVzc2lvbigpIHtcbiAgICBpZiAoIXRoaXMuY2FuUnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMucnVuRXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJ1bkV4cHJlc3Npb25Db3JlKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuY2FuUnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMuZW5zdXJlRXhwcmVzc2lvbih2YWx1ZXMpO1xuICAgIHRoaXMubG9jQ2FsY3VsYXRpb24oKTtcbiAgICBpZiAoISFjYWxjdWxhdGVkVmFsdWVzKSB7XG4gICAgICB0aGlzLnJ1bkRlcGVuZGVudEV4cHJlc3Npb25zKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1bkRlcGVuZGVudEV4cHJlc3Npb25zKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICB2YXIgdmFyaWFibGVzID0gdGhpcy5leHByZXNzaW9uUnVubmVyLmdldFZhcmlhYmxlcygpO1xuICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2FsY0l0ZW0gPSBjYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgICAgaWYgKGNhbGNJdGVtID09PSB0aGlzIHx8IHZhcmlhYmxlcy5pbmRleE9mKGNhbGNJdGVtLm5hbWUpIDwgMCkgY29udGludWU7XG4gICAgICBjYWxjSXRlbS5kb0NhbGN1bGF0aW9uKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICB2YWx1ZXNbY2FsY0l0ZW0ubmFtZV0gPSBjYWxjSXRlbS52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVFeHByZXNzaW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoISF0aGlzLmV4cHJlc3Npb25SdW5uZXIpIHJldHVybjtcbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcih0aGlzLmV4cHJlc3Npb24pO1xuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gbmV3VmFsdWUgPT4ge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgfTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNhbGN1bGF0ZWR2YWx1ZVwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFuYW1lXCIsIGlzVW5pcXVlOiB0cnVlIH0sXG4gICAgXCJleHByZXNzaW9uOmV4cHJlc3Npb25cIixcbiAgICBcImluY2x1ZGVJbnRvUmVzdWx0OmJvb2xlYW5cIixcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxjdWxhdGVkVmFsdWUoKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVRleHRQcm9jZXNzb3IsIElRdWVzdGlvbiwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyLCBKc29uT2JqZWN0UHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBXZWJSZXF1ZXN0RXJyb3IsIFdlYlJlcXVlc3RFbXB0eUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5cbmNsYXNzIFhtbFBhcnNlciB7XG4gIHByaXZhdGUgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBwdWJsaWMgYXNzaWduVmFsdWUodGFyZ2V0OiBhbnksIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXS5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdXS5jb25jYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDEgJiZcbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlKVswXSA9PT0gbmFtZVxuICAgICkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWVbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgeG1sMkpzb24oeG1sTm9kZTogYW55LCByZXN1bHQ6IGFueSkge1xuICAgIGlmICh4bWxOb2RlLmNoaWxkcmVuICYmIHhtbE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZE5vZGUgPSB4bWxOb2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICBsZXQgY2hpbGRPYmplY3QgPSB7fTtcbiAgICAgICAgdGhpcy54bWwySnNvbihjaGlsZE5vZGUsIGNoaWxkT2JqZWN0KTtcbiAgICAgICAgdGhpcy5hc3NpZ25WYWx1ZShyZXN1bHQsIGNoaWxkTm9kZS5ub2RlTmFtZSwgY2hpbGRPYmplY3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2lnblZhbHVlKHJlc3VsdCwgeG1sTm9kZS5ub2RlTmFtZSwgeG1sTm9kZS50ZXh0Q29udGVudCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBwYXJzZVhtbFN0cmluZyh4bWxTdHJpbmc6IHN0cmluZykge1xuICAgIGxldCB4bWxSb290ID0gdGhpcy5wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcbiAgICBsZXQganNvbiA9IHt9O1xuICAgIHRoaXMueG1sMkpzb24oeG1sUm9vdCwganNvbik7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuLyoqXG4gKiBBIGRlZmluaXRpb24gZm9yIGZpbGxpbmcgY2hvaWNlcyBmb3IgY2hlY2tib3gsIGRyb3Bkb3duIGFuZCByYWRpb2dyb3VwIHF1ZXN0aW9ucyBmcm9tIHJlc2Z1bGwgc2VydmljZXMuXG4gKiBUaGUgcnVuIG1ldGhvZCBjYWxsIGEgcmVzdGZ1bCBzZXJ2aWNlIGFuZCByZXN1bHRzIGNhbiBiZSBnZXQgb24gZ2V0UmVzdWx0Q2FsbGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBDaG9pY2VzUmVzdGZ1bCBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIHN0YXRpYyBjYWNoZVRleHQgPSBcIntDQUNIRX1cIjtcbiAgcHJpdmF0ZSBzdGF0aWMgbm9DYWNoZVRleHQgPSBcIntOT0NBQ0hFfVwiO1xuICBwdWJsaWMgc3RhdGljIGdldCBFbmNvZGVQYXJhbWV0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVycztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBFbmNvZGVQYXJhbWV0ZXJzKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLndlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY2xlYXJDYWNoZSgpIHtcbiAgICBDaG9pY2VzUmVzdGZ1bC5pdGVtc1Jlc3VsdCA9IHt9O1xuICAgIENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHMgPSB7fTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBpdGVtc1Jlc3VsdDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIHNlbmRpbmdTYW1lUmVxdWVzdHM6IHtcbiAgICBbaW5kZXg6IHN0cmluZ106IEFycmF5PENob2ljZXNSZXN0ZnVsPjtcbiAgfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBhZGRTYW1lUmVxdWVzdChvYmo6IENob2ljZXNSZXN0ZnVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmouaXNVc2luZ0NhY2hlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGhhc2ggPSBvYmoub2JqSGFzaDtcbiAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1toYXNoXTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF0gPSBbXTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmVzLnB1c2gob2JqKTtcbiAgICBvYmouaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIHVucmVnaXN0ZXJTYW1lUmVxdWVzdHMob2JqOiBDaG9pY2VzUmVzdGZ1bCwgaXRlbXM6IGFueSkge1xuICAgIGlmICghb2JqLmlzVXNpbmdDYWNoZSkgcmV0dXJuO1xuICAgIHZhciByZXMgPSBDaG9pY2VzUmVzdGZ1bC5zZW5kaW5nU2FtZVJlcXVlc3RzW29iai5vYmpIYXNoXTtcbiAgICBkZWxldGUgQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICBpZiAoISFyZXNbaV0uZ2V0UmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgcmVzW2ldLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBvbkJlZm9yZVNlbmRSZXF1ZXN0OiAoXG4gICAgc2VuZGVyOiBDaG9pY2VzUmVzdGZ1bCxcbiAgICBvcHRpb25zOiB7IHJlcXVlc3Q6IFhNTEh0dHBSZXF1ZXN0IH1cbiAgKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBnZXRDYWNoZWRJdGVtc1Jlc3VsdChvYmo6IENob2ljZXNSZXN0ZnVsKTogYm9vbGVhbiB7XG4gICAgdmFyIGhhc2ggPSBvYmoub2JqSGFzaDtcbiAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbaGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob2JqLmdldFJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBvYmouZ2V0UmVzdWx0Q2FsbGJhY2socmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBsYXN0T2JqSGFzaDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1J1bm5pbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkVXJsOiBzdHJpbmcgPSBcIlwiO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkUGF0aDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1VzaW5nQ2FjaGVGcm9tVXJsOiBib29sZWFuID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgb25Qcm9jZXNzZWRVcmxDYWxsYmFjazogKHVybDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHB1YmxpYyBnZXRSZXN1bHRDYWxsYmFjazogKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSA9PiB2b2lkO1xuICBwdWJsaWMgYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIHVwZGF0ZVJlc3VsdENhbGxiYWNrOiAoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgc2VydmVyUmVzdWx0OiBhbnlcbiAgKSA9PiBBcnJheTxJdGVtVmFsdWU+O1xuICBwdWJsaWMgZ2V0SXRlbVZhbHVlQ2FsbGJhY2s6IChpdGVtOiBhbnkpID0+IGFueTtcbiAgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XG4gIHB1YmxpYyBvd25lcjogSVF1ZXN0aW9uO1xuICBwdWJsaWMgY3JlYXRlSXRlbVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gbmV3IEl0ZW1WYWx1ZSh2YWx1ZSk7XG4gIH07XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLm93bmVyID8gdGhpcy5vd25lci5zdXJ2ZXkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBydW4odGV4dFByb2Nlc3NvcjogSVRleHRQcm9jZXNzb3IgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLnVybCB8fCAhdGhpcy5nZXRSZXN1bHRDYWxsYmFjaykgcmV0dXJuO1xuICAgIHRoaXMucHJvY2Vzc2VkVGV4dCh0ZXh0UHJvY2Vzc29yKTtcbiAgICBpZiAoIXRoaXMucHJvY2Vzc2VkVXJsKSB7XG4gICAgICB0aGlzLmRvRW1wdHlSZXN1bHRDYWxsYmFjayh7fSk7XG4gICAgICB0aGlzLmxhc3RPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0T2JqSGFzaCA9PT0gdGhpcy5vYmpIYXNoKSByZXR1cm47XG4gICAgdGhpcy5sYXN0T2JqSGFzaCA9IHRoaXMub2JqSGFzaDtcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICBpZiAodGhpcy51c2VDaGFuZ2VkSXRlbXNSZXN1bHRzKCkpIHJldHVybjtcbiAgICBpZiAoQ2hvaWNlc1Jlc3RmdWwuYWRkU2FtZVJlcXVlc3QodGhpcykpIHJldHVybjtcbiAgICB0aGlzLnNlbmRSZXF1ZXN0KCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1VzaW5nQ2FjaGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzUnVubmluZygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzV2FpdGluZ0ZvclBhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsICYmICF0aGlzLnByb2Nlc3NlZFVybDtcbiAgfVxuICBwcm90ZWN0ZWQgdXNlQ2hhbmdlZEl0ZW1zUmVzdWx0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2hvaWNlc1Jlc3RmdWwuZ2V0Q2FjaGVkSXRlbXNSZXN1bHQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBkb0VtcHR5UmVzdWx0Q2FsbGJhY2soc2VydmVyUmVzdWx0OiBhbnkpIHtcbiAgICB2YXIgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICBpZiAodGhpcy51cGRhdGVSZXN1bHRDYWxsYmFjaykge1xuICAgICAgaXRlbXMgPSB0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpO1xuICAgIH1cbiAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgfVxuICBwcml2YXRlIHByb2Nlc3NlZFRleHQodGV4dFByb2Nlc3NvcjogSVRleHRQcm9jZXNzb3IpIHtcbiAgICB2YXIgdXJsVGV4dCA9IHRoaXMudXJsO1xuICAgIGlmICghIXVybFRleHQpIHtcbiAgICAgIHVybFRleHQgPSB1cmxUZXh0XG4gICAgICAgIC5yZXBsYWNlKENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCwgXCJcIilcbiAgICAgICAgLnJlcGxhY2UoQ2hvaWNlc1Jlc3RmdWwubm9DYWNoZVRleHQsIFwiXCIpO1xuICAgIH1cbiAgICBpZiAodGV4dFByb2Nlc3Nvcikge1xuICAgICAgdmFyIHBVcmwgPSB0ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0RXgoXG4gICAgICAgIHVybFRleHQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyc1xuICAgICAgKTtcbiAgICAgIHZhciBwUGF0aCA9IHRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHRFeChcbiAgICAgICAgdGhpcy5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgc2V0dGluZ3Mud2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnNcbiAgICAgICk7XG4gICAgICBpZiAoIXBVcmwuaGFzQWxsVmFsdWVzT25MYXN0UnVuIHx8ICFwUGF0aC5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBcIlwiO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFBhdGggPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBwVXJsLnRleHQ7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHBQYXRoLnRleHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkVXJsID0gdXJsVGV4dDtcbiAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHRoaXMucGF0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Qcm9jZXNzZWRVcmxDYWxsYmFjaykge1xuICAgICAgdGhpcy5vblByb2Nlc3NlZFVybENhbGxiYWNrKHRoaXMucHJvY2Vzc2VkVXJsLCB0aGlzLnByb2Nlc3NlZFBhdGgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZShyZXNwb25zZTogYW55KSB7XG4gICAgbGV0IHBhcnNlZFJlc3BvbnNlO1xuICAgIGlmIChcbiAgICAgICEhcmVzcG9uc2UgJiZcbiAgICAgIHR5cGVvZiByZXNwb25zZS5pbmRleE9mID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIHJlc3BvbnNlLmluZGV4T2YoXCI8XCIpID09PSAwXG4gICAgKSB7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IFhtbFBhcnNlcigpO1xuICAgICAgcGFyc2VkUmVzcG9uc2UgPSBwYXJzZXIucGFyc2VYbWxTdHJpbmcocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHBhcnNlZFJlc3BvbnNlID0gKHJlc3BvbnNlIHx8IFwiXCIpXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLm1hcCgoczogYW55KSA9PiBzLnRyaW0oXCIgXCIpKVxuICAgICAgICAgIC5maWx0ZXIoKHM6IGFueSkgPT4gISFzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICB9XG4gIHByb3RlY3RlZCBzZW5kUmVxdWVzdCgpIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy5wcm9jZXNzZWRVcmwpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbG9hZGluZ09iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5iZWZvcmVMb2FkUmVxdWVzdCgpO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBzZWxmLm9uTG9hZChzZWxmLnBhcnNlUmVzcG9uc2UoeGhyLnJlc3BvbnNlKSwgbG9hZGluZ09iakhhc2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5vbkVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvcHRpb25zID0geyByZXF1ZXN0OiB4aHIgfTtcbiAgICBpZiAoISFDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0KSB7XG4gICAgICBDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0KHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLmJlZm9yZVNlbmRSZXF1ZXN0KCk7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNob2ljZXNCeVVybFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMudXJsICYmXG4gICAgICAhdGhpcy5wYXRoICYmXG4gICAgICAhdGhpcy52YWx1ZU5hbWUgJiZcbiAgICAgICF0aGlzLnRpdGxlTmFtZSAmJlxuICAgICAgIXRoaXMuaW1hZ2VMaW5rTmFtZVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllcygpO1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2godGhpcy5nZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydGllc1tpXS5uYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgKyBcIk5hbWVcIjtcbiAgfVxuICBwcml2YXRlIGdldEN1c3RvbVByb3BlcnRpZXMoKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXModGhpcy5pdGVtVmFsdWVUeXBlKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ2YWx1ZVwiIHx8XG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ0ZXh0XCIgfHxcbiAgICAgICAgcHJvcGVydGllc1tpXS5uYW1lID09PSBcInZpc2libGVJZlwiIHx8XG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJlbmFibGVJZlwiXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldERhdGEoanNvbjogYW55KSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGlmIChqc29uLnVybCkgdGhpcy51cmwgPSBqc29uLnVybDtcbiAgICBpZiAoanNvbi5wYXRoKSB0aGlzLnBhdGggPSBqc29uLnBhdGg7XG4gICAgaWYgKGpzb24udmFsdWVOYW1lKSB0aGlzLnZhbHVlTmFtZSA9IGpzb24udmFsdWVOYW1lO1xuICAgIGlmIChqc29uLnRpdGxlTmFtZSkgdGhpcy50aXRsZU5hbWUgPSBqc29uLnRpdGxlTmFtZTtcbiAgICBpZiAoanNvbi5pbWFnZUxpbmtOYW1lKSB0aGlzLmltYWdlTGlua05hbWUgPSBqc29uLmltYWdlTGlua05hbWU7XG4gICAgaWYgKGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlICE9PSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmFsbG93RW1wdHlSZXNwb25zZSA9IGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgIGlmIChqc29uLmF0dGFjaE9yaWdpbmFsSXRlbXMgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcyA9IGpzb24uYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoanNvbltwcm9wZXJ0aWVzW2ldXSkgKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0gPSBqc29uW3Byb3BlcnRpZXNbaV1dO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGF0YSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkpIHJldHVybiBudWxsO1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLnVybCkgcmVzW1widXJsXCJdID0gdGhpcy51cmw7XG4gICAgaWYgKHRoaXMucGF0aCkgcmVzW1wicGF0aFwiXSA9IHRoaXMucGF0aDtcbiAgICBpZiAodGhpcy52YWx1ZU5hbWUpIHJlc1tcInZhbHVlTmFtZVwiXSA9IHRoaXMudmFsdWVOYW1lO1xuICAgIGlmICh0aGlzLnRpdGxlTmFtZSkgcmVzW1widGl0bGVOYW1lXCJdID0gdGhpcy50aXRsZU5hbWU7XG4gICAgaWYgKHRoaXMuaW1hZ2VMaW5rTmFtZSkgcmVzW1wiaW1hZ2VMaW5rTmFtZVwiXSA9IHRoaXMuaW1hZ2VMaW5rTmFtZTtcbiAgICBpZiAodGhpcy5hbGxvd0VtcHR5UmVzcG9uc2UpXG4gICAgICByZXNbXCJhbGxvd0VtcHR5UmVzcG9uc2VcIl0gPSB0aGlzLmFsbG93RW1wdHlSZXNwb25zZTtcbiAgICBpZiAodGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zKVxuICAgICAgcmVzW1wiYXR0YWNoT3JpZ2luYWxJdGVtc1wiXSA9IHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0pXG4gICAgICAgIHJlc1twcm9wZXJ0aWVzW2ldXSA9ICg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaW5rIHRvIGEgd2ViIHNlcnZpY2UuIFlvdSBjYW4gdXNlIHRleHQgcHJlcHJvY2Vzc2luZyBoZXJlLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB1cmw6IF9odHRwczovL3Jlc3Rjb3VudHJpZXMuZXUvcmVzdC92Mi9yZWdpb24ve3JlZ2lvbn1fIGlzIGNoYW5nZWQgYmFzZWQgb24gdGhlIF9yZWdpb25fIHF1ZXN0aW9uJ3MgdmFsdWUuXG4gICAqIFN1cnZleUpTIGF1dG9tYXRpY2FsbHkgZ2V0cyBkYXRhIGZyb20gdGhlIHdlYiBzZXJ2aWNlIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBfcmVnaW9uXyBxdWVzdGlvbiBjaGFuZ2VzLlxuICAgKiBAc2VlIHBhdGhcbiAgICogQHNlZSB2YWx1ZU5hbWVcbiAgICogQHNlZSB0aXRsZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXJsXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdXJsKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidXJsXCIsIHZhbCk7XG4gICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gdW5kZWZpbmVkO1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgaWYgKHZhbC5pbmRleE9mKENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCkgPiAtMSkge1xuICAgICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbC5pbmRleE9mKENob2ljZXNSZXN0ZnVsLm5vQ2FjaGVUZXh0KSA+IC0xKSB7XG4gICAgICAgIHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHksIGlmIGEgd2ViIHNlcnZpY2UgcmV0dXJucyBhIGxvdCBvZiBpbmZvcm1hdGlvbiBhbmQgeW91IG5lZWQgb25seSBhIHBhcnQgb2YgaXQuXG4gICAqIEZvciBleGFtcGxlLCBhIHdlYiBzZXJ2aWNlIHJldHVybnMgYSBsaXN0IG9mIGNvdW50cmllcyBhbmQgYSBsaXN0IG9mIGNhcGl0YWxzLlxuICAgKiBJZiB5b3UgbmVlZCBhIGxpc3Qgb2YgY291bnRyaWVzLCBzZXQgYSBjb3JyZWN0IHBhdGggZnJvbSB3aGljaCBTdXJ2ZXlKUyBvYnRhaW5zIHRoZSBkYXRhLCBsaWtlOiBfRGF0YUxpc3QxXFxEYXRhTGlzdDJfXG4gICAqIEBzZWUgdXJsXG4gICAqIEBzZWUgdmFsdWVOYW1lXG4gICAqIEBzZWUgdGl0bGVOYW1lXG4gICAqIEBzZWUgW0V4YW1wbGU6IFJFU1RmdWwgRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeS8/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3ducmVzdGZ1bGwpXG4gICAqIEBzZWUgW0RvY3M6IEZpbGwgQ2hvaWNlcyBmcm9tIGEgUkVTVGZ1bCBTZXJ2aWNlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeS8/aWQ9TGlicmFyeU92ZXJ2aWV3I2ZpbGwtdGhlLWNob2ljZXMtZnJvbS1hLXJlc3RmdWwtc2VydmljZSlcbiAgICovXG5cbiAgcHVibGljIGdldCBwYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBwYXRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGF0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSAoaW4gdGhlIG9idGFpbmVkIGRhdGEgb2JqZWN0KSB0byB3aGljaCBTdXJ2ZXlKUyBiaW5kcyB0byBwcm92aWRlIHZhbHVlcyBmb3IgY2hvaWNlIGl0ZW1zLlxuICAgKiBAc2VlIHVybFxuICAgKiBAc2VlIHBhdGhcbiAgICogQHNlZSB0aXRsZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cblxuICBwdWJsaWMgZ2V0IHZhbHVlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkgKGluIHRoZSBvYnRhaW5lZCBkYXRhIG9iamVjdCkgdG8gd2hpY2ggU3VydmV5SlMgYmluZHMgdG8gcHJvdmlkZSBkaXNwbGF5IHRleHRzIGZvciBjaG9pY2UgaXRlbXMuXG4gICAqIEBzZWUgdXJsXG4gICAqIEBzZWUgcGF0aFxuICAgKiBAc2VlIHZhbHVlZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cblxuICBwdWJsaWMgZ2V0IHRpdGxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZU5hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGltYWdlTGlua05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VMaW5rTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlTGlua05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZUxpbmtOYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhbGxvd0VtcHR5UmVzcG9uc2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93RW1wdHlSZXNwb25zZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0VtcHR5UmVzcG9uc2UodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dFbXB0eVJlc3BvbnNlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhdHRhY2hPcmlnaW5hbEl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdHRhY2hPcmlnaW5hbEl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGF0dGFjaE9yaWdpbmFsSXRlbXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXR0YWNoT3JpZ2luYWxJdGVtc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbVZhbHVlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5vd25lcikgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLm93bmVyLmdldFR5cGUoKSwgXCJjaG9pY2VzXCIpO1xuICAgIGlmICghcHJvcCkgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgaWYgKHByb3AudHlwZSA9PSBcIml0ZW12YWx1ZVtdXCIpIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgIHJldHVybiBwcm9wLnR5cGU7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMudXJsID0gXCJcIjtcbiAgICB0aGlzLnBhdGggPSBcIlwiO1xuICAgIHRoaXMudmFsdWVOYW1lID0gXCJcIjtcbiAgICB0aGlzLnRpdGxlTmFtZSA9IFwiXCI7XG4gICAgdGhpcy5pbWFnZUxpbmtOYW1lID0gXCJcIjtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0pICg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGJlZm9yZVNlbmRSZXF1ZXN0KCkge1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIGlmICghIXRoaXMuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjaykge1xuICAgICAgdGhpcy5iZWZvcmVTZW5kUmVxdWVzdENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVMb2FkUmVxdWVzdCgpIHtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTG9hZChyZXN1bHQ6IGFueSwgbG9hZGluZ09iakhhc2g6IHN0cmluZyA9IG51bGwpIHtcbiAgICBpZiAoIWxvYWRpbmdPYmpIYXNoKSB7XG4gICAgICBsb2FkaW5nT2JqSGFzaCA9IHRoaXMub2JqSGFzaDtcbiAgICB9XG4gICAgdmFyIGl0ZW1zID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcbiAgICB2YXIgdXBkYXRlZFJlc3VsdCA9IHRoaXMuZ2V0UmVzdWx0QWZ0ZXJQYXRoKHJlc3VsdCk7XG4gICAgaWYgKHVwZGF0ZWRSZXN1bHQgJiYgdXBkYXRlZFJlc3VsdFtcImxlbmd0aFwiXSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVkUmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtVmFsdWUgPSB1cGRhdGVkUmVzdWx0W2ldO1xuICAgICAgICBpZiAoIWl0ZW1WYWx1ZSkgY29udGludWU7XG4gICAgICAgIHZhciB2YWx1ZSA9ICEhdGhpcy5nZXRJdGVtVmFsdWVDYWxsYmFja1xuICAgICAgICAgID8gdGhpcy5nZXRJdGVtVmFsdWVDYWxsYmFjayhpdGVtVmFsdWUpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlKGl0ZW1WYWx1ZSk7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVJdGVtVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFRpdGxlKGl0ZW0sIGl0ZW1WYWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0Q3VzdG9tUHJvcGVydGllcyhpdGVtLCBpdGVtVmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zKSB7XG4gICAgICAgICAgaXRlbS5vcmlnaW5hbEl0ZW0gPSBpdGVtVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGltYWdlTGluayA9IHRoaXMuZ2V0SW1hZ2VMaW5rKGl0ZW1WYWx1ZSk7XG4gICAgICAgIGlmICghIWltYWdlTGluaykge1xuICAgICAgICAgIGl0ZW0uaW1hZ2VMaW5rID0gaW1hZ2VMaW5rO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5hbGxvd0VtcHR5UmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBXZWJSZXF1ZXN0RW1wdHlFcnJvcihudWxsLCB0aGlzLm93bmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgIGl0ZW1zID0gdGhpcy51cGRhdGVSZXN1bHRDYWxsYmFjayhpdGVtcywgcmVzdWx0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlKSB7XG4gICAgICBDaG9pY2VzUmVzdGZ1bC5pdGVtc1Jlc3VsdFtsb2FkaW5nT2JqSGFzaF0gPSBpdGVtcztcbiAgICB9XG4gICAgdGhpcy5jYWxsUmVzdWx0Q2FsbGJhY2soaXRlbXMsIGxvYWRpbmdPYmpIYXNoKTtcbiAgICBDaG9pY2VzUmVzdGZ1bC51bnJlZ2lzdGVyU2FtZVJlcXVlc3RzKHRoaXMsIGl0ZW1zKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsbFJlc3VsdENhbGxiYWNrKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIGxvYWRpbmdPYmpIYXNoOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKGxvYWRpbmdPYmpIYXNoICE9IHRoaXMub2JqSGFzaCkgcmV0dXJuO1xuICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xuICB9XG4gIHByaXZhdGUgc2V0Q3VzdG9tUHJvcGVydGllcyhpdGVtOiBJdGVtVmFsdWUsIGl0ZW1WYWx1ZTogYW55KSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQ29yZShcbiAgICAgICAgaXRlbVZhbHVlLFxuICAgICAgICB0aGlzLmdldFByb3BlcnR5QmluZGluZyhwcm9wLm5hbWUpXG4gICAgICApO1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgICg8YW55Pml0ZW0pW3Byb3AubmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UHJvcGVydHlCaW5kaW5nKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCg8YW55PnRoaXMpW3RoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSldKVxuICAgICAgcmV0dXJuICg8YW55PnRoaXMpW3RoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSldO1xuICAgIGlmICgoPGFueT50aGlzKVtwcm9wZXJ0eU5hbWVdKSByZXR1cm4gKDxhbnk+dGhpcylbcHJvcGVydHlOYW1lXTtcbiAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xuICB9XG4gIHByaXZhdGUgb25FcnJvcihzdGF0dXM6IHN0cmluZywgcmVzcG9uc2U6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgV2ViUmVxdWVzdEVycm9yKHN0YXR1cywgcmVzcG9uc2UsIHRoaXMub3duZXIpO1xuICAgIHRoaXMuZG9FbXB0eVJlc3VsdENhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICBDaG9pY2VzUmVzdGZ1bC51bnJlZ2lzdGVyU2FtZVJlcXVlc3RzKHRoaXMsIFtdKTtcbiAgfVxuICBwcml2YXRlIGdldFJlc3VsdEFmdGVyUGF0aChyZXN1bHQ6IGFueSkge1xuICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRQYXRoKSByZXR1cm4gcmVzdWx0O1xuICAgIHZhciBwYXRoZXMgPSB0aGlzLmdldFBhdGhlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHRbcGF0aGVzW2ldXTtcbiAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldFBhdGhlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcGF0aGVzID0gW107XG4gICAgaWYgKHRoaXMucHJvY2Vzc2VkUGF0aC5pbmRleE9mKFwiO1wiKSA+IC0xKSB7XG4gICAgICBwYXRoZXMgPSB0aGlzLnBhdGguc3BsaXQoXCI7XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoZXMgPSB0aGlzLnByb2Nlc3NlZFBhdGguc3BsaXQoXCIsXCIpO1xuICAgIH1cbiAgICBpZiAocGF0aGVzLmxlbmd0aCA9PSAwKSBwYXRoZXMucHVzaCh0aGlzLnByb2Nlc3NlZFBhdGgpO1xuICAgIHJldHVybiBwYXRoZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xuICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMudmFsdWVOYW1lKSByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUoaXRlbSwgdGhpcy52YWx1ZU5hbWUpO1xuICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gaXRlbTtcbiAgICB2YXIgbGVuID0gT2JqZWN0LmtleXMoaXRlbSkubGVuZ3RoO1xuICAgIGlmIChsZW4gPCAxKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gaXRlbVtPYmplY3Qua2V5cyhpdGVtKVswXV07XG4gIH1cbiAgcHJpdmF0ZSBzZXRUaXRsZShpdGVtOiBJdGVtVmFsdWUsIGl0ZW1WYWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdGl0bGUgPSB0aGlzLnRpdGxlTmFtZSA/IHRoaXMudGl0bGVOYW1lIDogXCJ0aXRsZVwiO1xuICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQ29yZShpdGVtVmFsdWUsIHRpdGxlKTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpdGVtLnRleHQgPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0ubG9jVGV4dC5zZXRKc29uKHZhbCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0SW1hZ2VMaW5rKGl0ZW06IGFueSk6IGFueSB7XG4gICAgdmFyIGltYWdlTGluayA9IHRoaXMuaW1hZ2VMaW5rTmFtZSA/IHRoaXMuaW1hZ2VMaW5rTmFtZSA6IFwiaW1hZ2VMaW5rXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVDb3JlKGl0ZW0sIGltYWdlTGluayk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUoaXRlbTogYW55LCBwcm9wZXJ0eTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmIChwcm9wZXJ0eS5pbmRleE9mKFwiLlwiKSA8IDApIHJldHVybiBpdGVtW3Byb3BlcnR5XTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHByb3BlcnR5LnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBpdGVtW3Byb3BlcnRpZXNbaV1dO1xuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgb2JqSGFzaCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgK1xuICAgICAgXCI7XCIgK1xuICAgICAgdGhpcy5wcm9jZXNzZWRQYXRoICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMudmFsdWVOYW1lICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMudGl0bGVOYW1lICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMuaW1hZ2VMaW5rTmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBPYnNvbGV0ZSwgcGxlYXNlIHVzZSBDaG9pY2VzUmVzdGZ1bFxuICovXG5leHBvcnQgY2xhc3MgQ2hvaWNlc1Jlc3RmdWxsIGV4dGVuZHMgQ2hvaWNlc1Jlc3RmdWwge1xuICBwdWJsaWMgc3RhdGljIGdldCBFbmNvZGVQYXJhbWV0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaG9pY2VzUmVzdGZ1bC5FbmNvZGVQYXJhbWV0ZXJzO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IEVuY29kZVBhcmFtZXRlcnModmFsOiBib29sZWFuKSB7XG4gICAgQ2hvaWNlc1Jlc3RmdWwuRW5jb2RlUGFyYW1ldGVycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNsZWFyQ2FjaGUoKSB7XG4gICAgQ2hvaWNlc1Jlc3RmdWwuY2xlYXJDYWNoZSgpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IG9uQmVmb3JlU2VuZFJlcXVlc3QoKTogKFxuICAgIHNlbmRlcjogQ2hvaWNlc1Jlc3RmdWwsXG4gICAgb3B0aW9uczogeyByZXF1ZXN0OiBYTUxIdHRwUmVxdWVzdCB9XG4gICkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIENob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3Q7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgb25CZWZvcmVTZW5kUmVxdWVzdChcbiAgICB2YWw6IChzZW5kZXI6IENob2ljZXNSZXN0ZnVsLCBvcHRpb25zOiB7IHJlcXVlc3Q6IFhNTEh0dHBSZXF1ZXN0IH0pID0+IHZvaWRcbiAgKSB7XG4gICAgQ2hvaWNlc1Jlc3RmdWwub25CZWZvcmVTZW5kUmVxdWVzdCA9IHZhbDtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNob2ljZXNCeVVybFwiLFxuICBbXG4gICAgXCJ1cmxcIixcbiAgICBcInBhdGhcIixcbiAgICBcInZhbHVlTmFtZVwiLFxuICAgIFwidGl0bGVOYW1lXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJpbWFnZUxpbmtOYW1lXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiAhIW9iaiAmJiAhIW9iai5vd25lciAmJiBvYmoub3duZXIuZ2V0VHlwZSgpID09IFwiaW1hZ2VwaWNrZXJcIjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiYWxsb3dFbXB0eVJlc3BvbnNlOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiYXR0YWNoT3JpZ2luYWxJdGVtczpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IENob2ljZXNSZXN0ZnVsKCk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBIZWxwZXJzLCBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBQcm9jZXNzVmFsdWUge1xuICBwdWJsaWMgdmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGw7XG4gIHB1YmxpYyBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgcHVibGljIGdldEZpcnN0TmFtZSh0ZXh0OiBzdHJpbmcsIG9iajogYW55ID0gbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAoISFvYmopIHtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUodGV4dCwgb2JqKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2ggPSB0ZXh0W2ldO1xuICAgICAgaWYgKGNoID09IFwiLlwiIHx8IGNoID09IFwiW1wiKSBicmVhaztcbiAgICAgIHJlcyArPSBjaDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgaGFzVmFsdWUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWVzKSB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodGV4dCwgdmFsdWVzKTtcbiAgICByZXR1cm4gcmVzLmhhc1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZSh0ZXh0OiBzdHJpbmcsIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXZhbHVlcykgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHRleHQsIHZhbHVlcyk7XG4gICAgcmV0dXJuIHJlcy52YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUob2JqOiBhbnksIHRleHQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIHZhciBub25OZXN0ZWRPYmogPSB0aGlzLmdldE5vbk5lc3RlZE9iamVjdChvYmosIHRleHQsIHRydWUpO1xuICAgIGlmICghbm9uTmVzdGVkT2JqKSByZXR1cm47XG4gICAgb2JqID0gbm9uTmVzdGVkT2JqLnZhbHVlO1xuICAgIHRleHQgPSBub25OZXN0ZWRPYmoudGV4dDtcbiAgICBpZiAoISFvYmogJiYgISF0ZXh0KSB7XG4gICAgICBvYmpbdGV4dF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFZhbHVlSW5mbyh2YWx1ZUluZm86IGFueSkge1xuICAgIGlmICghIXZhbHVlSW5mby5wYXRoKSB7XG4gICAgICB2YWx1ZUluZm8udmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVBhdGgodmFsdWVJbmZvLnBhdGgsIHRoaXMudmFsdWVzKTtcbiAgICAgIHZhbHVlSW5mby5oYXNWYWx1ZSA9XG4gICAgICAgIHZhbHVlSW5mby52YWx1ZSAhPT0gbnVsbCAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVJbmZvLnZhbHVlKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXZhbHVlSW5mby5oYXNWYWx1ZSAmJlxuICAgICAgICB2YWx1ZUluZm8ucGF0aC5sZW5ndGggPiAxICYmXG4gICAgICAgIHZhbHVlSW5mby5wYXRoW3ZhbHVlSW5mby5wYXRoLmxlbmd0aCAtIDFdID09IFwibGVuZ3RoXCJcbiAgICAgICkge1xuICAgICAgICB2YWx1ZUluZm8uaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICB2YWx1ZUluZm8udmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUodmFsdWVJbmZvLm5hbWUsIHRoaXMudmFsdWVzKTtcbiAgICB2YWx1ZUluZm8udmFsdWUgPSByZXMudmFsdWU7XG4gICAgdmFsdWVJbmZvLmhhc1ZhbHVlID0gcmVzLmhhc1ZhbHVlO1xuICAgIHZhbHVlSW5mby5wYXRoID0gcmVzLmhhc1ZhbHVlID8gcmVzLnBhdGggOiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVGcm9tUGF0aChwYXRoOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+LCB2YWx1ZXM6IGFueSk6IGFueSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoISF2YWx1ZXMgJiYgaW5kZXggPCBwYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIGluZF9uYW1lID0gcGF0aFtpbmRleF07XG4gICAgICBpZiAoXG4gICAgICAgIEhlbHBlcnMuaXNOdW1iZXIoaW5kX25hbWUpICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJlxuICAgICAgICBpbmRfbmFtZSA+PSB2YWx1ZXMubGVuZ3RoXG4gICAgICApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgdmFsdWVzID0gdmFsdWVzW2luZF9uYW1lXTtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IGFueSk6IGFueSB7XG4gICAgdmFyIHJlczogYW55ID0geyBoYXNWYWx1ZTogZmFsc2UsIHZhbHVlOiBudWxsLCBwYXRoOiBudWxsIH07XG4gICAgdmFyIGN1clZhbHVlID0gdmFsdWVzO1xuICAgIGlmICghY3VyVmFsdWUgJiYgY3VyVmFsdWUgIT09IDAgJiYgY3VyVmFsdWUgIT09IGZhbHNlKSByZXR1cm4gcmVzO1xuICAgIGlmIChcbiAgICAgIHRleHQgJiZcbiAgICAgIHRleHQubGFzdEluZGV4T2YoXCIubGVuZ3RoXCIpID4gLTEgJiZcbiAgICAgIHRleHQubGFzdEluZGV4T2YoXCIubGVuZ3RoXCIpID09PSB0ZXh0Lmxlbmd0aCAtIFwiLmxlbmd0aFwiLmxlbmd0aFxuICAgICkge1xuICAgICAgcmVzLnZhbHVlID0gMDtcbiAgICAgIHJlcy5oYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHZhciBub25OZXN0ZWRPYmogPSB0aGlzLmdldE5vbk5lc3RlZE9iamVjdChjdXJWYWx1ZSwgdGV4dCwgZmFsc2UpO1xuICAgIGlmICghbm9uTmVzdGVkT2JqKSByZXR1cm4gcmVzO1xuICAgIHJlcy5wYXRoID0gbm9uTmVzdGVkT2JqLnBhdGg7XG4gICAgcmVzLnZhbHVlID0gISFub25OZXN0ZWRPYmoudGV4dFxuICAgICAgPyB0aGlzLmdldE9iamVjdFZhbHVlKG5vbk5lc3RlZE9iai52YWx1ZSwgbm9uTmVzdGVkT2JqLnRleHQpXG4gICAgICA6IG5vbk5lc3RlZE9iai52YWx1ZTtcbiAgICByZXMuaGFzVmFsdWUgPSAhSGVscGVycy5pc1ZhbHVlRW1wdHkocmVzLnZhbHVlKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZ2V0Tm9uTmVzdGVkT2JqZWN0KG9iajogYW55LCB0ZXh0OiBzdHJpbmcsIGNyZWF0ZVBhdGg6IGJvb2xlYW4pOiBhbnkge1xuICAgIHZhciBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdFByb3BlcnR5TmFtZSh0ZXh0LCBvYmosIGNyZWF0ZVBhdGgpO1xuICAgIHZhciBwYXRoID0gISFjdXJOYW1lID8gW2N1ck5hbWVdIDogbnVsbDtcbiAgICB3aGlsZSAodGV4dCAhPSBjdXJOYW1lICYmICEhb2JqKSB7XG4gICAgICB2YXIgaXNBcnJheSA9IHRleHRbMF0gPT0gXCJbXCI7XG4gICAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgICAgaWYgKCFjdXJOYW1lICYmIHRleHQgPT0gdGhpcy5nZXRGaXJzdE5hbWUodGV4dCkpXG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG9iaiwgdGV4dDogdGV4dCwgcGF0aDogcGF0aCB9O1xuICAgICAgICBvYmogPSB0aGlzLmdldE9iamVjdFZhbHVlKG9iaiwgY3VyTmFtZSk7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShvYmopICYmICFjcmVhdGVQYXRoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKGN1ck5hbWUubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvYmpJbkFycmF5ID0gdGhpcy5nZXRPYmpJbkFycmF5KG9iaiwgdGV4dCk7XG4gICAgICAgIGlmICghb2JqSW5BcnJheSkgcmV0dXJuIG51bGw7XG4gICAgICAgIG9iaiA9IG9iakluQXJyYXkudmFsdWU7XG4gICAgICAgIHRleHQgPSBvYmpJbkFycmF5LnRleHQ7XG4gICAgICAgIHBhdGgucHVzaChvYmpJbkFycmF5LmluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXRleHQgJiYgdGV4dFswXSA9PSBcIi5cIikge1xuICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHIoMSk7XG4gICAgICB9XG4gICAgICBjdXJOYW1lID0gdGhpcy5nZXRGaXJzdFByb3BlcnR5TmFtZSh0ZXh0LCBvYmosIGNyZWF0ZVBhdGgpO1xuICAgICAgaWYgKCEhY3VyTmFtZSkge1xuICAgICAgICBwYXRoLnB1c2goY3VyTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBvYmosIHRleHQ6IHRleHQsIHBhdGg6IHBhdGggfTtcbiAgfVxuICBwcml2YXRlIGdldE9iakluQXJyYXkoY3VyVmFsdWU6IGFueSwgdGV4dDogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VyVmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaW5kZXggPSAxO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoICYmIHRleHRbaW5kZXhdICE9IFwiXVwiKSB7XG4gICAgICBzdHIgKz0gdGV4dFtpbmRleF07XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICB0ZXh0ID0gaW5kZXggPCB0ZXh0Lmxlbmd0aCA/IHRleHQuc3Vic3RyKGluZGV4ICsgMSkgOiBcIlwiO1xuICAgIGluZGV4ID0gdGhpcy5nZXRJbnRWYWx1ZShzdHIpO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gY3VyVmFsdWUubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyB2YWx1ZTogY3VyVmFsdWVbaW5kZXhdLCB0ZXh0OiB0ZXh0LCBpbmRleDogaW5kZXggfTtcbiAgfVxuICBwcml2YXRlIGdldEZpcnN0UHJvcGVydHlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvYmo6IGFueSxcbiAgICBjcmVhdGVQcm9wOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBuYW1lO1xuICAgIGlmICghb2JqKSBvYmogPSB7fTtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KG5hbWUpKSByZXR1cm4gbmFtZTtcbiAgICB2YXIgbmFtZUluTG93ID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBBID0gbmFtZUluTG93WzBdO1xuICAgIHZhciBhID0gQS50b1VwcGVyQ2FzZSgpO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHZhciBmaXJzdCA9IGtleVswXTtcbiAgICAgIGlmIChmaXJzdCA9PT0gYSB8fCBmaXJzdCA9PT0gQSkge1xuICAgICAgICB2YXIga2V5TmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoa2V5TmFtZSA9PSBuYW1lSW5Mb3cpIHJldHVybiBrZXk7XG4gICAgICAgIGlmIChuYW1lSW5Mb3cubGVuZ3RoIDw9IGtleU5hbWUubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgICAgdmFyIGNoID0gbmFtZUluTG93W2tleU5hbWUubGVuZ3RoXTtcbiAgICAgICAgaWYgKGNoICE9IFwiLlwiICYmIGNoICE9IFwiW1wiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleU5hbWUgPT0gbmFtZUluTG93LnN1YnN0cigwLCBrZXlOYW1lLmxlbmd0aCkpIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjcmVhdGVQcm9wICYmIG5hbWVbMF0gIT09IFwiW1wiKSB7XG4gICAgICB2YXIgaW5kID0gbmFtZS5pbmRleE9mKFwiLlwiKTtcbiAgICAgIGlmIChpbmQgPiAtMSkge1xuICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMCwgaW5kKTtcbiAgICAgICAgb2JqW25hbWVdID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRPYmplY3RWYWx1ZShvYmo6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBvYmpbbmFtZV07XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbnRWYWx1ZShzdHI6IGFueSkge1xuICAgIGlmIChzdHIgPT0gXCIwXCIgfHwgKChzdHIgfCAwKSA+IDAgJiYgc3RyICUgMSA9PSAwKSkgcmV0dXJuIE51bWJlcihzdHIpO1xuICAgIHJldHVybiAtMTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5cbmltcG9ydCB7IE9wZXJhbmQsIEZ1bmN0aW9uT3BlcmFuZCB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBDb25kaXRpb25zUGFyc2VyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1BhcnNlclwiO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblJ1bm5lckJhc2Uge1xuICBwcml2YXRlIGV4cHJlc3Npb25WYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIG9wZXJhbmQ6IE9wZXJhbmQ7XG4gIHByaXZhdGUgcHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICBwcml2YXRlIHBhcnNlciA9IG5ldyBDb25kaXRpb25zUGFyc2VyKCk7XG4gIHByaXZhdGUgaXNBc3luY1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzRnVuY3Rpb25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFzeW5jRnVuY0xpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZykge1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmV4cHJlc3Npb24gPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5leHByZXNzaW9uVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9wZXJhbmQgPSB0aGlzLnBhcnNlci5wYXJzZUV4cHJlc3Npb24odmFsdWUpO1xuICAgIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZSA9IHRoaXMuY2FuUnVuKCkgPyB0aGlzLm9wZXJhbmQuaGFzRnVuY3Rpb24oKSA6IGZhbHNlO1xuICAgIHRoaXMuaXNBc3luY1ZhbHVlID0gdGhpcy5oYXNGdW5jdGlvbigpXG4gICAgICA/IHRoaXMub3BlcmFuZC5oYXNBc3luY0Z1bmN0aW9uKClcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFyaWFibGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5vcGVyYW5kKSByZXR1cm4gW107XG5cbiAgICB2YXIgdmFyaWFibGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdGhpcy5vcGVyYW5kLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cblxuICBwdWJsaWMgaGFzRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQXN5bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBc3luY1ZhbHVlO1xuICB9XG5cbiAgcHVibGljIGNhblJ1bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm9wZXJhbmQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuQ29yZShcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApOiBhbnkge1xuICAgIGlmICghdGhpcy5vcGVyYW5kKSByZXR1cm4gbnVsbDtcblxuICAgIHRoaXMucHJvY2Vzc1ZhbHVlLnZhbHVlcyA9IHZhbHVlcztcbiAgICB0aGlzLnByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICBpZiAoIXRoaXMuaXNBc3luYykgcmV0dXJuIHRoaXMucnVuVmFsdWVzKCk7XG4gICAgdGhpcy5hc3luY0Z1bmNMaXN0ID0gW107XG4gICAgdGhpcy5vcGVyYW5kLmFkZFRvQXN5bmNMaXN0KHRoaXMuYXN5bmNGdW5jTGlzdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzeW5jRnVuY0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXN5bmNGdW5jTGlzdFtpXS5vbkFzeW5jUmVhZHkgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZG9Bc3luY0Z1bmN0aW9uUmVhZHkoKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFzeW5jRnVuY0xpc3RbaV0uZXZhbHVhdGVBc3luYyh0aGlzLnByb2Nlc3NWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvQXN5bmNGdW5jdGlvblJlYWR5KCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuYXN5bmNGdW5jTGlzdFtpXS5pc1JlYWR5KSByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucnVuVmFsdWVzKCk7XG4gIH1cbiAgcHJpdmF0ZSBydW5WYWx1ZXMoKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5vcGVyYW5kLmV2YWx1YXRlKHRoaXMucHJvY2Vzc1ZhbHVlKTtcbiAgICB0aGlzLmRvT25Db21wbGV0ZShyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblJ1bm5lciBleHRlbmRzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHVibGljIG9uUnVuQ29tcGxldGU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHB1YmxpYyBydW4oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucnVuQ29yZSh2YWx1ZXMsIHByb3BlcnRpZXMpID09IHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge1xuICAgIGlmICghIXRoaXMub25SdW5Db21wbGV0ZSkgdGhpcy5vblJ1bkNvbXBsZXRlKHJlcyA9PSB0cnVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblJ1bm5lciBleHRlbmRzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHVibGljIG9uUnVuQ29tcGxldGU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZDtcbiAgcHVibGljIHJ1bih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJ1bkNvcmUodmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9PbkNvbXBsZXRlKHJlczogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5vblJ1bkNvbXBsZXRlKSB0aGlzLm9uUnVuQ29tcGxldGUocmVzKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgT3BlcmFuZCwgQ29uc3QgfSBmcm9tIFwiLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgU3ludGF4RXJyb3IsIHBhcnNlIH0gZnJvbSBcIi4vZXhwcmVzc2lvbnMvZXhwcmVzc2lvblBhcnNlclwiO1xuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uc1BhcnNlckVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIGF0OiBudW1iZXIsIHB1YmxpYyBjb2RlOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25zUGFyc2VyIHtcbiAgcHJpdmF0ZSBjb25kaXRpb25FcnJvcjogQ29uZGl0aW9uc1BhcnNlckVycm9yO1xuICBwcml2YXRlIHN0YXRpYyBwYXJzZXJDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IE9wZXJhbmQgfSA9IHt9O1xuXG4gIHByaXZhdGUgcGF0Y2hFeHByZXNzaW9uKHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAucmVwbGFjZSgvPT4vZywgXCI+PVwiKVxuICAgICAgLnJlcGxhY2UoLz08L2csIFwiPD1cIilcbiAgICAgIC5yZXBsYWNlKC88Pi9nLCBcIiE9XCIpXG4gICAgICAucmVwbGFjZSgvPT0vZywgXCI9IFwiKVxuICAgICAgLnJlcGxhY2UoL2VxdWFscy9nLCBcImVxdWFsIFwiKVxuICAgICAgLnJlcGxhY2UoL25vdGVxdWFscy9nLCBcIm5vdGVxdWFsIFwiKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDb25kaXRpb24odGV4dDogc3RyaW5nKTogT3BlcmFuZCB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VFeHByZXNzaW9uKHRleHQpO1xuICB9XG5cbiAgcHVibGljIHBhcnNlRXhwcmVzc2lvbih0ZXh0OiBzdHJpbmcpOiBPcGVyYW5kIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlc3VsdCA9IENvbmRpdGlvbnNQYXJzZXIucGFyc2VyQ2FjaGVbdGV4dF07XG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyc2UodGhpcy5wYXRjaEV4cHJlc3Npb24odGV4dCkpO1xuICAgICAgICBpZiAoIXJlc3VsdC5oYXNBc3luY0Z1bmN0aW9uKCkpIHtcbiAgICAgICAgICBDb25kaXRpb25zUGFyc2VyLnBhcnNlckNhY2hlW3RleHRdID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25FcnJvciA9IG5ldyBDb25kaXRpb25zUGFyc2VyRXJyb3IoXG4gICAgICAgICAgZS5sb2NhdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgZS5tZXNzYWdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBlcnJvcigpOiBDb25kaXRpb25zUGFyc2VyRXJyb3Ige1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbkVycm9yO1xuICB9XG59XG4iLCJpbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi9jc3NzdGFuZGFyZFwiO1xuXG5leHBvcnQgdmFyIGRlZmF1bHRCb290c3RyYXBDc3MgPSB7XG4gIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBfY3NzXCIsXG4gIGNvbnRhaW5lcjogXCJzdl9jb250YWluZXJcIixcbiAgaGVhZGVyOiBcInBhbmVsLWhlYWRpbmcgY2FyZC1oZWFkZXJcIixcbiAgYm9keTogXCJwYW5lbC1ib2R5IGNhcmQtYmxvY2sgbXQtNFwiLFxuICBib2R5RW1wdHk6IFwicGFuZWwtYm9keSBjYXJkLWJsb2NrIG10LTQgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwicGFuZWwtZm9vdGVyIGNhcmQtZm9vdGVyXCIsXG4gIHRpdGxlOiBcIlwiLFxuICBkZXNjcmlwdGlvbjogXCJcIixcbiAgbG9nbzogXCJzdl9sb2dvXCIsXG4gIGxvZ29JbWFnZTogXCJzdl9sb2dvX19pbWFnZVwiLFxuICBoZWFkZXJUZXh0OiBcInN2X2hlYWRlcl9fdGV4dFwiLFxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxuICBjb21wbGV0ZWRQYWdlOiBcIlwiLFxuICBuYXZpZ2F0aW9uOiB7XG4gICAgY29tcGxldGU6IFwiYnRuIHN2X2NvbXBsZXRlX2J0blwiLFxuICAgIHByZXY6IFwiYnRuIHN2X3ByZXZfYnRuXCIsXG4gICAgbmV4dDogXCJidG4gc3ZfbmV4dF9idG5cIixcbiAgICBzdGFydDogXCJidG4gc3Zfc3RhcnRfYnRuXCIsXG4gICAgcHJldmlldzogXCJidG4gc3ZfcHJldmlld19idG5cIixcbiAgICBlZGl0OiBcImJ0biBzdl9lZGl0X2J0blwiLFxuICB9LFxuICBwcm9ncmVzczogXCJwcm9ncmVzcyBjZW50ZXItYmxvY2sgbXgtYXV0byBtYi00XCIsXG4gIHByb2dyZXNzQmFyOiBcInByb2dyZXNzLWJhclwiLFxuICBwcm9ncmVzc1RleHRVbmRlckJhcjogXCJzdi1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW46IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLS1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRQYXNzZWQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50XCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Tm9uQ2xpY2thYmxlOlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtZGVzY3JpcHRpb25cIixcbiAgcGFnZToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgfSxcbiAgcGFnZVRpdGxlOiBcIlwiLFxuICBwYWdlRGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgcm93OiBcInN2X3Jvd1wiLFxuICBxdWVzdGlvbjoge1xuICAgIG1haW5Sb290OiBcInN2X3FzdG5cIixcbiAgICBmbG93Um9vdDogXCJzdl9xX2Zsb3cgc3ZfcXN0blwiLFxuICAgIGhlYWRlcjogXCJcIixcbiAgICBoZWFkZXJMZWZ0OiBcInRpdGxlLWxlZnRcIixcbiAgICBjb250ZW50OiBcIlwiLFxuICAgIGNvbnRlbnRMZWZ0OiBcImNvbnRlbnQtbGVmdFwiLFxuICAgIHRpdGxlTGVmdFJvb3Q6IFwic3ZfcXN0bl9sZWZ0XCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3FfdGl0bGVfZXhwYW5kYWJsZVwiLFxuICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsXCIsXG4gICAgZGVzY3JpcHRpb25VbmRlcklucHV0OiBcInNtYWxsXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInN2X3FfcmVxdWlyZWRfdGV4dFwiLFxuICAgIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgcmVxdWlyZWQ6IFwiXCIsXG4gICAgdGl0bGVSZXF1aXJlZDogXCJcIixcbiAgICBoYXNFcnJvcjogXCJoYXMtZXJyb3JcIixcbiAgICBpbmRlbnQ6IDIwLFxuICAgIGZvcm1Hcm91cDogXCJmb3JtLWdyb3VwXCIsXG4gIH0sXG4gIHBhbmVsOiB7XG4gICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9wX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICB0aXRsZU9uRXJyb3I6IFwiXCIsXG4gICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXG4gICAgaWNvbkV4cGFuZGVkOiBcInN2X2V4cGFuZGVkXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGwgc3ZfcF9kZXNjcmlwdGlvblwiLFxuICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxuICAgIGZvb3RlcjogXCJzdl9wX2Zvb3RlclwiLFxuICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgfSxcbiAgZXJyb3I6IHtcbiAgICByb290OiBcImFsZXJ0IGFsZXJ0LWRhbmdlclwiLFxuICAgIGljb246IFwiZ2x5cGhpY29uIGdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduXCIsXG4gICAgaXRlbTogXCJcIixcbiAgICBsb2NhdGlvblRvcDogXCJzdl9xc3RuX2Vycm9yX3RvcFwiLFxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2X3FzdG5fZXJyb3JfYm90dG9tXCIsXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG4gZm9ybS1pbmxpbmUgY2hlY2tib3hcIixcbiAgICBpdGVtOiBcInN2LWJvb2xlYW5cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXG4gICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcbiAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgc2xpZGVyVGV4dDogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcbiAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3IgXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxuICAgIGNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX2NoZWNrZWQtcGF0aFwiLFxuICAgIHVuY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fdW5jaGVja2VkLXBhdGhcIixcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2X3FjYmMgc3ZfcWNieCBmb3JtLWlubGluZVwiLFxuICAgIGl0ZW06IFwiY2hlY2tib3hcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbVNlbGVjdEFsbDogXCJzdl9xX2NoZWNrYm94X3NlbGVjdGFsbFwiLFxuICAgIGl0ZW1Ob25lOiBcInN2X3FfY2hlY2tib3hfbm9uZVwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9jaGVja2JveF9pbmxpbmVcIixcbiAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIGxhYmVsOiBcIlwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBjb250cm9sTGFiZWw6IFwiXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2hlY2tib3gtbWF0ZXJpYWxcIixcbiAgICBvdGhlcjogXCJzdl9xX2NoZWNrYm94X290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgfSxcbiAgcmFua2luZzoge1xuICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxuICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50XCIsXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAvLyBpdGVtVGV4dDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgaXRlbUljb25Db250YWluZXI6IFwic3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiLFxuICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgIGl0ZW1JY29uRm9jdXNNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiLFxuICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gIH0sXG4gIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBjb250cm9sOiBcImZvcm0tY29udHJvbFwiLFxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICBpbWFnZTogeyByb290OiBcInN2X3FfaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBtYXRyaXg6IHtcbiAgICByb290OiBcInRhYmxlIHN2X3FfbWF0cml4XCIsXG4gICAgbGFiZWw6IFwic3ZfcV9tX2xhYmVsXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWQgYmctcHJpbWFyeVwiLFxuICAgIGNlbGxMYWJlbDogXCJzdl9xX21fY2VsbF9sYWJlbFwiLFxuICB9LFxuICBtYXRyaXhkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBjZWxsOiBcInN2X21hdHJpeF9jZWxsXCIsXG4gICAgaGVhZGVyQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9oZWFkZXJcIixcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxuICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxuICAgIGRldGFpbFJvd1RleHQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3Jvd3RleHRcIixcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxuICAgIGRldGFpbEJ1dHRvbjogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxuICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3ZfZGV0YWlsX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxuICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcbiAgfSxcbiAgbWF0cml4ZHluYW1pYzoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBidXR0b246IFwiYnV0dG9uXCIsXG4gICAgYnV0dG9uQWRkOiBcIlwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJcIixcbiAgICBpY29uQWRkOiBcIlwiLFxuICAgIGljb25SZW1vdmU6IFwiXCIsXG4gICAgaWNvbkRyYWc6IFwic3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uXCIsXG4gICAgaGVhZGVyQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9oZWFkZXJcIixcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxuICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxuICAgIGRldGFpbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3BhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICAgIGVtcHR5Um93c1NlY3Rpb246IFwic3ZfbWF0cml4X2VtcHR5X3Jvd3Nfc2VjdGlvblwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwic3ZfbWF0cml4X2VtcHR5X3Jvd3NfdGV4dFwiLFxuICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcbiAgfSxcbiAgcGFuZWxkeW5hbWljOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBuYXZpZ2F0aW9uOiBcInN2LXBhbmVsZHluYW1pY19fbmF2aWdhdGlvblwiLFxuICAgIHByb2dyZXNzVG9wOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tdG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206XG4gICAgICBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcXVlc3Rpb25fX3RpdGxlXCIsXG4gICAgYnV0dG9uOiBcImJ1dHRvblwiLFxuICAgIGJ1dHRvbkFkZDogXCJidXR0b24gc3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcInN2X3BfcmVtb3ZlX2J0blwiLFxuICAgIGJ1dHRvblJlbW92ZVJpZ2h0OiBcImJ1dHRvbiBzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInN2X3Bfd3JhcHBlclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGl0ZW1UaXRsZTogXCJcIixcbiAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIGZvcm0tY29udHJvbFwiLFxuICB9LFxuICByYWRpb2dyb3VwOiB7XG4gICAgcm9vdDogXCJzdl9xY2JjIGZvcm0taW5saW5lXCIsXG4gICAgaXRlbTogXCJyYWRpb1wiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBjb250cm9sTGFiZWw6IFwiXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2lyY2xlXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9yYWRpb2dyb3VwX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhciBidXR0b25cIixcbiAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gIH0sXG4gIGJ1dHRvbmdyb3VwOiB7XG4gICAgcm9vdDogXCJzdi1idXR0b24tZ3JvdXBcIixcbiAgICBpdGVtOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbVwiLFxuICAgIGl0ZW1JY29uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCIsXG4gICAgaXRlbUNhcHRpb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWNhcHRpb25cIixcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcbiAgICBpbWFnZTogXCJzdl9xX2ltZ3NlbF9pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICBpdGVtOiBcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gICAgc2VsZWN0ZWQ6IFwiYWN0aXZlXCIsXG4gICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3ZfcV9yYXRpbmdfbWF4X3RleHRcIixcbiAgICBkaXNhYmxlZDogXCJcIixcbiAgfSxcbiAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIixcbiAgICBwcmV2aWV3OiBcInN2X3FfZmlsZV9wcmV2aWV3XCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgZmlsZUlucHV0OiBcInN2X3FfZmlsZV9pbnB1dFwiLFxuICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIHBsYWNlaG9sZGVyOiBcInNqc19zcF9wbGFjZWhvbGRlclwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICB9LFxuICB9LFxufTtcbig8YW55PnN1cnZleUNzcylbXCJib290c3RyYXBcIl0gPSBkZWZhdWx0Qm9vdHN0cmFwQ3NzO1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3MgPSB7XG4gIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBtYXRlcmlhbF9jc3NcIixcbiAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxuICBoZWFkZXI6IFwiY2FyZC1oZWFkaW5nXCIsXG4gIGJvZHk6IFwiY2FyZC1ib2R5XCIsXG4gIGJvZHlFbXB0eTogXCJjYXJkLWJvZHkgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwiY2FyZC1mb290ZXJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2X2xvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3ZfaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwiXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJidG4gc3ZfY29tcGxldGVfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgcHJldjogXCJidG4gc3ZfcHJldl9idG4gYnRuLXByaW1hcnlcIixcbiAgICBuZXh0OiBcImJ0biBzdl9uZXh0X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIHN0YXJ0OiBcImJ0biBzdl9zdGFydF9idG4gYnRuLXByaW1hcnlcIixcbiAgICBwcmV2aWV3OiBcImJ0biBzdl9wcmV2aWV3X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIGVkaXQ6IFwiYnRuIHN2X2VkaXRfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9jayBteC1hdXRvIG1iLTRcIixcbiAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gIHByb2dyZXNzVGV4dFVuZGVyQmFyOiBcInN2LWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uTGVmdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwiXCIsXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICByb3c6IFwic3Zfcm93XCIsXG4gIHF1ZXN0aW9uOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0biBmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IGZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBoZWFkZXI6IFwiXCIsXG4gICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgY29udGVudDogXCJcIixcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcV90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgbnVtYmVyOiBcInN2X3FfbnVtXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic21hbGxcIixcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgaGFzRXJyb3I6IFwiaGFzLWVycm9yXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxuICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsIHN2X3BfZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG4gY2hlY2tib3hcIixcbiAgICBpdGVtOiBcInN2LWJvb2xlYW5cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXG4gICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcbiAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgc2xpZGVyVGV4dDogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcbiAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3IgXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxuICAgIGNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX2NoZWNrZWQtcGF0aFwiLFxuICAgIHVuY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fdW5jaGVja2VkLXBhdGhcIixcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2X3FjYnhcIixcbiAgICBpdGVtOiBcImNoZWNrYm94XCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic3ZfcV9jaGVja2JveF9zZWxlY3RhbGxcIixcbiAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNoZWNrYm94LWRlY29yYXRvclwiLFxuICAgIG90aGVyOiBcInN2X3FfY2hlY2tib3hfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICByYW5raW5nOiB7XG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXG4gICAgcm9vdE1vYmlsZU1vZDogXCJzdi1yYW5raW5nLS1tb2JpbGVcIixcbiAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcbiAgICBpdGVtQ29udGVudDogXCJzdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIixcbiAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBpdGVtR2hvc3ROb2RlOiBcInN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIixcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXG4gICAgaXRlbUljb246IFwic3YtcmFua2luZy1pdGVtX19pY29uXCIsXG4gICAgaXRlbUljb25Ib3Zlck1vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCIsXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXG4gICAgaXRlbUdob3N0TW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZ2hvc3RcIixcbiAgICBpdGVtRHJhZ01vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWRyYWdcIixcbiAgfSxcbiAgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZHJvcGRvd246IHtcbiAgICByb290OiBcIlwiLFxuICAgIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9kZF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgfSxcbiAgaHRtbDogeyByb290OiBcIlwiIH0sXG4gIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXG4gIG1hdHJpeDoge1xuICAgIHJvb3Q6IFwidGFibGUgc3ZfcV9tYXRyaXhcIixcbiAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGxhYmVsOiBcInN2X3FfbV9sYWJlbCByYWRpby1pbmxpbmVcIixcbiAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzdl9xX21fY2VsbF9zZWxlY3RlZCBiZy1wcmltYXJ5XCIsXG4gICAgY2VsbExhYmVsOiBcInN2X3FfbV9jZWxsX2xhYmVsXCIsXG4gICAgaXRlbVZhbHVlOiBcImZvcm0tY29udHJvbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImJtZC1yYWRpb1wiLFxuICB9LFxuICBtYXRyaXhkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBpdGVtVmFsdWU6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcbiAgICBkZXRhaWxSb3c6IFwic3ZfbWF0cml4X2RldGFpbF9yb3dcIixcbiAgICBkZXRhaWxSb3dUZXh0OiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9yb3d0ZXh0XCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gIH0sXG4gIG1hdHJpeGR5bmFtaWM6IHtcbiAgICBtYWluUm9vdDogXCJzdl9xc3RuXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93XCIsXG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcbiAgICBpdGVtVmFsdWU6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGJ1dHRvbkFkZDogXCJcIixcbiAgICBidXR0b25SZW1vdmU6IFwiXCIsXG4gICAgaWNvbkFkZDogXCJcIixcbiAgICBpY29uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25EcmFnOiBcInN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiLFxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcbiAgICBkZXRhaWxSb3c6IFwic3ZfbWF0cml4X2RldGFpbF9yb3dcIixcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxuICAgIGRldGFpbEJ1dHRvbjogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxuICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3ZfZGV0YWlsX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxuICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcbiAgICBlbXB0eVJvd3NTZWN0aW9uOiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3NlY3Rpb25cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIixcbiAgICBlbXB0eVJvd3NCdXR0b246IFwiXCIsXG4gIH0sXG4gIHBhbmVsZHluYW1pYzoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgbmF2aWdhdGlvbjogXCJzdi1wYW5lbGR5bmFtaWNfX25hdmlnYXRpb25cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fYWRkLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25SZW1vdmU6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInN2X3Bfd3JhcHBlclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGl0ZW1UaXRsZTogXCJcIixcbiAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdl9xX210X2l0ZW1fdmFsdWUgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcIlwiLFxuICAgIGl0ZW06IFwicmFkaW9cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2xhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiYm1kLXJhZGlvXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9yYWRpb2dyb3VwX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhciBidXR0b24gYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICBidXR0b25ncm91cDoge1xuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICBpdGVtSWNvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgaXRlbVNlbGVjdGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgfSxcbiAgaW1hZ2VwaWNrZXI6IHtcbiAgICByb290OiBcInN2X2ltZ3NlbFwiLFxuICAgIGl0ZW06IFwic3ZfcV9pbWdzZWxcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2ltYWdlcGlja2VyX2lubGluZVwiLFxuICAgIGxhYmVsOiBcInN2X3FfaW1nc2VsX2xhYmVsXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXG4gICAgaW1hZ2U6IFwic3ZfcV9pbWdzZWxfaW1hZ2VcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX2ltZ3NlbF90ZXh0XCIsXG4gICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXG4gIH0sXG4gIHJhdGluZzoge1xuICAgIHJvb3Q6IFwiYnRuLWdyb3VwXCIsXG4gICAgaXRlbTogXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICAgIHNlbGVjdGVkOiBcImFjdGl2ZVwiLFxuICAgIG1pblRleHQ6IFwic3ZfcV9yYXRpbmdfbWluX3RleHRcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICBtYXhUZXh0OiBcInN2X3FfcmF0aW5nX21heF90ZXh0XCIsXG4gICAgZGlzYWJsZWQ6IFwiXCIsXG4gIH0sXG4gIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGV4cHJlc3Npb246IFwiZm9ybS1jb250cm9sXCIsXG4gIGZpbGU6IHtcbiAgICByb290OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXAgaXMtZmlsZWlucHV0IHN2X3FfZmlsZVwiLFxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwiXCIsXG4gICAgcHJldmlldzogXCJzdl9xX2ZpbGVfcHJldmlld1wiLFxuICAgIHJlbW92ZUJ1dHRvbjogXCJzdl9xX2ZpbGVfcmVtb3ZlX2J1dHRvblwiLFxuICAgIGZpbGVJbnB1dDogXCJzdl9xX2ZpbGVfaW5wdXRcIixcbiAgICByZW1vdmVGaWxlOiBcInN2X3FfZmlsZV9yZW1vdmVcIixcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWhpZGRlblwiLFxuICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWhpZGRlblwiLFxuICB9LFxuICBzaWduYXR1cmVwYWQ6IHtcbiAgICByb290OiBcInN2X3Ffc2lnbmF0dXJlcGFkIHNqc19zcF9jb250YWluZXJcIixcbiAgICBjb250cm9sczogXCJzanNfc3BfY29udHJvbHNcIixcbiAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcbiAgfSxcbiAgc2F2ZURhdGE6IHtcbiAgICByb290OiBcIlwiLFxuICAgIHNhdmluZzogXCJhbGVydCBhbGVydC1pbmZvXCIsXG4gICAgZXJyb3I6IFwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIsXG4gICAgc3VjY2VzczogXCJhbGVydCBhbGVydC1zdWNjZXNzXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlwiLFxuICB9LFxuICB3aW5kb3c6IHtcbiAgICByb290OiBcIm1vZGFsLWNvbnRlbnRcIixcbiAgICBib2R5OiBcIm1vZGFsLWJvZHlcIixcbiAgICBoZWFkZXI6IHtcbiAgICAgIHJvb3Q6IFwibW9kYWwtaGVhZGVyIGNhcmQtdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICB9LFxuICB9LFxufTtcbig8YW55PnN1cnZleUNzcylbXCJib290c3RyYXBtYXRlcmlhbFwiXSA9IGRlZmF1bHRCb290c3RyYXBNYXRlcmlhbENzcztcbiIsImltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuL2Nzc3N0YW5kYXJkXCI7XG5leHBvcnQgdmFyIG1vZGVybkNzcyA9IHtcbiAgcm9vdDogXCJzdi1yb290LW1vZGVyblwiLFxuICBjb250YWluZXI6IFwic3YtY29udGFpbmVyLW1vZGVyblwiLFxuICBoZWFkZXI6IFwic3YtdGl0bGUgc3YtY29udGFpbmVyLW1vZGVybl9fdGl0bGVcIixcbiAgYm9keTogXCJzdi1ib2R5XCIsXG4gIGJvZHlFbXB0eTogXCJzdi1ib2R5IHN2LWJvZHktLWVtcHR5XCIsXG4gIGZvb3RlcjogXCJzdi1mb290ZXIgc3YtYm9keV9fZm9vdGVyIHN2LWNsZWFyZml4XCIsXG4gIHRpdGxlOiBcIlwiLFxuICBkZXNjcmlwdGlvbjogXCJcIixcbiAgbG9nbzogXCJzdi1sb2dvXCIsXG4gIGxvZ29JbWFnZTogXCJzdi1sb2dvX19pbWFnZVwiLFxuICBoZWFkZXJUZXh0OiBcInN2LWhlYWRlcl9fdGV4dFwiLFxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxuICBjb21wbGV0ZWRQYWdlOiBcInN2LWNvbXBsZXRlZHBhZ2VcIixcbiAgbmF2aWdhdGlvbjoge1xuICAgIGNvbXBsZXRlOiBcInN2LWJ0biBzdi1mb290ZXJfX2NvbXBsZXRlLWJ0blwiLFxuICAgIHByZXY6IFwic3YtYnRuIHN2LWZvb3Rlcl9fcHJldi1idG5cIixcbiAgICBuZXh0OiBcInN2LWJ0biBzdi1mb290ZXJfX25leHQtYnRuXCIsXG4gICAgc3RhcnQ6IFwic3YtYnRuIHN2LWZvb3Rlcl9fc3RhcnQtYnRuXCIsXG4gICAgcHJldmlldzogXCJzdi1idG4gc3YtZm9vdGVyX19wcmV2aWV3LWJ0blwiLFxuICAgIGVkaXQ6IFwic3YtYnRuIHN2LWZvb3Rlcl9fZWRpdC1idG5cIixcbiAgfSxcbiAgcGFuZWw6IHtcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1wYW5lbF9fdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3YtcGFuZWxfX3RpdGxlLS1leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcInN2LXBhbmVsX190aXRsZS0tZXJyb3JcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1wYW5lbF9fZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3YtcGFuZWwgc3Ytcm93X19wYW5lbFwiLFxuICAgIGNvbnRlbnQ6IFwic3YtcGFuZWxfX2NvbnRlbnRcIixcbiAgICBpY29uOiBcInN2LXBhbmVsX19pY29uXCIsXG4gICAgaWNvbkV4cGFuZGVkOiBcInN2LXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgIGZvb3RlcjogXCJzdi1wYW5lbF9fZm9vdGVyXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInN2LXBhbmVsX19yZXF1aXJlZC10ZXh0XCIsXG4gICAgbnVtYmVyOiBcInN2LXF1ZXN0aW9uX19udW1cIixcbiAgfSxcbiAgcGFuZWxkeW5hbWljOiB7XG4gICAgcm9vdDogXCJzdi1wYW5lbGR5bmFtaWNcIixcbiAgICBuYXZpZ2F0aW9uOiBcInN2LXBhbmVsZHluYW1pY19fbmF2aWdhdGlvblwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJzdi1idG5cIixcbiAgICBidXR0b25SZW1vdmU6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlUmlnaHQ6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiLFxuICAgIGJ1dHRvbkFkZDogXCJzdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxuICAgIGJ1dHRvbk5leHQ6IFwic3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiLFxuICAgIHByb2dyZXNzQ29udGFpbmVyOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcbiAgICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiLFxuICAgIHNlcGFyYXRvcjogXCJzdi1wYW5lbGR5bmFtaWNfX3NlcGFyYXRvclwiLFxuICAgIHBhbmVsV3JhcHBlcjogXCJzdi1wYW5lbGR5bmFtaWNfX3BhbmVsLXdyYXBwZXJcIixcbiAgICBwYW5lbFdyYXBwZXJJblJvdzogXCJzdi1wYW5lbGR5bmFtaWNfX3BhbmVsLXdyYXBwZXItLWluLXJvd1wiLFxuICB9LFxuICBwcm9ncmVzczogXCJzdi1wcm9ncmVzcyBzdi1ib2R5X19wcm9ncmVzc1wiLFxuICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gIHByb2dyZXNzVGV4dDogXCJzdi1wcm9ncmVzc19fdGV4dFwiLFxuICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW46IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLS1oaWRkZW5cIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRQYXNzZWQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50XCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Tm9uQ2xpY2thYmxlOlxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIixcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtZGVzY3JpcHRpb25cIixcbiAgcGFnZToge1xuICAgIHJvb3Q6IFwic3YtcGFnZSBzdi1ib2R5X19wYWdlXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcGFnZV9fdGl0bGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1wYWdlX19kZXNjcmlwdGlvblwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwic3YtdGl0bGUgc3YtcGFnZV9fdGl0bGVcIixcbiAgcGFnZURlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhZ2VfX2Rlc2NyaXB0aW9uXCIsXG4gIHJvdzogXCJzdi1yb3cgc3YtY2xlYXJmaXhcIixcbiAgcXVlc3Rpb246IHtcbiAgICBtYWluUm9vdDogXCJzdi1xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3YtcXVlc3Rpb24gc3Ytcm93X19xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uLS1mbG93XCIsXG4gICAgYXNDZWxsOiBcInN2LXRhYmxlX19jZWxsXCIsXG4gICAgaGVhZGVyOiBcInN2LXF1ZXN0aW9uX19oZWFkZXJcIixcbiAgICBoZWFkZXJMZWZ0OiBcInN2LXF1ZXN0aW9uX19oZWFkZXItLWxvY2F0aW9uLS1sZWZ0XCIsXG4gICAgaGVhZGVyVG9wOiBcInN2LXF1ZXN0aW9uX19oZWFkZXItLWxvY2F0aW9uLS10b3BcIixcbiAgICBoZWFkZXJCb3R0b206IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLWJvdHRvbVwiLFxuICAgIGNvbnRlbnQ6IFwic3YtcXVlc3Rpb25fX2NvbnRlbnRcIixcbiAgICBjb250ZW50TGVmdDogXCJzdi1xdWVzdGlvbl9fY29udGVudC0tbGVmdFwiLFxuICAgIHRpdGxlTGVmdFJvb3Q6IFwiXCIsXG4gICAgdGl0bGVPbkFuc3dlcjogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLWFuc3dlclwiLFxuICAgIHRpdGxlT25FcnJvcjogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLWVycm9yXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcXVlc3Rpb25fX3RpdGxlXCIsXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tZXhwYW5kYWJsZVwiLFxuICAgIGljb246IFwic3YtcXVlc3Rpb25fX2ljb25cIixcbiAgICBpY29uRXhwYW5kZWQ6IFwic3YtcXVlc3Rpb25fX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInN2LXF1ZXN0aW9uX19yZXF1aXJlZC10ZXh0XCIsXG4gICAgbnVtYmVyOiBcInN2LXF1ZXN0aW9uX19udW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1xdWVzdGlvbl9fZGVzY3JpcHRpb25cIixcbiAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic3YtZGVzY3JpcHRpb24gc3YtcXVlc3Rpb25fX2Rlc2NyaXB0aW9uXCIsXG4gICAgY29tbWVudDogXCJzdi1jb21tZW50XCIsXG4gICAgcmVxdWlyZWQ6IFwic3YtcXVlc3Rpb24tLXJlcXVpcmVkXCIsXG4gICAgdGl0bGVSZXF1aXJlZDogXCJzdi1xdWVzdGlvbl9fdGl0bGUtLXJlcXVpcmVkXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb290ZXI6IFwic3YtcXVlc3Rpb25fX2Zvb3RlclwiLFxuICAgIGZvcm1Hcm91cDogXCJzdi1xdWVzdGlvbl9fZm9ybS1ncm91cFwiLFxuICAgIGhhc0Vycm9yOiBcIlwiLFxuICAgIGRpc2FibGVkOiBcInN2LXF1ZXN0aW9uLS1kaXNhYmxlZFwiLFxuICB9LFxuICBpbWFnZTogeyByb290OiBcInN2LWltYWdlXCIsIGltYWdlOiBcInN2X2ltYWdlX2ltYWdlXCIgfSxcbiAgZXJyb3I6IHtcbiAgICByb290OiBcInN2LXF1ZXN0aW9uX19lcmJveFwiLFxuICAgIGljb246IFwiXCIsXG4gICAgaXRlbTogXCJcIixcbiAgICBsb2NhdGlvblRvcDogXCJzdi1xdWVzdGlvbl9fZXJib3gtLWxvY2F0aW9uLS10b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdi1xdWVzdGlvbl9fZXJib3gtLWxvY2F0aW9uLS1ib3R0b21cIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2LXNlbGVjdGJhc2VcIixcbiAgICBpdGVtOiBcInN2LWl0ZW0gc3YtY2hlY2tib3ggc3Ytc2VsZWN0YmFzZV9faXRlbVwiLFxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic3YtY2hlY2tib3gtLXNlbGVjdGFsbFwiLFxuICAgIGl0ZW1Ob25lOiBcInN2LWNoZWNrYm94LS1ub25lXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LWNoZWNrYm94LS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LWNoZWNrYm94LS1jaGVja2VkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LWNoZWNrYm94LS1hbGxvd2hvdmVyXCIsXG4gICAgaXRlbUlubGluZTogXCJzdi1zZWxlY3RiYXNlX19pdGVtLS1pbmxpbmVcIixcbiAgICBsYWJlbDogXCJzdi1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtY2hlY2tib3hfX3N2Z1wiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LWNoZWNrYm94X19kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIGNvbHVtbjogXCJzdi1zZWxlY3RiYXNlX19jb2x1bW5cIixcbiAgfSxcbiAgcmFua2luZzoge1xuICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxuICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50XCIsXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAvLyBpdGVtVGV4dDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgaXRlbUljb25Db250YWluZXI6IFwic3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiLFxuICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgIGl0ZW1JY29uRm9jdXNNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiLFxuICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcInN2LXNlbGVjdGJhc2VcIixcbiAgICBpdGVtOiBcInN2LWl0ZW0gc3YtcmFkaW8gc3Ytc2VsZWN0YmFzZV9faXRlbVwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3Ytc2VsZWN0YmFzZV9faXRlbS0taW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3Ytc2VsZWN0YmFzZV9fbGFiZWxcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LXJhZGlvLS1jaGVja2VkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW4gc3YtaXRlbV9fY29udHJvbFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnIHN2LXJhZGlvX19zdmdcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtaXRlbV9fY29udHJvbC1sYWJlbFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1yYWRpb19fZGVjb3JhdG9yXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdi1idG4gc3Ytc2VsZWN0YmFzZV9fY2xlYXItYnRuXCIsXG4gICAgY29sdW1uOiBcInN2LXNlbGVjdGJhc2VfX2NvbHVtblwiLFxuICB9LFxuICBidXR0b25ncm91cDoge1xuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICBpdGVtSWNvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgaXRlbVNlbGVjdGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIHJvb3Q6IFwic3ZfcWJsblwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgaXRlbTogXCJzdi1ib29sZWFuIHN2LWl0ZW1cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmRldGVybWluYXRlOiBcInN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgc2xpZGVyOiBcInN2LWJvb2xlYW5fX3NsaWRlclwiLFxuICAgIHNsaWRlclRleHQ6IFwic3YtaGlkZGVuXCIsXG4gICAgbGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwgXCIsXG4gICAgZGlzYWJsZWRMYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yIFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnICBzdi1ib29sZWFuX19zdmdcIixcbiAgICBjaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX19jaGVja2VkLXBhdGhcIixcbiAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXG4gICAgaW5kZXRlcm1pbmF0ZVBhdGg6IFwic3YtYm9vbGVhbl9faW5kZXRlcm1pbmF0ZS1wYXRoXCIsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICByb290OiBcInN2LXRleHRcIixcbiAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgIG9uRXJyb3I6IFwic3YtdGV4dC0tZXJyb3JcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJzdi1tdWx0aXBsZXRleHRcIixcbiAgICBpdGVtOiBcInN2LW11bHRpcGxldGV4dF9faXRlbVwiLFxuICAgIGl0ZW1UaXRsZTogXCJzdi1tdWx0aXBsZXRleHRfX2l0ZW0tdGl0bGVcIixcbiAgICByb3c6IFwic3YtbXVsdGlwbGV0ZXh0X19yb3dcIixcbiAgICBjZWxsOiBcInN2LW11bHRpcGxldGV4dF9fY2VsbFwiLFxuICB9LFxuICBkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBjb250cm9sOiBcInN2LWRyb3Bkb3duXCIsXG4gICAgc2VsZWN0V3JhcHBlcjogXCJcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIG9uRXJyb3I6IFwic3YtZHJvcGRvd24tLWVycm9yXCIsXG4gIH0sXG4gIGltYWdlcGlja2VyOiB7XG4gICAgcm9vdDogXCJzdi1pbWFnZXBpY2tlclwiLFxuICAgIGl0ZW06IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW1cIixcbiAgICBpdGVtSW5saW5lOiBcInN2LWltYWdlcGlja2VyX19pdGVtLS1pbmxpbmVcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0tY2hlY2tlZFwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0tZGlzYWJsZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWFsbG93aG92ZXJcIixcbiAgICBsYWJlbDogXCJzdi1pbWFnZXBpY2tlcl9fbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi1pbWFnZXBpY2tlcl9fY29udHJvbFwiLFxuICAgIGltYWdlOiBcInN2LWltYWdlcGlja2VyX19pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2LWltYWdlcGlja2VyX190ZXh0XCIsXG4gICAgY2xlYXJCdXR0b246IFwic3YtYnRuXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgfSxcbiAgbWF0cml4OiB7XG4gICAgdGFibGVXcmFwcGVyOiBcInN2LW1hdHJpeFwiLFxuICAgIHJvb3Q6IFwic3YtdGFibGUgc3YtbWF0cml4LXJvb3RcIixcbiAgICByb3dFcnJvcjogXCJzdi1tYXRyaXhfX3Jvdy0tZXJyb3JcIixcbiAgICBjZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LW1hdHJpeF9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIGxhYmVsOiBcInN2LWl0ZW0gc3YtcmFkaW8gc3YtbWF0cml4X19sYWJlbFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sIHN2LXJhZGlvX19jb250cm9sXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtcmFkaW8tLWNoZWNrZWRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtcmFkaW8tLWRpc2FibGVkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyBzdi1yYWRpb19fc3ZnXCIsXG4gICAgY2VsbFRleHQ6IFwic3YtbWF0cml4X190ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzdi1tYXRyaXhfX3RleHQtLWNoZWNrZWRcIixcbiAgICBjZWxsVGV4dERpc2FibGVkOiBcInN2LW1hdHJpeF9fdGV4dC0tZGlzYWJsZWRcIixcbiAgfSxcbiAgbWF0cml4ZHJvcGRvd246IHtcbiAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeGRyb3Bkb3duXCIsXG4gICAgY2VsbDogXCJzdi10YWJsZV9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIHJvdzogXCJzdi10YWJsZV9fcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2LXRhYmxlX19yb3cgc3YtdGFibGVfX3Jvdy0tZGV0YWlsXCIsXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLXJvd3RleHRcIixcbiAgICBkZXRhaWxDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWxcIixcbiAgICBjaG9pY2VDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1jaG9pY2VcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLWJ1dHRvbi0tZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2LWRldGFpbC1wYW5lbF9faWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdi1kZXRhaWwtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdi10YWJsZV9fY2VsbCBzdi10YWJsZV9fY2VsbC0tYWN0aW9uc1wiLFxuICB9LFxuICBtYXRyaXhkeW5hbWljOiB7XG4gICAgcm9vdDogXCJzdi10YWJsZSBzdi1tYXRyaXhkeW5hbWljXCIsXG4gICAgY2VsbDogXCJzdi10YWJsZV9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIGJ1dHRvbjogXCJzdi1idG5cIixcbiAgICBidXR0b25BZGQ6IFwic3YtbWF0cml4ZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJzdi1tYXRyaXhkeW5hbWljX19yZW1vdmUtYnRuXCIsXG4gICAgaWNvbkFkZDogXCJcIixcbiAgICBpY29uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25EcmFnOiBcInN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiLFxuICAgIHJvdzogXCJzdi10YWJsZV9fcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2LXRhYmxlX19yb3cgc3YtdGFibGVfX3Jvdy0tZGV0YWlsXCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsXCIsXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b24tLWV4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdi1kZXRhaWwtcGFuZWxfX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3YtZGV0YWlsLXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLXBhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWFjdGlvbnNcIixcbiAgICBlbXB0eVJvd3NTZWN0aW9uOiBcInN2LXRhYmxlX19lbXB0eS0tcm93cy0tc2VjdGlvblwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwic3YtdGFibGVfX2VtcHR5LS1yb3dzLS10ZXh0XCIsXG4gICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICB9LFxuICByYXRpbmc6IHtcbiAgICByb290OiBcInN2LXJhdGluZ1wiLFxuICAgIGl0ZW06IFwic3YtcmF0aW5nX19pdGVtXCIsXG4gICAgc2VsZWN0ZWQ6IFwic3YtcmF0aW5nX19pdGVtLS1zZWxlY3RlZFwiLFxuICAgIG1pblRleHQ6IFwic3YtcmF0aW5nX19taW4tdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2LXJhdGluZ19faXRlbS10ZXh0XCIsXG4gICAgbWF4VGV4dDogXCJzdi1yYXRpbmdfX21heC10ZXh0XCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LXJhdGluZy0tZGlzYWJsZWRcIixcbiAgfSxcbiAgY29tbWVudDoge1xuICAgIHJvb3Q6IFwic3YtY29tbWVudFwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gIH0sXG4gIGV4cHJlc3Npb246IFwiXCIsXG4gIGZpbGU6IHtcbiAgICByb290OiBcInN2LWZpbGVcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBwcmV2aWV3OiBcInN2LWZpbGVfX3ByZXZpZXdcIixcbiAgICBmaWxlU2lnbjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1maWxlX19zaWduXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1maWxlX19kZWNvcmF0b3JcIixcbiAgICBmaWxlSW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwic3YtZGVzY3JpcHRpb24gc3YtZmlsZV9fbm8tZmlsZS1jaG9zZW5cIixcbiAgICBjaG9vc2VGaWxlOiBcInN2LWJ0biBzdi1maWxlX19jaG9vc2UtYnRuXCIsXG4gICAgY29udHJvbERpc2FibGVkOiBcInN2LWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkXCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2LWhpZGRlblwiLFxuICAgIHJlbW92ZUJ1dHRvbkJvdHRvbTogXCJzdi1idG4gc3YtZmlsZV9fY2xlYW4tYnRuXCIsXG4gICAgcmVtb3ZlRmlsZTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWZpbGVfX3JlbW92ZS1zdmdcIixcbiAgICB3cmFwcGVyOiBcInN2LWZpbGVfX3dyYXBwZXJcIixcbiAgfSxcbiAgc2lnbmF0dXJlcGFkOiB7XG4gICAgcm9vdDogXCJzdi1zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgY29udHJvbHM6IFwic2pzX3NwX2NvbnRyb2xzXCIsXG4gICAgcGxhY2Vob2xkZXI6IFwic2pzX3NwX3BsYWNlaG9sZGVyXCIsXG4gICAgY2xlYXJCdXR0b246IFwic2pzX3NwX2NsZWFyXCIsXG4gIH0sXG4gIHNhdmVEYXRhOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBzYXZpbmc6IFwiXCIsXG4gICAgZXJyb3I6IFwiXCIsXG4gICAgc3VjY2VzczogXCJcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXG4gICAgYm9keTogXCJzdl93aW5kb3dfY29udGVudFwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJzdl93aW5kb3dfdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgYnV0dG9uOiBcIlwiLFxuICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsXG4gICAgICBidXR0b25Db2xsYXBzZWQ6IFwiXCIsXG4gICAgfSxcbiAgfSxcbn07XG5cbnN1cnZleUNzc1tcIm1vZGVyblwiXSA9IG1vZGVybkNzcztcbiIsImV4cG9ydCB2YXIgc3VydmV5Q3NzOiBhbnkgPSB7XHJcbiAgY3VycmVudFR5cGU6IFwiXCIsXHJcbiAgZ2V0Q3NzOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsb2MgPSB0aGlzLmN1cnJlbnRUeXBlID8gdGhpc1t0aGlzLmN1cnJlbnRUeXBlXSA6IGRlZmF1bHRTdGFuZGFyZENzcztcclxuICAgIGlmICghbG9jKSBsb2MgPSBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICByZXR1cm4gbG9jO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgdmFyIGRlZmF1bHRTdGFuZGFyZENzcyA9IHtcclxuICByb290OiBcInN2X21haW4gc3ZfZGVmYXVsdF9jc3NcIixcclxuICBjb250YWluZXI6IFwic3ZfY29udGFpbmVyXCIsXHJcbiAgaGVhZGVyOiBcInN2X2hlYWRlclwiLFxyXG4gIGJvZHk6IFwic3ZfYm9keVwiLFxyXG4gIGJvZHlFbXB0eTogXCJzdl9ib2R5IHN2X2JvZHlfZW1wdHlcIixcclxuICBmb290ZXI6IFwic3ZfbmF2XCIsXHJcbiAgdGl0bGU6IFwiXCIsXHJcbiAgZGVzY3JpcHRpb246IFwiXCIsXHJcbiAgbG9nbzogXCJzdl9sb2dvXCIsXHJcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXHJcbiAgaGVhZGVyVGV4dDogXCJzdl9oZWFkZXJfX3RleHRcIixcclxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxyXG4gIGNvbXBsZXRlZFBhZ2U6IFwic3ZfY29tcGxldGVkX3BhZ2VcIixcclxuICBuYXZpZ2F0aW9uOiB7XHJcbiAgICBjb21wbGV0ZTogXCJzdl9jb21wbGV0ZV9idG5cIixcclxuICAgIHByZXY6IFwic3ZfcHJldl9idG5cIixcclxuICAgIG5leHQ6IFwic3ZfbmV4dF9idG5cIixcclxuICAgIHN0YXJ0OiBcInN2X3N0YXJ0X2J0blwiLFxyXG4gICAgcHJldmlldzogXCJzdl9wcmV2aWV3X2J0blwiLFxyXG4gICAgZWRpdDogXCJzdl9lZGl0X2J0blwiLFxyXG4gIH0sXHJcbiAgcHJvZ3Jlc3M6IFwic3ZfcHJvZ3Jlc3NcIixcclxuICBwcm9ncmVzc0JhcjogXCJzdl9wcm9ncmVzc19iYXJcIixcclxuICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcclxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIixcclxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcclxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uSGlkZGVuOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50UGFzc2VkOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OlxyXG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcclxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudE5vbkNsaWNrYWJsZTpcclxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcclxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCIsXHJcbiAgcGFnZToge1xyXG4gICAgcm9vdDogXCJzdl9wX3Jvb3RcIixcclxuICAgIHRpdGxlOiBcInN2X3BhZ2VfdGl0bGVcIixcclxuICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxyXG4gIH0sXHJcbiAgLy8gVE9ETzogbW92ZSB0byB0aGUgcGFnZSBvYmplY3RcclxuICBwYWdlVGl0bGU6IFwic3ZfcGFnZV90aXRsZVwiLFxyXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJcIixcclxuICByb3c6IFwic3Zfcm93XCIsXHJcbiAgcXVlc3Rpb246IHtcclxuICAgIG1haW5Sb290OiBcInN2X3Egc3ZfcXN0blwiLFxyXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IHN2X3FzdG5cIixcclxuICAgIGhlYWRlcjogXCJcIixcclxuICAgIGhlYWRlckxlZnQ6IFwidGl0bGUtbGVmdFwiLFxyXG4gICAgY29udGVudDogXCJcIixcclxuICAgIGNvbnRlbnRMZWZ0OiBcImNvbnRlbnQtbGVmdFwiLFxyXG4gICAgdGl0bGVMZWZ0Um9vdDogXCJzdl9xc3RuX2xlZnRcIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcclxuICAgIHRpdGxlOiBcInN2X3FfdGl0bGVcIixcclxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9xX3RpdGxlX2V4cGFuZGFibGVcIixcclxuICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxyXG4gICAgZGVzY3JpcHRpb246IFwic3ZfcV9kZXNjcmlwdGlvblwiLFxyXG4gICAgY29tbWVudDogXCJcIixcclxuICAgIHJlcXVpcmVkOiBcIlwiLFxyXG4gICAgdGl0bGVSZXF1aXJlZDogXCJcIixcclxuICAgIGhhc0Vycm9yOiBcIlwiLFxyXG4gICAgaW5kZW50OiAyMCxcclxuICAgIGZvb3RlcjogXCJzdl9xX2Zvb3RlclwiLFxyXG4gICAgZm9ybUdyb3VwOiBcImZvcm0tZ3JvdXBcIixcclxuICAgIGFzQ2VsbDogXCJzdl9tYXRyaXhfY2VsbFwiLFxyXG4gICAgaWNvbjogXCJzdl9xdWVzdGlvbl9pY29uXCIsXHJcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcclxuICAgIGRpc2FibGVkOiBcInN2X3EtLWRpc2FibGVkXCIsXHJcbiAgfSxcclxuICBwYW5lbDoge1xyXG4gICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxyXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiLFxyXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxyXG4gICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXHJcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcclxuICAgIGRlc2NyaXB0aW9uOiBcInN2X3BfZGVzY3JpcHRpb25cIixcclxuICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxyXG4gICAgZm9vdGVyOiBcInN2X3BfZm9vdGVyXCIsXHJcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcclxuICB9LFxyXG4gIGVycm9yOiB7XHJcbiAgICByb290OiBcInN2X3FfZXJib3hcIixcclxuICAgIGljb246IFwiXCIsXHJcbiAgICBpdGVtOiBcIlwiLFxyXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcclxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2X3FzdG5fZXJyb3JfYm90dG9tXCIsXHJcbiAgfSxcclxuXHJcbiAgYm9vbGVhbjoge1xyXG4gICAgcm9vdDogXCJzdl9xY2JjIHN2X3FibG5cIixcclxuICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxyXG4gICAgY29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXHJcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXHJcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcclxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcclxuICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcclxuICAgIHNsaWRlclRleHQ6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcclxuICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXHJcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yIFwiLFxyXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxyXG4gICAgY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fY2hlY2tlZC1wYXRoXCIsXHJcbiAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXHJcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcclxuICB9LFxyXG4gIGNoZWNrYm94OiB7XHJcbiAgICByb290OiBcInN2X3FjYmMgc3ZfcWNieFwiLFxyXG4gICAgaXRlbTogXCJzdl9xX2NoZWNrYm94XCIsXHJcbiAgICBpdGVtU2VsZWN0QWxsOiBcInN2X3FfY2hlY2tib3hfc2VsZWN0YWxsXCIsXHJcbiAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9jaGVja2JveF9pbmxpbmVcIixcclxuICAgIGxhYmVsOiBcInN2X3FfY2hlY2tib3hfbGFiZWxcIixcclxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfY2hlY2tib3hfY29udHJvbF9pdGVtXCIsXHJcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxyXG4gICAgY29udHJvbExhYmVsOiBcInN2X3FfY2hlY2tib3hfY29udHJvbF9sYWJlbFwiLFxyXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2hlY2tib3gtbWF0ZXJpYWxcIixcclxuICAgIG90aGVyOiBcInN2X3Ffb3RoZXIgc3ZfcV9jaGVja2JveF9vdGhlclwiLFxyXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxyXG4gIH0sXHJcbiAgcmFua2luZzoge1xyXG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXHJcbiAgICByb290TW9iaWxlTW9kOiBcInN2LXJhbmtpbmctLW1vYmlsZVwiLFxyXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxyXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcclxuICAgIGl0ZW1Db250ZW50OiBcInN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiLFxyXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcclxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxyXG4gICAgY29udHJvbExhYmVsOiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxyXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXHJcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXHJcbiAgICBpdGVtSWNvbjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb25cIixcclxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxyXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXHJcbiAgICBpdGVtR2hvc3RNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1naG9zdFwiLFxyXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXHJcbiAgfSxcclxuICBjb21tZW50OiBcIlwiLFxyXG4gIGRyb3Bkb3duOiB7XHJcbiAgICByb290OiBcIlwiLFxyXG4gICAgY29udHJvbDogXCJzdl9xX2Ryb3Bkb3duX2NvbnRyb2xcIixcclxuICAgIHNlbGVjdFdyYXBwZXI6IFwic3Zfc2VsZWN0X3dyYXBwZXJcIixcclxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXJcIixcclxuICB9LFxyXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxyXG4gIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXHJcbiAgbWF0cml4OiB7XHJcbiAgICByb290OiBcInN2X3FfbWF0cml4XCIsXHJcbiAgICBsYWJlbDogXCJzdl9xX21fbGFiZWxcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBjZWxsOiBcInN2X3FfbV9jZWxsXCIsXHJcbiAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXHJcbiAgICBjZWxsVGV4dFNlbGVjdGVkOiBcInN2X3FfbV9jZWxsX3NlbGVjdGVkXCIsXHJcbiAgICBjZWxsTGFiZWw6IFwic3ZfcV9tX2NlbGxfbGFiZWxcIixcclxuICB9LFxyXG4gIG1hdHJpeGRyb3Bkb3duOiB7XHJcbiAgICByb290OiBcInN2X3FfbWF0cml4X2Ryb3Bkb3duXCIsXHJcbiAgICBjZWxsOiBcInN2X21hdHJpeF9jZWxsXCIsXHJcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxyXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcclxuICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxyXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcclxuICAgIGNob2ljZUNlbGw6IFwic3YtdGFibGVfX2NlbGwtLWNob2ljZVwiLFxyXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcclxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcclxuICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcclxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcclxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcclxuICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcclxuICB9LFxyXG4gIG1hdHJpeGR5bmFtaWM6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9tYXRyaXhfZHluYW1pY1wiLFxyXG4gICAgYnV0dG9uOiBcInN2X21hdHJpeF9keW5hbWljX2J1dHRvblwiLFxyXG4gICAgYnV0dG9uQWRkOiBcIlwiLFxyXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxyXG4gICAgaWNvbkFkZDogXCJcIixcclxuICAgIGljb25SZW1vdmU6IFwiXCIsXHJcbiAgICBpY29uRHJhZzogXCJzdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIixcclxuICAgIGNlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcclxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXHJcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXHJcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxyXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXHJcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxyXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxyXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxyXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxyXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXHJcbiAgICBlbXB0eVJvd3NUZXh0OiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIixcclxuICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcclxuICB9LFxyXG4gIHBhbmVsZHluYW1pYzoge1xyXG4gICAgcm9vdDogXCJzdl9wYW5lbF9keW5hbWljXCIsXHJcbiAgICB0aXRsZTogXCJzdl9wX3RpdGxlXCIsXHJcbiAgICBidXR0b246IFwiXCIsXHJcbiAgICBidXR0b25BZGQ6IFwic3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmU6IFwic3ZfcF9yZW1vdmVfYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdl9wX3JlbW92ZV9idG5fcmlnaHRcIixcclxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxyXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXHJcbiAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxyXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcclxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcclxuICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcclxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcclxuICB9LFxyXG4gIG11bHRpcGxldGV4dDoge1xyXG4gICAgcm9vdDogXCJzdl9xX210XCIsXHJcbiAgICBpdGVtVGl0bGU6IFwic3ZfcV9tdF90aXRsZVwiLFxyXG4gICAgcm93OiBcInN2X3FfbXRfcm93XCIsXHJcbiAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIHN2X3FfdGV4dF9yb290XCIsXHJcbiAgfSxcclxuICByYWRpb2dyb3VwOiB7XHJcbiAgICByb290OiBcInN2X3FjYmNcIixcclxuICAgIGl0ZW06IFwic3ZfcV9yYWRpb2dyb3VwXCIsXHJcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXHJcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBsYWJlbDogXCJzdl9xX3JhZGlvZ3JvdXBfbGFiZWxcIixcclxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2l0ZW1cIixcclxuICAgIGNvbnRyb2xMYWJlbDogXCJcIixcclxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNpcmNsZVwiLFxyXG4gICAgb3RoZXI6IFwic3ZfcV9vdGhlciBzdl9xX3JhZGlvZ3JvdXBfb3RoZXJcIixcclxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhclwiLFxyXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxyXG4gIH0sXHJcbiAgYnV0dG9uZ3JvdXA6IHtcclxuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXHJcbiAgICBpdGVtOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbVwiLFxyXG4gICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxyXG4gICAgaXRlbUNhcHRpb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWNhcHRpb25cIixcclxuICAgIGl0ZW1Ib3ZlcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWhvdmVyXCIsXHJcbiAgICBpdGVtU2VsZWN0ZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiLFxyXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXHJcbiAgfSxcclxuICBpbWFnZXBpY2tlcjoge1xyXG4gICAgcm9vdDogXCJzdl9pbWdzZWxcIixcclxuICAgIGl0ZW06IFwic3ZfcV9pbWdzZWxcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGxhYmVsOiBcInN2X3FfaW1nc2VsX2xhYmVsXCIsXHJcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcclxuICAgIGltYWdlOiBcInN2X3FfaW1nc2VsX2ltYWdlXCIsXHJcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXHJcbiAgICBpdGVtVGV4dDogXCJzdl9xX2ltZ3NlbF90ZXh0XCIsXHJcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcclxuICB9LFxyXG4gIHJhdGluZzoge1xyXG4gICAgcm9vdDogXCJzdl9xX3JhdGluZ1wiLFxyXG4gICAgaXRlbTogXCJzdl9xX3JhdGluZ19pdGVtXCIsXHJcbiAgICBzZWxlY3RlZDogXCJhY3RpdmVcIixcclxuICAgIG1pblRleHQ6IFwic3ZfcV9yYXRpbmdfbWluX3RleHRcIixcclxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxyXG4gICAgbWF4VGV4dDogXCJzdl9xX3JhdGluZ19tYXhfdGV4dFwiLFxyXG4gIH0sXHJcbiAgdGV4dDogXCJzdl9xX3RleHRfcm9vdFwiLFxyXG4gIGV4cHJlc3Npb246IFwiXCIsXHJcbiAgZmlsZToge1xyXG4gICAgcm9vdDogXCJzdl9xX2ZpbGVcIixcclxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcclxuICAgIHByZXZpZXc6IFwic3ZfcV9maWxlX3ByZXZpZXdcIixcclxuICAgIHJlbW92ZUJ1dHRvbjogXCJzdl9xX2ZpbGVfcmVtb3ZlX2J1dHRvblwiLFxyXG4gICAgZmlsZUlucHV0OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXHJcbiAgICByZW1vdmVGaWxlOiBcInN2X3FfZmlsZV9yZW1vdmVcIixcclxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBmaWxlRGVjb3JhdG9yOiBcInN2LWZpbGVfX2RlY29yYXRvclwiLFxyXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtaGlkZGVuXCIsXHJcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXHJcbiAgICBjaG9vc2VGaWxlOiBcInN2X3FfZmlsZV9jaG9vc2VfYnV0dG9uXCIsXHJcbiAgICBub0ZpbGVDaG9zZW46IFwic3ZfcV9maWxlX3BsYWNlaG9sZGVyXCIsXHJcbiAgfSxcclxuICBzaWduYXR1cmVwYWQ6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxyXG4gICAgY29udHJvbHM6IFwic2pzX3NwX2NvbnRyb2xzXCIsXHJcbiAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcclxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxyXG4gIH0sXHJcbiAgc2F2ZURhdGE6IHtcclxuICAgIHJvb3Q6IFwiXCIsXHJcbiAgICBzYXZpbmc6IFwiXCIsXHJcbiAgICBlcnJvcjogXCJcIixcclxuICAgIHN1Y2Nlc3M6IFwiXCIsXHJcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXHJcbiAgfSxcclxuICB3aW5kb3c6IHtcclxuICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXHJcbiAgICBib2R5OiBcInN2X3dpbmRvd19jb250ZW50XCIsXHJcbiAgICBoZWFkZXI6IHtcclxuICAgICAgcm9vdDogXCJzdl93aW5kb3dfdGl0bGVcIixcclxuICAgICAgdGl0bGU6IFwiXCIsXHJcbiAgICAgIGJ1dHRvbjogXCJcIixcclxuICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsXHJcbiAgICAgIGJ1dHRvbkNvbGxhcHNlZDogXCJcIixcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuXHJcbnN1cnZleUNzc1tcInN0YW5kYXJkXCJdID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xyXG4iLCJpbXBvcnQgeyBCYXNlLCBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5XCI7XG5cbmV4cG9ydCBjbGFzcyBEcmFnRHJvcEhlbHBlciBleHRlbmRzIEJhc2Uge1xuICBwdWJsaWMgb25CZWZvcmVEcm9wOiBFdmVudEJhc2U8RHJhZ0Ryb3BIZWxwZXI+ID0gbmV3IEV2ZW50QmFzZSgpO1xuICBwdWJsaWMgb25BZnRlckRyb3A6IEV2ZW50QmFzZTxEcmFnRHJvcEhlbHBlcj4gPSBuZXcgRXZlbnRCYXNlKCk7XG5cbiAgcHVibGljIHN0YXRpYyByZXN0cmljdERyYWdRdWVzdGlvbkJldHdlZW5QYWdlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzdGF0aWMgZWRnZUhlaWdodDogbnVtYmVyID0gMzA7XG4gIHB1YmxpYyBzdGF0aWMgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBzdGF0aWMgcHJldkV2ZW50OiBhbnkgPSB7XG4gICAgZWxlbWVudDogbnVsbCxcbiAgICB4OiAtMSxcbiAgICB5OiAtMSxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBuZXdHaG9zdFBhZ2U6IFBhZ2VNb2RlbCA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgZ2hvc3RTdXJ2ZXlFbGVtZW50TmFtZSA9XG4gICAgXCJzdmMtZHJhZy1kcm9wLWdob3N0LXN1cnZleS1lbGVtZW50LW5hbWVcIjsgLy8gYmVmb3JlIHJlbmFtaW5nIHVzZSBnbG9iYSBzZWFyY2ggKHdlIGhhdmUgYWxzbyBjc3Mgc2VsZWN0b3JzKVxuXG4gIHByaXZhdGUgZHJhZ2dlZFN1cnZleUVsZW1lbnQ6IElFbGVtZW50ID0gbnVsbDtcbiAgQHByb3BlcnR5KCkgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQ6IElFbGVtZW50ID0gbnVsbDtcblxuICBwcml2YXRlIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQ6IEhUTUxFbGVtZW50ID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxJbnRlcnZhbElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IG51bGw7XG4gIHByaXZhdGUgZ2hvc3RTdXJ2ZXlFbGVtZW50OiBJRWxlbWVudCA9IG51bGw7XG4gIEBwcm9wZXJ0eSgpIGlzQm90dG9tOiBib29sZWFuID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0VkZ2U6IGJvb2xlYW4gPSBudWxsO1xuICBwcml2YXRlIHBhZ2VPclBhbmVsOiBQYWdlTW9kZWwgPSBudWxsO1xuICBwcml2YXRlIGl0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBpc0l0ZW1WYWx1ZUJlaW5nRHJhZ2dlZCgpIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5pc0Rlc2NlbmRhbnRPZihcbiAgICAgIHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQuZ2V0VHlwZSgpLFxuICAgICAgXCJpdGVtdmFsdWVcIlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZSgpIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1WYWx1ZUJlaW5nRHJhZ2dlZCgpKSB7XG4gICAgICByZXR1cm4gXCJbZGF0YS1zdmMtZHJvcC10YXJnZXQtaXRlbS12YWx1ZV1cIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiW2RhdGEtc3ZjLWRyb3AtdGFyZ2V0LWVsZW1lbnQtbmFtZV1cIjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VydmV5VmFsdWU/OiBTdXJ2ZXlNb2RlbCwgcHJpdmF0ZSBjcmVhdG9yPzogYW55KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3VydmV5KCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVZhbHVlIHx8IHRoaXMuY3JlYXRvci5zdXJ2ZXk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnREcmFnVG9vbGJveEl0ZW0oXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBkcmFnZ2VkRWxlbWVudEpzb246IEpzb25PYmplY3RcbiAgKSB7XG4gICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnRGcm9tSnNvbihkcmFnZ2VkRWxlbWVudEpzb24pO1xuICAgIHRoaXMuc3RhcnREcmFnU3VydmV5RWxlbWVudChldmVudCwgZHJhZ2dlZEVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0RHJhZ1N1cnZleUVsZW1lbnQoZXZlbnQ6IFBvaW50ZXJFdmVudCwgZHJhZ2dlZEVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQsIGRyYWdnZWRFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERyYWdJdGVtVmFsdWUoXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZVxuICApIHtcbiAgICBjb25zdCBkcmFnZ2VkRWxlbWVudCA9IDxhbnk+aXRlbTtcbiAgICB0aGlzLml0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQsIGRyYWdnZWRFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERyYWcoZXZlbnQ6IFBvaW50ZXJFdmVudCwgZHJhZ2dlZEVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCA9IGRyYWdnZWRFbGVtZW50O1xuICAgIHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50ID0gdGhpcy5jcmVhdGVHaG9zdFN1cnZleUVsZW1lbnQoKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSB0aGlzLmNyZWF0ZURyYWdnZWRFbGVtZW50U2hvcnRjdXQoKTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCk7XG4gICAgdGhpcy5tb3ZlU2hvcnRjdXRFbGVtZW50KGV2ZW50KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLm1vdmVEcmFnZ2VkRWxlbWVudCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5oYW5kbGVFc2NhcGVCdXR0b24pO1xuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMuZHJvcCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbVZhbHVlR2hvc3RQb3NpdGlvbihpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCAhPT0gaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuaXNCb3R0b20pIHJldHVybiBcImJvdHRvbVwiO1xuICAgIHJldHVybiBcInRvcFwiO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVHaG9zdFN1cnZleUVsZW1lbnQoKTogYW55IHtcbiAgICBjb25zdCBzdGFydFdpdGhOZXdMaW5lID0gdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudC5zdGFydFdpdGhOZXdMaW5lO1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2Yy1kcmFnLWRyb3AtZ2hvc3RcIjtcblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICB0eXBlOiBcImh0bWxcIixcbiAgICAgIG5hbWU6IERyYWdEcm9wSGVscGVyLmdob3N0U3VydmV5RWxlbWVudE5hbWUsXG4gICAgICBodG1sOiBgPGRpdiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPjwvZGl2PmAsXG4gICAgfTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnRGcm9tSnNvbihqc29uKTtcbiAgICBlbGVtZW50LnN0YXJ0V2l0aE5ld0xpbmUgPSBzdGFydFdpdGhOZXdMaW5lO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURyYWdnZWRFbGVtZW50U2hvcnRjdXQoKSB7XG4gICAgY29uc3QgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQ6IGFueSA9IHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQ7XG4gICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5pbm5lclRleHQgPVxuICAgICAgZHJhZ2dlZEVsZW1lbnRbXCJ0aXRsZVwiXSB8fFxuICAgICAgZHJhZ2dlZEVsZW1lbnRbXCJ0ZXh0XCJdIHx8XG4gICAgICBkcmFnZ2VkRWxlbWVudFtcIm5hbWVcIl07XG4gICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5jbGFzc05hbWUgPSBcInN2Yy1kcmFnLXNob3J0Y3V0XCI7XG4gICAgcmV0dXJuIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQ7XG4gIH1cblxuICBwcml2YXRlIG1vdmVEcmFnZ2VkRWxlbWVudCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgdGhpcy5tb3ZlU2hvcnRjdXRFbGVtZW50KGV2ZW50KTtcblxuICAgIGlmICh0aGlzLmlzSXRlbVZhbHVlQmVpbmdEcmFnZ2VkKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlSXRlbVZhbHVlRHJhZ092ZXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZVN1cnZleUVsZW1lbnREcmFnT3ZlcihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlRXNjYXBlQnV0dG9uID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBtb3ZlU2hvcnRjdXRFbGVtZW50KGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLmRvU2Nyb2xsKGV2ZW50LmNsaWVudFksIGV2ZW50LmNsaWVudFgpO1xuXG4gICAgY29uc3Qgc2hvcnRjdXRIZWlnaHQgPSB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IHNob3J0Y3V0V2lkdGggPSB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQub2Zmc2V0V2lkdGg7XG4gICAgY29uc3Qgc2hvcnRjdXRYQ2VudGVyID0gc2hvcnRjdXRXaWR0aCAvIDI7XG4gICAgY29uc3Qgc2hvcnRjdXRZQ2VudGVyID0gc2hvcnRjdXRIZWlnaHQgLyAyO1xuXG4gICAgY29uc3QgZG9jdW1lbnRDbGllbnRIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGRvY3VtZW50Q2xpZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICBpZiAoZXZlbnQuY2xpZW50WCArIHNob3J0Y3V0WENlbnRlciA+PSBkb2N1bWVudENsaWVudFdpZHRoKSB7XG4gICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgIGV2ZW50LnBhZ2VYIC1cbiAgICAgICAgZXZlbnQuY2xpZW50WCArXG4gICAgICAgIGRvY3VtZW50Q2xpZW50V2lkdGggLVxuICAgICAgICBzaG9ydGN1dFdpZHRoICtcbiAgICAgICAgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC0gc2hvcnRjdXRZQ2VudGVyICsgXCJweFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jbGllbnRYIC0gc2hvcnRjdXRYQ2VudGVyIDw9IDApIHtcbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgZXZlbnQucGFnZVggLSBldmVudC5jbGllbnRYICsgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC0gc2hvcnRjdXRZQ2VudGVyICsgXCJweFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jbGllbnRZICsgc2hvcnRjdXRZQ2VudGVyID49IGRvY3VtZW50Q2xpZW50SGVpZ2h0KSB7XG4gICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgIGV2ZW50LnBhZ2VYIC0gc2hvcnRjdXRYQ2VudGVyICsgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC1cbiAgICAgICAgZXZlbnQuY2xpZW50WSArXG4gICAgICAgIGRvY3VtZW50Q2xpZW50SGVpZ2h0IC1cbiAgICAgICAgc2hvcnRjdXRIZWlnaHQgK1xuICAgICAgICBcInB4XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmNsaWVudFkgLSBzaG9ydGN1dFlDZW50ZXIgPD0gMCkge1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgICBldmVudC5wYWdlWCAtIHNob3J0Y3V0WENlbnRlciArIFwicHhcIjtcbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS50b3AgPVxuICAgICAgICBldmVudC5wYWdlWSAtIGV2ZW50LmNsaWVudFkgKyBcInB4XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgZXZlbnQucGFnZVggLSBzaG9ydGN1dFhDZW50ZXIgKyBcInB4XCI7XG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICBldmVudC5wYWdlWSAtIHNob3J0Y3V0WUNlbnRlciArIFwicHhcIjtcbiAgfVxuXG4gIHByaXZhdGUgZG9TY3JvbGwoY2xpZW50WTogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCk7XG4gICAgY29uc3Qgc3RhcnRTY3JvbGxCb3VuZGFyeSA9IDUwO1xuXG4gICAgLy8gbmVlZCB0byBpbXBvcnQgZ2V0U2Nyb2xsYWJsZVBhcmVudCBtZXRob2RcbiAgICAvLyBsZXQgc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQgPSBnZXRTY3JvbGxhYmxlUGFyZW50KGRyb3Bab25lRWxlbWVudClcbiAgICAvLyAgIC5wYXJlbnROb2RlO1xuICAgIGxldCBzY3JvbGxhYmxlUGFyZW50RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcIi5zdmMtdGFiLWRlc2lnbmVyLnNkLXJvb3QtbW9kZXJuXCJcbiAgICApO1xuXG4gICAgbGV0IHRvcCA9IHNjcm9sbGFibGVQYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBsZXQgYm90dG9tID0gc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuICAgIGxldCBsZWZ0ID0gc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICBsZXQgcmlnaHQgPSBzY3JvbGxhYmxlUGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcblxuICAgIGlmIChjbGllbnRZIC0gdG9wIDw9IHN0YXJ0U2Nyb2xsQm91bmRhcnkpIHtcbiAgICAgIHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuc2Nyb2xsVG9wIC09IDU7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIGlmIChib3R0b20gLSBjbGllbnRZIDw9IHN0YXJ0U2Nyb2xsQm91bmRhcnkpIHtcbiAgICAgIHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudEVsZW1lbnQuc2Nyb2xsVG9wICs9IDU7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIGlmIChyaWdodCAtIGNsaWVudFggPD0gc3RhcnRTY3JvbGxCb3VuZGFyeSkge1xuICAgICAgdGhpcy5zY3JvbGxJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBzY3JvbGxhYmxlUGFyZW50RWxlbWVudC5zY3JvbGxMZWZ0ICs9IDU7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIGlmIChjbGllbnRYIC0gbGVmdCA8PSBzdGFydFNjcm9sbEJvdW5kYXJ5KSB7XG4gICAgICB0aGlzLnNjcm9sbEludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnRFbGVtZW50LnNjcm9sbExlZnQgLT0gNTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUl0ZW1WYWx1ZURyYWdPdmVyKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuY3Vyc29yID0gXCJncmFiYmluZ1wiO1xuXG4gICAgY29uc3QgZHJhZ0luZm8gPSB0aGlzLmdldERyYWdJbmZvKGV2ZW50KTtcbiAgICBsZXQgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBkcmFnSW5mby5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudDtcbiAgICBsZXQgaXNFZGdlID0gZHJhZ0luZm8uaXNFZGdlO1xuICAgIGxldCBpc0JvdHRvbSA9IGRyYWdJbmZvLmlzQm90dG9tO1xuXG4gICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuaXRlbVZhbHVlUGFyZW50UXVlc3Rpb24uY2hvaWNlcztcblxuICAgIC8vIHNob3VsZG4ndCBhbGxvdyB0byBkcm9wIG9uIFwiYWRvcm5lcnNcIiAoc2VsZWN0YWxsLCBub25lLCBvdGhlcilcbiAgICBpZiAoY2hvaWNlcy5pbmRleE9mKGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuYmFuRHJvcEhlcmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL2RyYWcgb3ZlciBuZXh0IGl0ZW1cbiAgICBpZiAoXG4gICAgICBjaG9pY2VzLmluZGV4T2YoZHJvcFRhcmdldFN1cnZleUVsZW1lbnQpIC1cbiAgICAgICAgY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpID09PVxuICAgICAgMVxuICAgICkge1xuICAgICAgaXNCb3R0b20gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vZHJhZyBvdmVyIHByZXYgaXRlbVxuICAgIGlmIChcbiAgICAgIGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50KSAtXG4gICAgICAgIGNob2ljZXMuaW5kZXhPZihkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCkgPT09XG4gICAgICAxXG4gICAgKSB7XG4gICAgICBpc0JvdHRvbSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9PT0gdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCkge1xuICAgICAgdGhpcy5iYW5Ecm9wSGVyZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPT09IHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgJiZcbiAgICAgIGlzRWRnZSA9PT0gdGhpcy5pc0VkZ2UgJiZcbiAgICAgIGlzQm90dG9tID09PSB0aGlzLmlzQm90dG9tXG4gICAgKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9IGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50O1xuICAgIHRoaXMuaXNFZGdlID0gaXNFZGdlO1xuICAgIHRoaXMuaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VydmV5RWxlbWVudERyYWdPdmVyKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUuY3Vyc29yID0gXCJncmFiYmluZ1wiO1xuXG4gICAgY29uc3QgZHJhZ0luZm8gPSB0aGlzLmdldERyYWdJbmZvKGV2ZW50KTtcbiAgICBsZXQgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBkcmFnSW5mby5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudDtcbiAgICBsZXQgaXNFZGdlID0gZHJhZ0luZm8uaXNFZGdlO1xuICAgIGxldCBpc0JvdHRvbSA9IGRyYWdJbmZvLmlzQm90dG9tO1xuXG4gICAgaWYgKCFkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCkge1xuICAgICAgdGhpcy5iYW5Ecm9wU3VydmV5RWxlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIERyYWdEcm9wSGVscGVyLnJlc3RyaWN0RHJhZ1F1ZXN0aW9uQmV0d2VlblBhZ2VzICYmXG4gICAgICBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudFtcInBhZ2VcIl0gIT09XG4gICAgICAgICg8YW55PnRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpW1wicGFnZVwiXVxuICAgICkge1xuICAgICAgdGhpcy5iYW5Ecm9wU3VydmV5RWxlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9PT0gdGhpcy5naG9zdFN1cnZleUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9PT0gdGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCAmJlxuICAgICAgaXNFZGdlID09PSB0aGlzLmlzRWRnZSAmJlxuICAgICAgaXNCb3R0b20gPT09IHRoaXMuaXNCb3R0b21cbiAgICApXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLmlzRWRnZSA9IGlzRWRnZTtcbiAgICB0aGlzLmlzQm90dG9tID0gaXNCb3R0b207XG4gICAgdGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9IGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50O1xuICAgIHRoaXMuaW5zZXJ0R2hvc3RFbGVtZW50SW50b1N1cnZleSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREcmFnSW5mbyhldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgbGV0IGRyb3BUYXJnZXRIVE1MRWxlbWVudCA9IHRoaXMuZmluZERyb3BUYXJnZXRIVE1MRWxlbWVudEZyb21Qb2ludChcbiAgICAgIGV2ZW50LmNsaWVudFgsXG4gICAgICBldmVudC5jbGllbnRZXG4gICAgKTtcblxuICAgIGlmICghZHJvcFRhcmdldEhUTUxFbGVtZW50KSB7XG4gICAgICByZXR1cm4geyBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudDogbnVsbCwgaXNFZGdlOiB0cnVlLCBpc0JvdHRvbTogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGxldCBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudCA9IHRoaXMuZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnRGcm9tSFRNTEVsZW1lbnQoXG4gICAgICBkcm9wVGFyZ2V0SFRNTEVsZW1lbnRcbiAgICApO1xuXG4gICAgbGV0IGlzRWRnZSA9IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuaXNJdGVtVmFsdWVCZWluZ0RyYWdnZWQoKSkge1xuICAgICAgaWYgKGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgY29uc3QgcGFuZWxEcmFnSW5mbyA9IHRoaXMuZ2V0UGFuZWxEcmFnSW5mbyhcbiAgICAgICAgICBkcm9wVGFyZ2V0SFRNTEVsZW1lbnQsXG4gICAgICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQsXG4gICAgICAgICAgZXZlbnRcbiAgICAgICAgKTtcbiAgICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBwYW5lbERyYWdJbmZvLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50O1xuICAgICAgICBpc0VkZ2UgPSBwYW5lbERyYWdJbmZvLmlzRWRnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPT09IHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpIHtcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgaXNCb3R0b20gPSB0aGlzLmNhbGN1bGF0ZUlzQm90dG9tKGRyb3BUYXJnZXRIVE1MRWxlbWVudCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAoXG4gICAgICAvLyBUT0RPIHdlIGNhbid0IGRyb3Agb24gbm90IGVtcHR5IHBhZ2UgZGlyZWN0bHkgZm9yIG5vd1xuICAgICAgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgJiZcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LmdldFR5cGUoKSA9PT0gXCJwYWdlXCIgJiZcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LmVsZW1lbnRzLmxlbmd0aCAhPT0gMFxuICAgICkge1xuICAgICAgY29uc3QgZWxlbWVudHMgPSBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudC5lbGVtZW50cztcbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gaXNCb3R0b21cbiAgICAgICAgPyBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXVxuICAgICAgICA6IGVsZW1lbnRzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LCBpc0VkZ2UsIGlzQm90dG9tIH07XG4gIH1cblxuICBwcml2YXRlIGdldFBhbmVsRHJhZ0luZm8oXG4gICAgSFRNTEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIHN1cnZleUVsZW1lbnQ6IElFbGVtZW50LFxuICAgIGV2ZW50OiBQb2ludGVyRXZlbnRcbiAgKSB7XG4gICAgbGV0IGlzRWRnZSA9IHRoaXMuY2FsY3VsYXRlSXNFZGdlKEhUTUxFbGVtZW50LCBldmVudC5jbGllbnRZKTtcbiAgICBsZXQgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQgPSBzdXJ2ZXlFbGVtZW50O1xuXG4gICAgaWYgKCFpc0VkZ2UpIHtcbiAgICAgIEhUTUxFbGVtZW50ID0gdGhpcy5maW5kRGVlcGVzdERyb3BUYXJnZXRDaGlsZChIVE1MRWxlbWVudCk7XG5cbiAgICAgIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gdGhpcy5nZXREcm9wVGFyZ2V0U3VydmV5RWxlbWVudEZyb21IVE1MRWxlbWVudChcbiAgICAgICAgSFRNTEVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZHJvcFRhcmdldFN1cnZleUVsZW1lbnQsIGlzRWRnZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBiYW5Ecm9wSGVyZSA9ICgpID0+IHtcbiAgICB0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICB0aGlzLmlzRWRnZSA9IG51bGw7XG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmN1cnNvciA9IFwibm90LWFsbG93ZWRcIjtcbiAgfTtcblxuICBwcml2YXRlIGJhbkRyb3BTdXJ2ZXlFbGVtZW50ID0gKCkgPT4ge1xuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuICAgIHRoaXMuYmFuRHJvcEhlcmUoKTtcbiAgfTtcblxuICBwcml2YXRlIGdldERyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50TmFtZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGxldCBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudE5hbWUgPSBlbGVtZW50LmRhdGFzZXQuc3ZjRHJvcFRhcmdldEVsZW1lbnROYW1lO1xuICAgIGlmICghZHJvcFRhcmdldFN1cnZleUVsZW1lbnROYW1lKSB7XG4gICAgICBkcm9wVGFyZ2V0U3VydmV5RWxlbWVudE5hbWUgPSBlbGVtZW50LmRhdGFzZXQuc3ZjRHJvcFRhcmdldEl0ZW1WYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50TmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnRGcm9tSFRNTEVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIGxldCBkcm9wVGFyZ2V0TmFtZSA9IHRoaXMuZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnROYW1lKGVsZW1lbnQpO1xuICAgIGxldCBpc0RyYWdPdmVySW5uZXJQYW5lbCA9IGZhbHNlO1xuICAgIGlmICghZHJvcFRhcmdldE5hbWUpIHtcbiAgICAgIGNvbnN0IG5lYXJlc3REcm9wVGFyZ2V0RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0PFxuICAgICAgICBIVE1MRWxlbWVudFxuICAgICAgPih0aGlzLmRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZSk7XG4gICAgICBkcm9wVGFyZ2V0TmFtZSA9IHRoaXMuZ2V0RHJvcFRhcmdldFN1cnZleUVsZW1lbnROYW1lKFxuICAgICAgICBuZWFyZXN0RHJvcFRhcmdldEVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpc0RyYWdPdmVySW5uZXJQYW5lbCA9XG4gICAgICAgIG5lYXJlc3REcm9wVGFyZ2V0RWxlbWVudCAhPT0gZWxlbWVudCAmJiAhIWRyb3BUYXJnZXROYW1lO1xuICAgIH1cbiAgICBpZiAoIWRyb3BUYXJnZXROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGRyb3AgdGFyZ2V0IHN1cnZleSBlbGVtZW50IG5hbWVcIik7XG4gICAgfVxuXG4gICAgaWYgKGRyb3BUYXJnZXROYW1lID09PSBEcmFnRHJvcEhlbHBlci5naG9zdFN1cnZleUVsZW1lbnROYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5naG9zdFN1cnZleUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gZHJvcCB0byBwYWdlXG4gICAgaWYgKGRyb3BUYXJnZXROYW1lID09PSBcIm5ld0dob3N0UGFnZVwiKSB7XG4gICAgICByZXN1bHQgPSBEcmFnRHJvcEhlbHBlci5uZXdHaG9zdFBhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeU5hbWUoZHJvcFRhcmdldE5hbWUpO1xuICAgIH1cblxuICAgIC8vIGRyb3AgdG8gZWxlbWVudCAocXVlc3Rpb24gb3IgcGFuZWwpXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIGxldCBlbGVtZW50O1xuICAgICAgdGhpcy5zdXJ2ZXkucGFnZXMuZm9yRWFjaCgocGFnZTogUGFnZU1vZGVsKSA9PiB7XG4gICAgICAgIGVsZW1lbnQgPSBwYWdlLmdldEVsZW1lbnRCeU5hbWUoZHJvcFRhcmdldE5hbWUpO1xuICAgICAgICBpZiAoZWxlbWVudCkgcmVzdWx0ID0gZWxlbWVudDtcbiAgICAgIH0pO1xuICAgICAgaWYgKFxuICAgICAgICAhIXJlc3VsdCAmJlxuICAgICAgICByZXN1bHQuZ2V0VHlwZSgpID09PSBcInBhbmVsZHluYW1pY1wiICYmXG4gICAgICAgIGlzRHJhZ092ZXJJbm5lclBhbmVsXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcGFnZSA9ICg8YW55PnJlc3VsdCkucGFnZTtcbiAgICAgICAgcmVzdWx0ID0gKDxhbnk+cmVzdWx0KS50ZW1wbGF0ZTtcbiAgICAgICAgcmVzdWx0LnBhZ2UgPSBwYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRyb3AgdG8gaXRlbS12YWx1ZVxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXN1bHQgPSB0aGlzLml0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uLmNob2ljZXMuZmlsdGVyKFxuICAgICAgICAoY2hvaWNlKSA9PiBjaG9pY2UudmFsdWUgPT09IGRyb3BUYXJnZXROYW1lXG4gICAgICApWzBdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pZGRsZU9mSFRNTEVsZW1lbnQoSFRNTEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IEhUTUxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiByZWN0LnkgKyByZWN0LmhlaWdodCAvIDI7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUlzQm90dG9tKEhUTUxFbGVtZW50OiBIVE1MRWxlbWVudCwgY2xpZW50WTogbnVtYmVyKSB7XG4gICAgY29uc3QgbWlkZGxlID0gdGhpcy5jYWxjdWxhdGVNaWRkbGVPZkhUTUxFbGVtZW50KEhUTUxFbGVtZW50KTtcbiAgICByZXR1cm4gY2xpZW50WSA+PSBtaWRkbGU7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUlzRWRnZShIVE1MRWxlbWVudDogSFRNTEVsZW1lbnQsIGNsaWVudFk6IG51bWJlcikge1xuICAgIGNvbnN0IG1pZGRsZSA9IHRoaXMuY2FsY3VsYXRlTWlkZGxlT2ZIVE1MRWxlbWVudChIVE1MRWxlbWVudCk7XG4gICAgcmV0dXJuIE1hdGguYWJzKGNsaWVudFkgLSBtaWRkbGUpID49IERyYWdEcm9wSGVscGVyLmVkZ2VIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGZpbmREcm9wVGFyZ2V0SFRNTEVsZW1lbnQoZHJhZ2dlZE92ZXJOb2RlOiBFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgIGlmICghZHJhZ2dlZE92ZXJOb2RlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5kcm9wVGFyZ2V0RGF0YUF0dHJpYnV0ZU5hbWU7XG4gICAgbGV0IGRyb3BUYXJnZXRIVE1MRWxlbWVudCA9XG4gICAgICBkcmFnZ2VkT3Zlck5vZGUucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oc2VsZWN0b3IpIHx8XG4gICAgICBkcmFnZ2VkT3Zlck5vZGUuY2xvc2VzdDxIVE1MRWxlbWVudD4oc2VsZWN0b3IpO1xuXG4gICAgcmV0dXJuIGRyb3BUYXJnZXRIVE1MRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZERyb3BUYXJnZXRIVE1MRWxlbWVudEZyb21Qb2ludChcbiAgICBjbGllbnRYOiBudW1iZXIsXG4gICAgY2xpZW50WTogbnVtYmVyXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gdHJ1ZTtcbiAgICBsZXQgZHJhZ2dlZE92ZXJOb2RlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5maW5kRHJvcFRhcmdldEhUTUxFbGVtZW50KGRyYWdnZWRPdmVyTm9kZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmREZWVwZXN0RHJvcFRhcmdldENoaWxkKHBhcmVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBcIltkYXRhLXN2Yy1kcm9wLXRhcmdldC1lbGVtZW50LW5hbWVdXCI7XG5cbiAgICBsZXQgcmVzdWx0ID0gcGFyZW50O1xuICAgIHdoaWxlICghIXBhcmVudCkge1xuICAgICAgcmVzdWx0ID0gcGFyZW50O1xuICAgICAgcGFyZW50ID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiA8SFRNTEVsZW1lbnQ+cmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRHaG9zdEVsZW1lbnRJbnRvU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuXG4gICAgdGhpcy5naG9zdFN1cnZleUVsZW1lbnQubmFtZSA9IERyYWdEcm9wSGVscGVyLmdob3N0U3VydmV5RWxlbWVudE5hbWU7IC8vVE9ETyB3aHkgZG8gd2UgbmVlZCBzZXR1cCBpdCBtYW51YWxseSBzZWUgY3JlYXRlR2hvc3RTdXJ2ZXlFbGVtZW50IG1ldGhvZFxuXG4gICAgdGhpcy5wYWdlT3JQYW5lbCA9IHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQuaXNQYWdlXG4gICAgICA/IHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnRcbiAgICAgIDogKDxhbnk+dGhpcy5kcm9wVGFyZ2V0U3VydmV5RWxlbWVudClbXCJwYWdlXCJdO1xuXG4gICAgdGhpcy5wYWdlT3JQYW5lbC5kcmFnRHJvcFN0YXJ0KFxuICAgICAgdGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCxcbiAgICAgIHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50LFxuICAgICAgRHJhZ0Ryb3BIZWxwZXIubmVzdGVkUGFuZWxEZXB0aFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5wYWdlT3JQYW5lbC5kcmFnRHJvcE1vdmVUbyhcbiAgICAgIHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQsXG4gICAgICB0aGlzLmlzQm90dG9tLFxuICAgICAgdGhpcy5pc0VkZ2VcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRSZWFsRWxlbWVudEludG9TdXJ2ZXkoKSB7XG4gICAgdGhpcy5yZW1vdmVHaG9zdEVsZW1lbnRGcm9tU3VydmV5KCk7XG5cbiAgICAvLyBnaG9zdCBuZXcgcGFnZVxuICAgIGlmIChcbiAgICAgIHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQuaXNQYWdlICYmXG4gICAgICAoPGFueT50aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KVtcIl9pc0dob3N0XCJdXG4gICAgKSB7XG4gICAgICAoPGFueT50aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KVtcIl9hZGRHaG9zdFBhZ2VWaWV3TW9iZWxcIl0oKTtcbiAgICB9XG4gICAgLy8gRU8gZ2hvc3QgbmV3IHBhZ2VcblxuICAgIC8vIGZha2UgdGFyZ2V0IGVsZW1lbnQgKG5lZWQgb25seSBmb3IgXCJzdGFydFdpdGhOZXdMaW5lOmZhbHNlXCIgZmVhdHVyZSlcbiAgICAvL1RPRE8gbmVlZCBmb3IgZHJhZ0Ryb3AgaGVscGVyIGluIGxpYnJhcnlcbiAgICBjb25zdCBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy5kcmFnZ2VkU3VydmV5RWxlbWVudCk7XG4gICAganNvbltcInR5cGVcIl0gPSB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50LmdldFR5cGUoKTtcbiAgICBjb25zdCBmYWtlVGFyZ2V0RWxlbWVudCA9IHRoaXMuY3JlYXRlRmFrZVRhcmdldEVsZW1lbnQoXG4gICAgICB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50Lm5hbWUsXG4gICAgICBqc29uXG4gICAgKTtcbiAgICAvLyBFTyBmYWtlIHRhcmdldCBlbGVtZW50XG5cbiAgICB0aGlzLnBhZ2VPclBhbmVsLmRyYWdEcm9wU3RhcnQoXG4gICAgICB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50LFxuICAgICAgZmFrZVRhcmdldEVsZW1lbnQsXG4gICAgICBEcmFnRHJvcEhlbHBlci5uZXN0ZWRQYW5lbERlcHRoXG4gICAgKTtcblxuICAgIHRoaXMucGFnZU9yUGFuZWwuZHJhZ0Ryb3BNb3ZlVG8oXG4gICAgICB0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50LFxuICAgICAgdGhpcy5pc0JvdHRvbSxcbiAgICAgIHRoaXMuaXNFZGdlXG4gICAgKTtcblxuICAgIHRoaXMub25CZWZvcmVEcm9wLmZpcmUodGhpcywgbnVsbCk7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHRoaXMucGFnZU9yUGFuZWwuZHJhZ0Ryb3BGaW5pc2goKTtcbiAgICB0aGlzLm9uQWZ0ZXJEcm9wLmZpcmUodGhpcywgeyBkcmFnZ2VkRWxlbWVudDogbmV3RWxlbWVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpIHtcbiAgICBpZiAoISF0aGlzLnBhZ2VPclBhbmVsKSB0aGlzLnBhZ2VPclBhbmVsLmRyYWdEcm9wRmluaXNoKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbGVtZW50RnJvbUpzb24oanNvbjogb2JqZWN0KSB7XG4gICAgY29uc3QgZWxlbWVudDogYW55ID0gdGhpcy5jcmVhdGVOZXdFbGVtZW50KGpzb24pO1xuICAgIGlmIChlbGVtZW50W1wic2V0U3VydmV5SW1wbFwiXSkge1xuICAgICAgZWxlbWVudFtcInNldFN1cnZleUltcGxcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50W1wic2V0RGF0YVwiXSh0aGlzLnN1cnZleSk7XG4gICAgfVxuICAgIGVsZW1lbnQucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV3RWxlbWVudChqc29uOiBhbnkpOiBJRWxlbWVudCB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKGpzb25bXCJ0eXBlXCJdKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIG5ld0VsZW1lbnQpO1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGYWtlVGFyZ2V0RWxlbWVudChlbGVtZW50TmFtZTogc3RyaW5nLCBqc29uOiBhbnkpOiBhbnkge1xuICAgIGlmICghZWxlbWVudE5hbWUgfHwgIWpzb24pIHJldHVybiBudWxsO1xuICAgIHZhciB0YXJnZXRFbGVtZW50ID0gbnVsbDtcbiAgICB0YXJnZXRFbGVtZW50ID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhqc29uW1widHlwZVwiXSk7XG4gICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0YXJnZXRFbGVtZW50KTtcbiAgICB0YXJnZXRFbGVtZW50Lm5hbWUgPSBlbGVtZW50TmFtZTtcbiAgICBpZiAodGFyZ2V0RWxlbWVudFtcInNldFN1cnZleUltcGxcIl0pIHtcbiAgICAgIHRhcmdldEVsZW1lbnRbXCJzZXRTdXJ2ZXlJbXBsXCJdKHRoaXMuc3VydmV5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0RWxlbWVudFtcInNldERhdGFcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH1cbiAgICB0YXJnZXRFbGVtZW50LnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGRyb3AgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNJdGVtVmFsdWVCZWluZ0RyYWdnZWQoKSkge1xuICAgICAgdGhpcy5kb0Ryb3BJdGVtVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb0Ryb3BTdXJ2ZXlFbGVtZW50KCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXIoKTtcbiAgfTtcblxuICBwcml2YXRlIGRvRHJvcFN1cnZleUVsZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMuZHJvcFRhcmdldFN1cnZleUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW5zZXJ0UmVhbEVsZW1lbnRJbnRvU3VydmV5KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkb0Ryb3BJdGVtVmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgaXNUb3AgPSAhdGhpcy5pc0JvdHRvbTtcbiAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5pdGVtVmFsdWVQYXJlbnRRdWVzdGlvbi5jaG9pY2VzO1xuICAgIGNvbnN0IG9sZEluZGV4ID0gY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZFN1cnZleUVsZW1lbnQpO1xuICAgIGxldCBuZXdJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50KTtcblxuICAgIGlmIChvbGRJbmRleCA8IG5ld0luZGV4ICYmIGlzVG9wKSB7XG4gICAgICBuZXdJbmRleC0tO1xuICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiBuZXdJbmRleCAmJiB0aGlzLmlzQm90dG9tKSB7XG4gICAgICBuZXdJbmRleCsrO1xuICAgIH1cblxuICAgIHRoaXMub25CZWZvcmVEcm9wLmZpcmUodGhpcywgbnVsbCk7XG4gICAgY2hvaWNlcy5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNob2ljZXMuc3BsaWNlKG5ld0luZGV4LCAwLCB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50KTtcbiAgICB0aGlzLm9uQWZ0ZXJEcm9wLmZpcmUodGhpcywge1xuICAgICAgZHJhZ2dlZEVsZW1lbnQ6IHRoaXMuaXRlbVZhbHVlUGFyZW50UXVlc3Rpb24sXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBjbGVhciA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCk7XG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5tb3ZlRHJhZ2dlZEVsZW1lbnQpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuaGFuZGxlRXNjYXBlQnV0dG9uKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLmRyb3ApO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0KTtcblxuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuXG4gICAgY29uc3QgcHJldkV2ZW50ID0gRHJhZ0Ryb3BIZWxwZXIucHJldkV2ZW50O1xuICAgIHByZXZFdmVudC5lbGVtZW50ID0gbnVsbDtcbiAgICBwcmV2RXZlbnQueCA9IC0xO1xuICAgIHByZXZFdmVudC55ID0gLTE7XG5cbiAgICB0aGlzLmRyb3BUYXJnZXRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBudWxsO1xuICAgIHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdnZWRTdXJ2ZXlFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VPclBhbmVsID0gbnVsbDtcbiAgICB0aGlzLml0ZW1WYWx1ZVBhcmVudFF1ZXN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICB0aGlzLmlzRWRnZSA9IG51bGw7XG4gICAgdGhpcy5zY3JvbGxJbnRlcnZhbElkID0gbnVsbDtcbiAgfTtcbn1cbiIsImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbi8qKlxuICogVGhlIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIGFwaS5zdXJ2ZXlqcy5pbyBzZXJ2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgZHhTdXJ2ZXlTZXJ2aWNlIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgc2VydmljZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZXR0aW5ncy5zdXJ2ZXlTZXJ2aWNlVXJsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IHNlcnZpY2VVcmwodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5zdXJ2ZXlTZXJ2aWNlVXJsID0gdmFsO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgcHVibGljIGxvYWRTdXJ2ZXkoXG4gICAgc3VydmV5SWQ6IHN0cmluZyxcbiAgICBvbkxvYWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXG4gICAgICBcIkdFVFwiLFxuICAgICAgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi9nZXRTdXJ2ZXk/c3VydmV5SWQ9XCIgKyBzdXJ2ZXlJZFxuICAgICk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICBvbkxvYWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleUpzb25BbmRJc0NvbXBsZXRlZChcbiAgICBzdXJ2ZXlJZDogc3RyaW5nLFxuICAgIGNsaWVudElkOiBzdHJpbmcsXG4gICAgb25Mb2FkOiAoXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgc3VydmV5SnNvbjogYW55LFxuICAgICAgcmVzdWx0OiBzdHJpbmcsXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcbiAgICAgIFwiR0VUXCIsXG4gICAgICBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArXG4gICAgICAgIFwiL2dldFN1cnZleUFuZElzQ29tcGxldGVkP3N1cnZleUlkPVwiICtcbiAgICAgICAgc3VydmV5SWQgK1xuICAgICAgICBcIiZjbGllbnRJZD1cIiArXG4gICAgICAgIGNsaWVudElkXG4gICAgKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgIHZhciBzdXJ2ZXlKc29uID0gcmVzdWx0ID8gcmVzdWx0LnN1cnZleSA6IG51bGw7XG4gICAgICB2YXIgaXNDb21wbGV0ZWQgPSByZXN1bHQgPyByZXN1bHQuaXNDb21wbGV0ZWQgOiBudWxsO1xuICAgICAgb25Mb2FkKHhoci5zdGF0dXMgPT0gMjAwLCBzdXJ2ZXlKc29uLCBpc0NvbXBsZXRlZCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIHNlbmRSZXN1bHQoXG4gICAgcG9zdElkOiBzdHJpbmcsXG4gICAgcmVzdWx0OiBKU09OLFxuICAgIG9uU2VuZFJlc3VsdDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnksIHJlcXVlc3Q/OiBhbnkpID0+IHZvaWQsXG4gICAgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgaXNQYXJ0aWFsQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vcGVuKFwiUE9TVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL3Bvc3QvXCIpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiKTtcbiAgICB2YXIgZGF0YSA9IHsgcG9zdElkOiBwb3N0SWQsIHN1cnZleVJlc3VsdDogSlNPTi5zdHJpbmdpZnkocmVzdWx0KSB9O1xuICAgIGlmIChjbGllbnRJZCkgKDxhbnk+ZGF0YSlbXCJjbGllbnRJZFwiXSA9IGNsaWVudElkO1xuICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQpICg8YW55PmRhdGEpW1wiaXNQYXJ0aWFsQ29tcGxldGVkXCJdID0gdHJ1ZTtcbiAgICB2YXIgZGF0YVN0cmluZ2lmeTogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHhoci5vbmxvYWQgPSB4aHIub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghb25TZW5kUmVzdWx0KSByZXR1cm47XG4gICAgICBvblNlbmRSZXN1bHQoeGhyLnN0YXR1cyA9PT0gMjAwLCB4aHIucmVzcG9uc2UsIHhocik7XG4gICAgfTtcbiAgICB4aHIuc2VuZChkYXRhU3RyaW5naWZ5KTtcbiAgfVxuICBwdWJsaWMgc2VuZEZpbGUoXG4gICAgcG9zdElkOiBzdHJpbmcsXG4gICAgZmlsZTogRmlsZSxcbiAgICBvblNlbmRGaWxlOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFvblNlbmRGaWxlKSByZXR1cm47XG4gICAgICBvblNlbmRGaWxlKHhoci5zdGF0dXMgPT0gMjAwLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xuICAgIH07XG4gICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvdXBsb2FkL1wiLCB0cnVlKTtcbiAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcInBvc3RJZFwiLCBwb3N0SWQpO1xuICAgIHhoci5zZW5kKGZvcm1EYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVzdWx0KFxuICAgIHJlc3VsdElkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9uR2V0UmVzdWx0OiAoXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgZGF0YUxpc3Q6IEFycmF5PGFueT4sXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgZGF0YSA9IFwicmVzdWx0SWQ9XCIgKyByZXN1bHRJZCArIFwiJm5hbWU9XCIgKyBuYW1lO1xuICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvZ2V0UmVzdWx0P1wiICsgZGF0YSk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICAgIHZhciBsaXN0ID0gbnVsbDtcbiAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xuICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICAgIGxpc3QgPSBbXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJlc3VsdC5RdWVzdGlvblJlc3VsdCkge1xuICAgICAgICAgIHZhciBlbCA9IHsgbmFtZToga2V5LCB2YWx1ZTogcmVzdWx0LlF1ZXN0aW9uUmVzdWx0W2tleV0gfTtcbiAgICAgICAgICBsaXN0LnB1c2goZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvbkdldFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCBsaXN0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgaXNDb21wbGV0ZWQoXG4gICAgcmVzdWx0SWQ6IHN0cmluZyxcbiAgICBjbGllbnRJZDogc3RyaW5nLFxuICAgIG9uSXNDb21wbGV0ZWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIGRhdGEgPSBcInJlc3VsdElkPVwiICsgcmVzdWx0SWQgKyBcIiZjbGllbnRJZD1cIiArIGNsaWVudElkO1xuICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvaXNDb21wbGV0ZWQ/XCIgKyBkYXRhKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIG9uSXNDb21wbGV0ZWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9hcmFiaWNcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9iYXNxdWVcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9idWxnYXJpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9jYXRhbGFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vY3JvYXRpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9jemVjaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2RhbmlzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2R1dGNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZXN0b25pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9maW5uaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZnJlbmNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZ2VvcmdpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9nZXJtYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9ncmVla1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2hlYnJld1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2hpbmRpXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaHVuZ2FyaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaWNlbGFuZGljXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaW5kb25lc2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2l0YWxpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9qYXBhbmVzZVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2themFraFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2tvcmVhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2xhdHZpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9saXRodWFuaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vbWFjZWRvbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL25vcndlZ2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3BlcnNpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb2xpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS1iclwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3JvbWFuaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcnVzc2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3NlcmJpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zcGFuaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vc3dhaGlsaVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3N3ZWRpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90YWppa1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3RoYWlcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90cmFkaXRpb25hbC1jaGluZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vdHVya2lzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3VrcmFpbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi93ZWxzaFwiO1xuIiwiLy8gc3R5bGVzXG5pbXBvcnQgXCIuLi8uLi9tYWluLnNjc3NcIjtcbi8vaW1wb3J0IFwiLi4vLi4vbW9kZXJuLnNjc3NcIjtcblxuZXhwb3J0IHZhciBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9zZXR0aW5nc1wiO1xuZXhwb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnNcIjtcbmV4cG9ydCB7XG4gIEFuc3dlckNvdW50VmFsaWRhdG9yLFxuICBFbWFpbFZhbGlkYXRvcixcbiAgTnVtZXJpY1ZhbGlkYXRvcixcbiAgUmVnZXhWYWxpZGF0b3IsXG4gIFN1cnZleVZhbGlkYXRvcixcbiAgVGV4dFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yUmVzdWx0LFxuICBFeHByZXNzaW9uVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JSdW5uZXIsXG59IGZyb20gXCIuLi8uLi92YWxpZGF0b3JcIjtcbmV4cG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi8uLi9pdGVtdmFsdWVcIjtcbmV4cG9ydCB7IEJhc2UsIEV2ZW50LCBBcnJheUNoYW5nZXMgfSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xuZXhwb3J0IHtcbiAgSVN1cnZleSxcbiAgSVN1cnZleUVsZW1lbnQsXG4gIElFbGVtZW50LFxuICBJUGFnZSxcbiAgSVRpdGxlT3duZXIsXG59IGZyb20gXCIuLi8uLi9iYXNlLWludGVyZmFjZXNcIjtcbmV4cG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4uLy4uL3N1cnZleS1lcnJvclwiO1xuZXhwb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXktZWxlbWVudFwiO1xuZXhwb3J0IHsgQ2FsY3VsYXRlZFZhbHVlIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0ZWRWYWx1ZVwiO1xuZXhwb3J0IHtcbiAgQ3VzdG9tRXJyb3IsXG4gIEFuc3dlclJlcXVpcmVkRXJyb3IsXG4gIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IsXG4gIFJlcXVyZU51bWVyaWNFcnJvcixcbiAgRXhjZWVkU2l6ZUVycm9yLFxufSBmcm9tIFwiLi4vLi4vZXJyb3JcIjtcbmV4cG9ydCB7XG4gIElMb2NhbGl6YWJsZU93bmVyLFxuICBJTG9jYWxpemFibGVTdHJpbmcsXG4gIExvY2FsaXphYmxlU3RyaW5nLFxuICBMb2NhbGl6YWJsZVN0cmluZ3MsXG59IGZyb20gXCIuLi8uLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuZXhwb3J0IHsgSHRtbENvbmRpdGlvbkl0ZW0sIFVybENvbmRpdGlvbkl0ZW0gfSBmcm9tIFwiLi4vLi4vZXhwcmVzc2lvbkl0ZW1zXCI7XG5leHBvcnQgeyBDaG9pY2VzUmVzdGZ1bCwgQ2hvaWNlc1Jlc3RmdWxsIH0gZnJvbSBcIi4uLy4uL2Nob2ljZXNSZXN0ZnVsXCI7XG5leHBvcnQgeyBGdW5jdGlvbkZhY3RvcnksIHJlZ2lzdGVyRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vZnVuY3Rpb25zZmFjdG9yeVwiO1xuZXhwb3J0IHsgQ29uZGl0aW9uUnVubmVyLCBFeHByZXNzaW9uUnVubmVyIH0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvbnNcIjtcbmV4cG9ydCB7XG4gIE9wZXJhbmQsXG4gIENvbnN0LFxuICBCaW5hcnlPcGVyYW5kLFxuICBWYXJpYWJsZSxcbiAgRnVuY3Rpb25PcGVyYW5kLFxuICBBcnJheU9wZXJhbmQsXG59IGZyb20gXCIuLi8uLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuZXhwb3J0IHsgQ29uZGl0aW9uc1BhcnNlciB9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zUGFyc2VyXCI7XG5leHBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5leHBvcnQge1xuICBKc29uRXJyb3IsXG4gIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsXG4gIEpzb25NZXRhZGF0YSxcbiAgSnNvbk1ldGFkYXRhQ2xhc3MsXG4gIEpzb25NaXNzaW5nVHlwZUVycm9yLFxuICBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsXG4gIEpzb25PYmplY3QsXG4gIEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcixcbiAgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yLFxuICBTZXJpYWxpemVyLFxuICBwcm9wZXJ0eSxcbiAgcHJvcGVydHlBcnJheSxcbn0gZnJvbSBcIi4uLy4uL2pzb25vYmplY3RcIjtcbmV4cG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5leHBvcnQge1xuICBNYXRyaXhEcm9wZG93blJvd01vZGVsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xuZXhwb3J0IHtcbiAgTWF0cml4RHluYW1pY1Jvd01vZGVsLFxuICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcbmV4cG9ydCB7XG4gIE1hdHJpeFJvd01vZGVsLFxuICBNYXRyaXhDZWxscyxcbiAgUXVlc3Rpb25NYXRyaXhNb2RlbCxcbiAgSU1hdHJpeERhdGEsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhcIjtcbmV4cG9ydCB7XG4gIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCxcbiAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xuZXhwb3J0IHsgUGFuZWxNb2RlbCwgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi4vLi4vcGFuZWxcIjtcbmV4cG9ydCB7IEZsb3dQYW5lbE1vZGVsIH0gZnJvbSBcIi4uLy4uL2Zsb3dwYW5lbFwiO1xuZXhwb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4uLy4uL3BhZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi8uLi90ZW1wbGF0ZS1yZW5kZXJlclwiO1xuZXhwb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25cIjtcbmV4cG9ydCB7IFF1ZXN0aW9uTm9uVmFsdWUgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25ub252YWx1ZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25FbXB0eU1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2VtcHR5XCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkNoZWNrYm94QmFzZSxcbiAgUXVlc3Rpb25TZWxlY3RCYXNlLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYW5raW5nXCI7XG5leHBvcnQgeyBRdWVzdGlvbkNvbW1lbnRNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jb21tZW50XCI7XG5leHBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5leHBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBRdWVzdGlvbkh0bWxNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYm9vbGVhblwiO1xuZXhwb3J0IHtcbiAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLFxuICBJbWFnZUl0ZW1WYWx1ZSxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2ltYWdlcGlja2VyXCI7XG5leHBvcnQgeyBRdWVzdGlvbkltYWdlTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25faW1hZ2VcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fc2lnbmF0dXJlcGFkXCI7XG5leHBvcnQge1xuICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLFxuICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVRpbWVyIH0gZnJvbSBcIi4uLy4uL3N1cnZleXRpbWVyXCI7XG5leHBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXlQcm9ncmVzc0J1dHRvbnNcIjtcbmV4cG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4uLy4uL3N1cnZleVwiO1xuZXhwb3J0IHtcbiAgU3VydmV5VHJpZ2dlcixcbiAgU3VydmV5VHJpZ2dlckNvbXBsZXRlLFxuICBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUsXG4gIFN1cnZleVRyaWdnZXJWaXNpYmxlLFxuICBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlLFxuICBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbixcbiAgVHJpZ2dlcixcbn0gZnJvbSBcIi4uLy4uL3RyaWdnZXJcIjtcbmV4cG9ydCB7IFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4uLy4uL3N1cnZleVdpbmRvd1wiO1xuZXhwb3J0IHsgVGV4dFByZVByb2Nlc3NvciB9IGZyb20gXCIuLi8uLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5cbmV4cG9ydCB7IGR4U3VydmV5U2VydmljZSB9IGZyb20gXCIuLi8uLi9keFN1cnZleVNlcnZpY2VcIjtcbmV4cG9ydCB7IGVuZ2xpc2hTdHJpbmdzIH0gZnJvbSBcIi4uLy4uL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5leHBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MgfSBmcm9tIFwiLi4vLi4vc3VydmV5U3RyaW5nc1wiO1xuLy8gZXhwb3J0IHsgY3VsdHVyZUluZm8gfSBmcm9tIFwiLi4vLi4vY3VsdHVyZUluZm9cIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LFxuICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkN1c3RvbU1vZGVsLFxuICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLFxuICBDb21wb25lbnRRdWVzdGlvbkpTT04sXG4gIENvbXBvbmVudENvbGxlY3Rpb24sXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jdXN0b21cIjtcblxuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuLi8uLi9zdHlsZXNtYW5hZ2VyXCI7XG5leHBvcnQgeyBMaXN0TW9kZWwgfSBmcm9tIFwiLi4vLi4vbGlzdFwiO1xuZXhwb3J0IHsgUG9wdXBNb2RlbCwgUG9wdXBCYXNlVmlld01vZGVsIH0gZnJvbSBcIi4uLy4uL3BvcHVwXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2J1dHRvbmdyb3VwXCI7XG5leHBvcnQgeyBJc01vYmlsZSB9IGZyb20gXCIuLi8uLi91dGlscy9pcy1tb2JpbGVcIjtcbmV4cG9ydCB7XG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBkb0tleTJDbGljayxcbiAgbG9hZEZpbGVGcm9tQmFzZTY0LFxuICBjcmVhdGVTdmcsXG59IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi4vLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9uRGF0ZU1vZGVsfSBmcm9tIFwiLi4vLi4vcGx1Z2lucy9xdWVzdGlvbl9kYXRlXCI7XG5cbmV4cG9ydCB7IERyYWdEcm9wSGVscGVyIH0gZnJvbSBcIi4uLy4uL2RyYWdkcm9waGVscGVyXCI7XG4iLCIvLyBtb2RlbFxuZXhwb3J0ICogZnJvbSBcIi4vY2h1bmtzL21vZGVsXCI7XG5cbi8vIGxvY2FsaXphdGlvblxuaW1wb3J0IFwiLi9jaHVua3MvbG9jYWxpemF0aW9uXCI7XG5cbi8vIGNzcyBzdGFuZGFyZCBjbGFzc2VzXG5leHBvcnQgeyBkZWZhdWx0U3RhbmRhcmRDc3MgfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuLy8gY3NzIGJvb3RzdHJhcCBjbGFzc2VzXG5leHBvcnQgeyBkZWZhdWx0Qm9vdHN0cmFwQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwXCI7XG4vLyBjc3MgYm9vdHN0cmFwICsgbWF0ZXJpYWwgY2xhc3Nlc1xuZXhwb3J0IHsgZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwbWF0ZXJpYWxcIjtcbi8vIGNzcyBtb2Rlcm4gY2xhc3Nlc1xuZXhwb3J0IHsgbW9kZXJuQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzbW9kZXJuXCI7XG5cbi8vIHV0aWxzXG5leHBvcnQgKiBmcm9tIFwiLi4vcmVuZGVyZXJGYWN0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXJcIjtcbmV4cG9ydCB7IHVud3JhcCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hY3Rpb25zL2NvbnRhaW5lclwiO1xuIiwiaW1wb3J0IHsgVnVlU3VydmV5TW9kZWwgfSBmcm9tIFwiLi4vdnVlL3N1cnZleU1vZGVsXCI7XG5leHBvcnQgeyBWdWVTdXJ2ZXlNb2RlbCBhcyBNb2RlbCB9O1xuaW1wb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwiLi4vdnVlL3N1cnZleU1vZGVsXCI7XG5leHBvcnQgeyBWdWVTdXJ2ZXlXaW5kb3dNb2RlbCBhcyBXaW5kb3dNb2RlbCB9O1xuZXhwb3J0IHsgU3VydmV5IH0gZnJvbSBcIi4uL3Z1ZS9zdXJ2ZXkudnVlXCI7XG5leHBvcnQgeyBDdXN0b21XaWRnZXQgfSBmcm9tIFwiLi4vdnVlL2N1c3RvbXdpZGdldC52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVN0cmluZyB9IGZyb20gXCIuLi92dWUvc3RyaW5nLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5U3RyaW5nVmlld2VyIH0gZnJvbSBcIi4uL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5U3RyaW5nRWRpdG9yIH0gZnJvbSBcIi4uL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5RWxlbWVudFZ1ZSB9IGZyb20gXCIuLi92dWUvZWxlbWVudC52dWVcIjtcbmV4cG9ydCB7IFdpbmRvdyB9IGZyb20gXCIuLi92dWUvd2luZG93LnZ1ZVwiO1xuZXhwb3J0IHsgUGFnZSB9IGZyb20gXCIuLi92dWUvcGFnZS52dWVcIjtcbmV4cG9ydCB7IFJhZGlvZ3JvdXAgfSBmcm9tIFwiLi4vdnVlL3JhZGlvZ3JvdXAudnVlXCI7XG5leHBvcnQgeyBSYWRpb2dyb3VwSXRlbSB9IGZyb20gXCIuLi92dWUvcmFkaW9ncm91cGl0ZW0udnVlXCI7XG5leHBvcnQgeyBPdGhlckNob2ljZSB9IGZyb20gXCIuLi92dWUvb3RoZXJDaG9pY2UudnVlXCI7XG5leHBvcnQgeyBSYXRpbmcgfSBmcm9tIFwiLi4vdnVlL3JhdGluZy52dWVcIjtcbmV4cG9ydCB7IENvbW1lbnQgfSBmcm9tIFwiLi4vdnVlL2NvbW1lbnQudnVlXCI7XG5leHBvcnQgeyBSYW5raW5nIH0gZnJvbSBcIi4uL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlXCI7XG5leHBvcnQgeyBSYW5raW5nSXRlbSB9IGZyb20gXCIuLi92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlXCI7XG5leHBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi92dWUvY2hlY2tib3gudnVlXCI7XG5leHBvcnQgeyBDaGVja2JveEl0ZW0gfSBmcm9tIFwiLi4vdnVlL2NoZWNrYm94aXRlbS52dWVcIjtcbmV4cG9ydCB7IEJ1dHRvbkdyb3VwIH0gZnJvbSBcIi4uL3Z1ZS9idXR0b25ncm91cC52dWVcIjtcbmV4cG9ydCB7IEJ1dHRvbkdyb3VwSXRlbSB9IGZyb20gXCIuLi92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25UZXh0IH0gZnJvbSBcIi4uL3Z1ZS90ZXh0LnZ1ZVwiO1xuZXhwb3J0IHsgQm9vbGVhbiB9IGZyb20gXCIuLi92dWUvYm9vbGVhblwiO1xuZXhwb3J0IHsgQm9vbGVhblN3aXRjaCB9IGZyb20gXCIuLi92dWUvYm9vbGVhbi1zd2l0Y2gudnVlXCI7XG5leHBvcnQgeyBCb29sZWFuQ2hlY2tib3ggfSBmcm9tIFwiLi4vdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlXCI7XG5leHBvcnQgeyBFbXB0eSB9IGZyb20gXCIuLi92dWUvZW1wdHkudnVlXCI7XG5leHBvcnQgeyBNdWx0aXBsZVRleHQgfSBmcm9tIFwiLi4vdnVlL211bHRpcGxldGV4dC52dWVcIjtcbmV4cG9ydCB7IE1hdHJpeCB9IGZyb20gXCIuLi92dWUvbWF0cml4LnZ1ZVwiO1xuZXhwb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi4vdnVlL2Ryb3Bkb3duLnZ1ZVwiO1xuZXhwb3J0IHsgRmlsZSB9IGZyb20gXCIuLi92dWUvZmlsZS52dWVcIjtcbmV4cG9ydCB7IE1hdHJpeENlbGwgfSBmcm9tIFwiLi4vdnVlL21hdHJpeGNlbGwudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhUYWJsZSB9IGZyb20gXCIuLi92dWUvbWF0cml4dGFibGUudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhEcm9wZG93biB9IGZyb20gXCIuLi92dWUvbWF0cml4ZHJvcGRvd24udnVlXCI7XG5leHBvcnQgeyBNYXRyaXhEeW5hbWljIH0gZnJvbSBcIi4uL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZVwiO1xuZXhwb3J0IHsgRXJyb3JzIH0gZnJvbSBcIi4uL3Z1ZS9lcnJvcnMudnVlXCI7XG5leHBvcnQgeyBIdG1sIH0gZnJvbSBcIi4uL3Z1ZS9odG1sLnZ1ZVwiO1xuZXhwb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gXCIuLi92dWUvZXhwcmVzc2lvbi52dWVcIjtcbmV4cG9ydCB7IEltYWdlUGlja2VyIH0gZnJvbSBcIi4uL3Z1ZS9pbWFnZXBpY2tlci52dWVcIjtcbmV4cG9ydCB7IFBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWxEeW5hbWljUmVtb3ZlIH0gZnJvbSBcIi4uL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlXCI7XG5leHBvcnQgeyBQYW5lbER5bmFtaWNQcm9ncmVzcyB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlXCI7XG5leHBvcnQgeyBOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZVwiO1xuZXhwb3J0IHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vdnVlL3Byb2dyZXNzLnZ1ZVwiO1xuZXhwb3J0IHsgUHJvZ3Jlc3NCdXR0b25zIH0gZnJvbSBcIi4uL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlXCI7XG5leHBvcnQgeyBUaW1lclBhbmVsIH0gZnJvbSBcIi4uL3Z1ZS90aW1lcnBhbmVsLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vdnVlL3BhbmVsLnZ1ZVwiO1xuZXhwb3J0IHsgRmxvd1BhbmVsIH0gZnJvbSBcIi4uL3Z1ZS9mbG93cGFuZWwudnVlXCI7XG5leHBvcnQgeyBGbG93UGFuZWxFbGVtZW50IH0gZnJvbSBcIi4uL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZVwiO1xuZXhwb3J0IHsgUm93IH0gZnJvbSBcIi4uL3Z1ZS9yb3cudnVlXCI7XG5leHBvcnQgeyBFbGVtZW50SGVhZGVyIH0gZnJvbSBcIi4uL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25JbWFnZSB9IGZyb20gXCIuLi92dWUvaW1hZ2UudnVlXCI7XG5leHBvcnQgeyBTaWduYXR1cmVQYWQgfSBmcm9tIFwiLi4vdnVlL3NpZ25hdHVyZXBhZC52dWVcIjtcbmV4cG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuLi92dWUvaGVhZGVyLnZ1ZVwiO1xuZXhwb3J0IHsgQ3VzdG9tIH0gZnJvbSBcIi4uL3Z1ZS9jdXN0b20udnVlXCI7XG5leHBvcnQgeyBDb21wb3NpdGUgfSBmcm9tIFwiLi4vdnVlL2NvbXBvc2l0ZS52dWVcIjtcblxuZXhwb3J0IHsgVGl0bGVDb250ZW50IH0gZnJvbSBcIi4uL3Z1ZS90aXRsZWNvbnRlbnQudnVlXCI7XG5leHBvcnQgeyBUaXRsZUFjdGlvbnMgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZVwiO1xuZXhwb3J0IHsgRGVmYXVsdFRpdGxlIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWVcIjtcbmV4cG9ydCB7IEFjdGlvbkJhclZpZXdNb2RlbCB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlXCI7XG5leHBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZVwiO1xuZXhwb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCI7XG5leHBvcnQgeyBMaXN0IH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9jb3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92dWUtdWlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBJU3VydmV5RXJyb3JPd25lciB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgY2xhc3MgQW5zd2VyUmVxdWlyZWRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW9uZWFuc3dlclwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvckluUGFuZWxcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBSZXF1cmVOdW1lcmljRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW51bWVyaWNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEV4Y2VlZFNpemVFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXhTaXplOiBudW1iZXIsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4Y2VlZHNpemVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiZXhjZWVkTWF4U2l6ZVwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuZ2V0VGV4dFNpemUoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUZXh0U2l6ZSgpIHtcbiAgICB2YXIgc2l6ZXMgPSBbXCJCeXRlc1wiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdO1xuICAgIHZhciBmaXhlZCA9IFswLCAwLCAyLCAzLCAzXTtcbiAgICBpZiAodGhpcy5tYXhTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gXCIwIEJ5dGVcIjtcbiAgICB9XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHRoaXMubWF4U2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5tYXhTaXplIC8gTWF0aC5wb3coMTAyNCwgaSk7XG4gICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoZml4ZWRbaV0pICsgXCIgXCIgKyBzaXplc1tpXTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYlJlcXVlc3RFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogc3RyaW5nLFxuICAgIHB1YmxpYyByZXNwb25zZTogc3RyaW5nLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcihudWxsLCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwid2VicmVxdWVzdFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJ1cmxSZXF1ZXN0RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLnN0YXR1cywgdGhpcy5yZXNwb25zZSk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBXZWJSZXF1ZXN0RW1wdHlFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZywgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIndlYnJlcXVlc3RlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXJsR2V0Q2hvaWNlc0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgT3RoZXJFbXB0eUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwib3RoZXJlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJSZXF1aXJlZEVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgVXBsb2FkaW5nRmlsZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidXBsb2FkaW5nZmlsZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXBsb2FkaW5nRmlsZVwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZGluYWxscm93c2Vycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEluQWxsUm93c0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgTWluUm93Q291bnRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1pblJvd0NvdW50OiBudW1iZXIsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtaW5yb3djb3VudGVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pblJvd0NvdW50KTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEtleUR1cGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJrZXlkdXBsaWNhdGlvbmVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkl0ZW0gZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyO1xuICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCB0aGlzKTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhwcmVzc2lvbml0ZW1cIjtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbikucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBleHByZXNzaW9uIHByb3BlcnR5LiBJZiB0aGlzIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGVuIHN1cnZleSB3aWxsIHVzZSBodG1sIHByb3BlcnR5IHRvIHNob3cgb24gY29tcGxldGUgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICB9XG5cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBjb250YWlucyBleHByZXNzaW9uIGFuZCBodG1sIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkuY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gaHRtbCBvZiB0aGlzIGl0ZW0gdXNlcyBpbnN0ZWFkIG9mIHN1cnZleS5jb21wbGV0ZWRIdG1sIHByb3BlcnR5XG4gKiBAc2VlIFN1cnZleU1vZGVsLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICogQHNlZSBTdXJ2ZXlNb2RlbC5jb21wbGV0ZWRIdG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBIdG1sQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgaHRtbDogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKGV4cHJlc3Npb24pO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJodG1sY29uZGl0aW9uaXRlbVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaHRtbCB0aGF0IHNob3dzIG9uIGNvbXBsZXRlZCAoJ1RoYW5rIHlvdScpIHBhZ2UuIFRoZSBleHByZXNzaW9uIHNob3VsZCByZXR1cm4gdHJ1ZVxuICAgKiBAc2VlIGV4cHJlc3Npb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgY29udGFpbnMgZXhwcmVzc2lvbiBhbmQgdXJsIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkubmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gdXJsIG9mIHRoaXMgaXRlbSB1c2VzIGluc3RlYWQgb2Ygc3VydmV5Lm5hdmlnYXRlVG9VcmwgcHJvcGVydHlcbiAqIEBzZWUgU3VydmV5TW9kZWwubmF2aWdhdGVUb1VybFxuICovXG5leHBvcnQgY2xhc3MgVXJsQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgdXJsOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoZXhwcmVzc2lvbik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInVybFwiLCB0aGlzKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInVybGNvbmRpdGlvbml0ZW1cIjtcbiAgfVxuICAvKipcbiAgICogVGhlIHVybCB0aGF0IHN1cnZleSBuYXZpZ2F0ZXMgdG8gb24gY29tcGxldGluZyB0aGUgc3VydmV5LiBUaGUgZXhwcmVzc2lvbiBzaG91bGQgcmV0dXJuIHRydWVcbiAgICogQHNlZSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInVybFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ1cmxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NVcmwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidXJsXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZXhwcmVzc2lvbml0ZW1cIixcbiAgW1wiZXhwcmVzc2lvbjpjb25kaXRpb25cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkl0ZW0oKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaHRtbGNvbmRpdGlvbml0ZW1cIixcbiAgW3sgbmFtZTogXCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sQ29uZGl0aW9uSXRlbSgpO1xuICB9LFxuICBcImV4cHJlc3Npb25pdGVtXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidXJsY29uZGl0aW9uaXRlbVwiLFxuICBbeyBuYW1lOiBcInVybDpzdHJpbmdcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1VybFwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFVybENvbmRpdGlvbkl0ZW0oKTtcbiAgfSxcbiAgXCJleHByZXNzaW9uaXRlbVwiXG4pO1xuIiwiaW1wb3J0IHtcbkNvbnN0LFxuQmluYXJ5T3BlcmFuZCxcblZhcmlhYmxlLFxuT3BlcmFuZCxcblVuYXJ5T3BlcmFuZCxcbkZ1bmN0aW9uT3BlcmFuZCxcbkFycmF5T3BlcmFuZFxufSBmcm9tIFwiLi9leHByZXNzaW9uc1wiO1xuXG4vLyBHZW5lcmF0ZWQgYnkgUEVHLmpzIHYuIDAuMTAuMCAodHMtcGVnanMgcGx1Z2luIHYuIDAuMy4xIClcbi8vXG4vLyBodHRwczovL3BlZ2pzLm9yZy8gICBodHRwczovL2dpdGh1Yi5jb20vbWV0YWRldnByby90cy1wZWdqc1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRmlsZVBvc2l0aW9uIHtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbmU6IG51bWJlcjtcbiAgY29sdW1uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVSYW5nZSB7XG4gIHN0YXJ0OiBJRmlsZVBvc2l0aW9uO1xuICBlbmQ6IElGaWxlUG9zaXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpdGVyYWxFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwibGl0ZXJhbFwiO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGlnbm9yZUNhc2U6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsYXNzUGFydHMgZXh0ZW5kcyBBcnJheTxzdHJpbmcgfCBJQ2xhc3NQYXJ0cz4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xhc3NFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiY2xhc3NcIjtcbiAgcGFydHM6IElDbGFzc1BhcnRzO1xuICBpbnZlcnRlZDogYm9vbGVhbjtcbiAgaWdub3JlQ2FzZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQW55RXhwZWN0YXRpb24ge1xuICB0eXBlOiBcImFueVwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbmRFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiZW5kXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU90aGVyRXhwZWN0YXRpb24ge1xuICB0eXBlOiBcIm90aGVyXCI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEV4cGVjdGF0aW9uID0gSUxpdGVyYWxFeHBlY3RhdGlvbiB8IElDbGFzc0V4cGVjdGF0aW9uIHwgSUFueUV4cGVjdGF0aW9uIHwgSUVuZEV4cGVjdGF0aW9uIHwgSU90aGVyRXhwZWN0YXRpb247XG5cbmV4cG9ydCBjbGFzcyBTeW50YXhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHN0YXRpYyBidWlsZE1lc3NhZ2UoZXhwZWN0ZWQ6IEV4cGVjdGF0aW9uW10sIGZvdW5kOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgZnVuY3Rpb24gaGV4KGNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbEVzY2FwZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHNcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgICAucmVwbGFjZSgvXCIvZywgIFwiXFxcXFxcXCJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcMC9nLCBcIlxcXFwwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgICAgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSApXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgKGNoKSA9PiBcIlxcXFx4XCIgICsgaGV4KGNoKSApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gc1xuICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXF0vZywgXCJcXFxcXVwiKVxuICAgICAgICAucmVwbGFjZSgvXFxeL2csIFwiXFxcXF5cIilcbiAgICAgICAgLnJlcGxhY2UoLy0vZywgIFwiXFxcXC1cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcMC9nLCBcIlxcXFwwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgICAgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSApXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgKGNoKSA9PiBcIlxcXFx4XCIgICsgaGV4KGNoKSApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb246IEV4cGVjdGF0aW9uKSB7XG4gICAgICBzd2l0Y2ggKGV4cGVjdGF0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICAgIGNvbnN0IGVzY2FwZWRQYXJ0cyA9IGV4cGVjdGF0aW9uLnBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydClcbiAgICAgICAgICAgICAgPyBjbGFzc0VzY2FwZShwYXJ0WzBdIGFzIHN0cmluZykgKyBcIi1cIiArIGNsYXNzRXNjYXBlKHBhcnRbMV0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICA6IGNsYXNzRXNjYXBlKHBhcnQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIFwiW1wiICsgKGV4cGVjdGF0aW9uLmludmVydGVkID8gXCJeXCIgOiBcIlwiKSArIGVzY2FwZWRQYXJ0cyArIFwiXVwiO1xuICAgICAgICBjYXNlIFwiYW55XCI6XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgcmV0dXJuIFwiZW5kIG9mIGlucHV0XCI7XG4gICAgICAgIGNhc2UgXCJvdGhlclwiOlxuICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkMTogRXhwZWN0YXRpb25bXSkge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gZXhwZWN0ZWQxLm1hcChkZXNjcmliZUV4cGVjdGF0aW9uKTtcbiAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICBsZXQgajogbnVtYmVyO1xuXG4gICAgICBkZXNjcmlwdGlvbnMuc29ydCgpO1xuXG4gICAgICBpZiAoZGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChpID0gMSwgaiA9IDE7IGkgPCBkZXNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2kgLSAxXSAhPT0gZGVzY3JpcHRpb25zW2ldKSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNbal0gPSBkZXNjcmlwdGlvbnNbaV07XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlc2NyaXB0aW9ucy5sZW5ndGggPSBqO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF0gKyBcIiBvciBcIiArIGRlc2NyaXB0aW9uc1sxXTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgKyBcIiwgb3IgXCJcbiAgICAgICAgICAgICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZvdW5kKGZvdW5kMTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgcmV0dXJuIGZvdW5kMSA/IFwiXFxcIlwiICsgbGl0ZXJhbEVzY2FwZShmb3VuZDEpICsgXCJcXFwiXCIgOiBcImVuZCBvZiBpbnB1dFwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIkV4cGVjdGVkIFwiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyBcIiBidXQgXCIgKyBkZXNjcmliZUZvdW5kKGZvdW5kKSArIFwiIGZvdW5kLlwiO1xuICB9XG5cbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdO1xuICBwdWJsaWMgZm91bmQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBsb2NhdGlvbjogSUZpbGVSYW5nZTtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdLCBmb3VuZDogc3RyaW5nIHwgbnVsbCwgbG9jYXRpb246IElGaWxlUmFuZ2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICAgIHRoaXMuZm91bmQgPSBmb3VuZDtcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgdGhpcy5uYW1lID0gXCJTeW50YXhFcnJvclwiO1xuXG4gICAgaWYgKHR5cGVvZiAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBTeW50YXhFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhY2hlZCB7XG4gIG5leHRQb3M6IG51bWJlcjtcbiAgcmVzdWx0OiBhbnk7XG59XG5cbmZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHt9O1xuXG4gIGNvbnN0IHBlZyRGQUlMRUQ6IFJlYWRvbmx5PGFueT4gPSB7fTtcblxuICBjb25zdCBwZWckc3RhcnRSdWxlRnVuY3Rpb25zOiB7W2lkOiBzdHJpbmddOiBhbnl9ID0geyBFeHByZXNzaW9uOiBwZWckcGFyc2VFeHByZXNzaW9uIH07XG4gIGxldCBwZWckc3RhcnRSdWxlRnVuY3Rpb246ICgpID0+IGFueSA9IHBlZyRwYXJzZUV4cHJlc3Npb247XG5cbiAgY29uc3QgcGVnJGMwID0gZnVuY3Rpb24oaGVhZDogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgICAgcmV0dXJuIGJ1aWxkQmluYXJ5T3BlcmFuZChoZWFkLCB0YWlsLCB0cnVlKTtcbiAgICB9O1xuICBjb25zdCBwZWckYzEgPSBcInx8XCI7XG4gIGNvbnN0IHBlZyRjMiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ8fFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMyA9IFwib3JcIjtcbiAgY29uc3QgcGVnJGM0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm9yXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzUgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJvclwiOyB9O1xuICBjb25zdCBwZWckYzYgPSBcIiYmXCI7XG4gIGNvbnN0IHBlZyRjNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCImJlwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjOCA9IFwiYW5kXCI7XG4gIGNvbnN0IHBlZyRjOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJhbmRcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJhbmRcIjsgfTtcbiAgY29uc3QgcGVnJGMxMSA9IGZ1bmN0aW9uKGhlYWQ6IGFueSwgdGFpbDogYW55KTogYW55IHtcbiAgICAgIHJldHVybiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZCwgdGFpbCk7XG4gICAgfTtcbiAgY29uc3QgcGVnJGMxMiA9IFwiPD1cIjtcbiAgY29uc3QgcGVnJGMxMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI8PVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTQgPSBcImxlc3NvcmVxdWFsXCI7XG4gIGNvbnN0IHBlZyRjMTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc29yZXF1YWxcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJsZXNzb3JlcXVhbFwiOyB9O1xuICBjb25zdCBwZWckYzE3ID0gXCI+PVwiO1xuICBjb25zdCBwZWckYzE4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj49XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxOSA9IFwiZ3JlYXRlcm9yZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJncmVhdGVyb3JlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyMSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJvcmVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjIgPSBcIj1cIjtcbiAgY29uc3QgcGVnJGMyMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMyNCA9IFwiZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjcgPSBcIiE9XCI7XG4gIGNvbnN0IHBlZyRjMjggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiIT1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzI5ID0gXCJub3RlcXVhbFwiO1xuICBjb25zdCBwZWckYzMwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVxdWFsXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzMxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZXF1YWxcIjsgfTtcbiAgY29uc3QgcGVnJGMzMiA9IFwiPFwiO1xuICBjb25zdCBwZWckYzMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjxcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM0ID0gXCJsZXNzXCI7XG4gIGNvbnN0IHBlZyRjMzUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMzNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImxlc3NcIjsgfTtcbiAgY29uc3QgcGVnJGMzNyA9IFwiPlwiO1xuICBjb25zdCBwZWckYzM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM5ID0gXCJncmVhdGVyXCI7XG4gIGNvbnN0IHBlZyRjNDAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZ3JlYXRlclwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM0MSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM0MiA9IFwiK1wiO1xuICBjb25zdCBwZWckYzQzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIitcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ0ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicGx1c1wiOyAgfTtcbiAgY29uc3QgcGVnJGM0NSA9IFwiLVwiO1xuICBjb25zdCBwZWckYzQ2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibWludXNcIjsgfTtcbiAgY29uc3QgcGVnJGM0OCA9IFwiKlwiO1xuICBjb25zdCBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIipcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibXVsXCI7IH07XG4gIGNvbnN0IHBlZyRjNTEgPSBcIi9cIjtcbiAgY29uc3QgcGVnJGM1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIvXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImRpdlwiOyB9O1xuICBjb25zdCBwZWckYzU0ID0gXCIlXCI7XG4gIGNvbnN0IHBlZyRjNTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJtb2RcIjsgfTtcbiAgY29uc3QgcGVnJGM1NyA9IFwiXlwiO1xuICBjb25zdCBwZWckYzU4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIl5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzU5ID0gXCJwb3dlclwiO1xuICBjb25zdCBwZWckYzYwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInBvd2VyXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzYxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicG93ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM2MiA9IFwiKj1cIjtcbiAgY29uc3QgcGVnJGM2MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIqPVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNjQgPSBcImNvbnRhaW5zXCI7XG4gIGNvbnN0IHBlZyRjNjUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29udGFpbnNcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNjYgPSBcImNvbnRhaW5cIjtcbiAgY29uc3QgcGVnJGM2NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJjb250YWluXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzY4ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiY29udGFpbnNcIjsgfTtcbiAgY29uc3QgcGVnJGM2OSA9IFwibm90Y29udGFpbnNcIjtcbiAgY29uc3QgcGVnJGM3MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3Rjb250YWluc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM3MSA9IFwibm90Y29udGFpblwiO1xuICBjb25zdCBwZWckYzcyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGNvbnRhaW5cIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNzMgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJub3Rjb250YWluc1wiOyB9O1xuICBjb25zdCBwZWckYzc0ID0gXCJhbnlvZlwiO1xuICBjb25zdCBwZWckYzc1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFueW9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc2ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbnlvZlwiOyB9O1xuICBjb25zdCBwZWckYzc3ID0gXCJhbGxvZlwiO1xuICBjb25zdCBwZWckYzc4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFsbG9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc5ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbGxvZlwiOyB9O1xuICBjb25zdCBwZWckYzgwID0gXCIoXCI7XG4gIGNvbnN0IHBlZyRjODEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiKFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjODIgPSBcIilcIjtcbiAgY29uc3QgcGVnJGM4MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIpXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4NCA9IGZ1bmN0aW9uKGV4cHI6IGFueSk6IGFueSB7IHJldHVybiBleHByOyB9O1xuICBjb25zdCBwZWckYzg1ID0gZnVuY3Rpb24obmFtZTogYW55LCBwYXJhbXM6IGFueSk6IGFueSB7IHJldHVybiBuZXcgRnVuY3Rpb25PcGVyYW5kKG5hbWUsIHBhcmFtcyk7IH07XG4gIGNvbnN0IHBlZyRjODYgPSBcIiFcIjtcbiAgY29uc3QgcGVnJGM4NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIhXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4OCA9IFwibmVnYXRlXCI7XG4gIGNvbnN0IHBlZyRjODkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibmVnYXRlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzkwID0gZnVuY3Rpb24oZXhwcjogYW55KTogYW55IHsgcmV0dXJuIG5ldyBVbmFyeU9wZXJhbmQoZXhwciwgXCJuZWdhdGVcIik7IH07XG4gIGNvbnN0IHBlZyRjOTEgPSBmdW5jdGlvbihleHByOiBhbnksIG9wOiBhbnkpOiBhbnkgeyByZXR1cm4gbmV3IFVuYXJ5T3BlcmFuZChleHByLCBvcCk7IH07XG4gIGNvbnN0IHBlZyRjOTIgPSBcImVtcHR5XCI7XG4gIGNvbnN0IHBlZyRjOTMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZW1wdHlcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjOTQgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJlbXB0eVwiOyB9O1xuICBjb25zdCBwZWckYzk1ID0gXCJub3RlbXB0eVwiO1xuICBjb25zdCBwZWckYzk2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVtcHR5XCIsIHRydWUpO1xuICBjb25zdCBwZWckYzk3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZW1wdHlcIjsgfTtcbiAgY29uc3QgcGVnJGM5OCA9IFwidW5kZWZpbmVkXCI7XG4gIGNvbnN0IHBlZyRjOTkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwidW5kZWZpbmVkXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDAgPSBcIm51bGxcIjtcbiAgY29uc3QgcGVnJGMxMDEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibnVsbFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTAyID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIG51bGw7IH07XG4gIGNvbnN0IHBlZyRjMTAzID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgQ29uc3QodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwNCA9IFwie1wiO1xuICBjb25zdCBwZWckYzEwNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDYgPSBcIn1cIjtcbiAgY29uc3QgcGVnJGMxMDcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwifVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTA4ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgVmFyaWFibGUodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwOSA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBhbnkgeyByZXR1cm4gdmFsdWU7IH07XG4gIGNvbnN0IHBlZyRjMTEwID0gXCInJ1wiO1xuICBjb25zdCBwZWckYzExMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCInJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTEyID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJcIjsgfTtcbiAgY29uc3QgcGVnJGMxMTMgPSBcIlxcXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcXFwiXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMTUgPSBcIidcIjtcbiAgY29uc3QgcGVnJGMxMTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTE3ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBcIidcIiArIHZhbHVlICsgXCInXCI7IH07XG4gIGNvbnN0IHBlZyRjMTE4ID0gXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEyMCA9IFwiW1wiO1xuICBjb25zdCBwZWckYzEyMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJbXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMjIgPSBcIl1cIjtcbiAgY29uc3QgcGVnJGMxMjMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI0ID0gZnVuY3Rpb24oc2VxdWVuY2U6IGFueSk6IGFueSB7IHJldHVybiBzZXF1ZW5jZTsgfTtcbiAgY29uc3QgcGVnJGMxMjUgPSBcIixcIjtcbiAgY29uc3QgcGVnJGMxMjYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI3ID0gZnVuY3Rpb24oZXhwcjogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKGV4cHIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheU9wZXJhbmQoW10pO1xuXG4gICAgICB2YXIgYXJyYXkgPSBbZXhwcl07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWlsKSkge1xuICAgICAgICB2YXIgZmxhdHRlbiA9IGZsYXR0ZW5BcnJheSh0YWlsKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBmbGF0dGVuLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgYXJyYXkucHVzaChmbGF0dGVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEFycmF5T3BlcmFuZChhcnJheSk7XG4gICAgfTtcbiAgY29uc3QgcGVnJGMxMjggPSBcInRydWVcIjtcbiAgY29uc3QgcGVnJGMxMjkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwidHJ1ZVwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMxMzAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgY29uc3QgcGVnJGMxMzEgPSBcImZhbHNlXCI7XG4gIGNvbnN0IHBlZyRjMTMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImZhbHNlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzEzMyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBmYWxzZTsgfTtcbiAgY29uc3QgcGVnJGMxMzQgPSBcIjB4XCI7XG4gIGNvbnN0IHBlZyRjMTM1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjB4XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMzYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gcGFyc2VJbnQodGV4dCgpLCAxNik7IH07XG4gIGNvbnN0IHBlZyRjMTM3ID0gL15bXFwtXS87XG4gIGNvbnN0IHBlZyRjMTM4ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiLVwiXSwgZmFsc2UsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMzkgPSBmdW5jdGlvbihzaWduOiBhbnksIG51bTogYW55KTogYW55IHsgcmV0dXJuIHNpZ24gPT0gbnVsbCA/IG51bSA6IC1udW07IH07XG4gIGNvbnN0IHBlZyRjMTQwID0gXCIuXCI7XG4gIGNvbnN0IHBlZyRjMTQxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE0MiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBwYXJzZUZsb2F0KHRleHQoKSk7IH07XG4gIGNvbnN0IHBlZyRjMTQzID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIHBhcnNlSW50KHRleHQoKSwgMTApOyB9O1xuICBjb25zdCBwZWckYzE0NCA9IFwiMFwiO1xuICBjb25zdCBwZWckYzE0NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIwXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNDYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gMDsgfTtcbiAgY29uc3QgcGVnJGMxNDcgPSBmdW5jdGlvbihjaGFyczogYW55KTogYW55IHsgcmV0dXJuIGNoYXJzLmpvaW4oXCJcIik7IH07XG4gIGNvbnN0IHBlZyRjMTQ4ID0gXCJcXFxcJ1wiO1xuICBjb25zdCBwZWckYzE0OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiJ1wiOyB9O1xuICBjb25zdCBwZWckYzE1MSA9IFwiXFxcXFxcXCJcIjtcbiAgY29uc3QgcGVnJGMxNTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXFxcXFxcXCJcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcIlxcXCJcIjsgfTtcbiAgY29uc3QgcGVnJGMxNTQgPSAvXlteXCInXS87XG4gIGNvbnN0IHBlZyRjMTU1ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiXFxcIlwiLCBcIidcIl0sIHRydWUsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gdGV4dCgpOyB9O1xuICBjb25zdCBwZWckYzE1NyA9IC9eW157fV0vO1xuICBjb25zdCBwZWckYzE1OCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIntcIiwgXCJ9XCJdLCB0cnVlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTU5ID0gL15bMC05XS87XG4gIGNvbnN0IHBlZyRjMTYwID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIjBcIiwgXCI5XCJdXSwgZmFsc2UsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNjEgPSAvXlsxLTldLztcbiAgY29uc3QgcGVnJGMxNjIgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMVwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE2MyA9IC9eW2EtekEtWl0vO1xuICBjb25zdCBwZWckYzE2NCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE2NSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwid2hpdGVzcGFjZVwiKTtcbiAgY29uc3QgcGVnJGMxNjYgPSAvXlsgXFx0XFxuXFxyXS87XG4gIGNvbnN0IHBlZyRjMTY3ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKTtcblxuICBsZXQgcGVnJGN1cnJQb3MgPSAwO1xuICBsZXQgcGVnJHNhdmVkUG9zID0gMDtcbiAgY29uc3QgcGVnJHBvc0RldGFpbHNDYWNoZSA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XTtcbiAgbGV0IHBlZyRtYXhGYWlsUG9zID0gMDtcbiAgbGV0IHBlZyRtYXhGYWlsRXhwZWN0ZWQ6IEV4cGVjdGF0aW9uW10gPSBbXTtcbiAgbGV0IHBlZyRzaWxlbnRGYWlscyA9IDA7XG5cbiAgY29uc3QgcGVnJHJlc3VsdHNDYWNoZToge1tpZDogbnVtYmVyXTogSUNhY2hlZH0gPSB7fTtcblxuICBsZXQgcGVnJHJlc3VsdDtcblxuICBpZiAob3B0aW9ucy5zdGFydFJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBzdGFydCBwYXJzaW5nIGZyb20gcnVsZSBcXFwiXCIgKyBvcHRpb25zLnN0YXJ0UnVsZSArIFwiXFxcIi5cIik7XG4gICAgfVxuXG4gICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2F0aW9uKCk6IElGaWxlUmFuZ2Uge1xuICAgIHJldHVybiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0ZWQoZGVzY3JpcHRpb246IHN0cmluZywgbG9jYXRpb24xPzogSUZpbGVSYW5nZSkge1xuICAgIGxvY2F0aW9uMSA9IGxvY2F0aW9uMSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGxvY2F0aW9uMVxuICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sXG4gICAgICBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyksXG4gICAgICBsb2NhdGlvbjFcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZTogc3RyaW5nLCBsb2NhdGlvbjE/OiBJRmlsZVJhbmdlKSB7XG4gICAgbG9jYXRpb24xID0gbG9jYXRpb24xICE9PSB1bmRlZmluZWRcbiAgICAgID8gbG9jYXRpb24xXG4gICAgICA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG5cbiAgICB0aHJvdyBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbih0ZXh0MTogc3RyaW5nLCBpZ25vcmVDYXNlOiBib29sZWFuKTogSUxpdGVyYWxFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHRleHQ6IHRleHQxLCBpZ25vcmVDYXNlOiBpZ25vcmVDYXNlIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckY2xhc3NFeHBlY3RhdGlvbihwYXJ0czogSUNsYXNzUGFydHMsIGludmVydGVkOiBib29sZWFuLCBpZ25vcmVDYXNlOiBib29sZWFuKTogSUNsYXNzRXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiY2xhc3NcIiwgcGFydHM6IHBhcnRzLCBpbnZlcnRlZDogaW52ZXJ0ZWQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpOiBJQW55RXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiYW55XCIgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRlbmRFeHBlY3RhdGlvbigpOiBJRW5kRXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiZW5kXCIgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBJT3RoZXJFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJvdGhlclwiLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjb21wdXRlUG9zRGV0YWlscyhwb3M6IG51bWJlcikge1xuICAgIGxldCBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdO1xuICAgIGxldCBwO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gcG9zIC0gMTtcbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogZGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IGRldGFpbHMuY29sdW1uXG4gICAgICB9O1xuXG4gICAgICB3aGlsZSAocCA8IHBvcykge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwKSA9PT0gMTApIHtcbiAgICAgICAgICBkZXRhaWxzLmxpbmUrKztcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbiA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGV0YWlscy5jb2x1bW4rKztcbiAgICAgICAgfVxuXG4gICAgICAgIHArKztcbiAgICAgIH1cblxuICAgICAgcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdID0gZGV0YWlscztcblxuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvczogbnVtYmVyLCBlbmRQb3M6IG51bWJlcik6IElGaWxlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0UG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhzdGFydFBvcyk7XG4gICAgY29uc3QgZW5kUG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6IHN0YXJ0UG9zRGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IHN0YXJ0UG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgb2Zmc2V0OiBlbmRQb3MsXG4gICAgICAgIGxpbmU6IGVuZFBvc0RldGFpbHMubGluZSxcbiAgICAgICAgY29sdW1uOiBlbmRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZmFpbChleHBlY3RlZDE6IEV4cGVjdGF0aW9uKSB7XG4gICAgaWYgKHBlZyRjdXJyUG9zIDwgcGVnJG1heEZhaWxQb3MpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAocGVnJGN1cnJQb3MgPiBwZWckbWF4RmFpbFBvcykge1xuICAgICAgcGVnJG1heEZhaWxQb3MgPSBwZWckY3VyclBvcztcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgPSBbXTtcbiAgICB9XG5cbiAgICBwZWckbWF4RmFpbEV4cGVjdGVkLnB1c2goZXhwZWN0ZWQxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFNpbXBsZUVycm9yKG1lc3NhZ2U6IHN0cmluZywgbG9jYXRpb24xOiBJRmlsZVJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihtZXNzYWdlLCBbXSwgXCJcIiwgbG9jYXRpb24xKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZDE6IEV4cGVjdGF0aW9uW10sIGZvdW5kOiBzdHJpbmcgfCBudWxsLCBsb2NhdGlvbjE6IElGaWxlUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFxuICAgICAgU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlKGV4cGVjdGVkMSwgZm91bmQpLFxuICAgICAgZXhwZWN0ZWQxLFxuICAgICAgZm91bmQsXG4gICAgICBsb2NhdGlvbjFcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRXhwcmVzc2lvbigpOiBPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzODtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAwO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZUxvZ2ljT3IoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IFtdO1xuICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VPclNpZ24oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlTG9naWNPcigpO1xuICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczYsIHM3LCBzOF07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VPclNpZ24oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VMb2dpY09yKCk7XG4gICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczYsIHM3LCBzOF07XG4gICAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzAoczIsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlT3JTaWduKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMSkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNCk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM1KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMb2dpY09yKCk6IEJpbmFyeU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTG9naWNBbmQoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VBbmRTaWduKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQW5kU2lnbigpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFuZFNpZ24oKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGM2KSB7XG4gICAgICBzMSA9IHBlZyRjNjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOCkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMyk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzEwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMb2dpY0FuZCgpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VDb21wT3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzExKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tcGFyYWJsZU9wZXJhdG9ycygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzEyKSB7XG4gICAgICBzMSA9IHBlZyRjMTI7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMTQpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDExKTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNSk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxNigpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzE3KSB7XG4gICAgICAgIHMxID0gcGVnJGMxNztcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzE5KSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE0KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSAxNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMyMSgpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYxKSB7XG4gICAgICAgICAgczEgPSBwZWckYzIyO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI0KSB7XG4gICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjUpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyNigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMjcpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMyNztcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyOCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI5KSB7XG4gICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzMwKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzMxKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2MCkge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMzI7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzMyk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzM0KSB7XG4gICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzNSk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMzYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2Mikge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzNztcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMzOSkge1xuICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQwKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDEoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbXBPcHMoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA2O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VQbHVzTWludXNTaWducygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlUGx1c01pbnVzT3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VQbHVzTWludXNTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQbHVzTWludXNTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDMpIHtcbiAgICAgIHMxID0gcGVnJGM0MjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM0NCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDUpIHtcbiAgICAgICAgczEgPSBwZWckYzQ1O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM0NygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQbHVzTWludXNPcHMoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VNdWxEaXZTaWducygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTXVsRGl2T3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VNdWxEaXZTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNdWxEaXZTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgOTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDIpIHtcbiAgICAgIHMxID0gcGVnJGM0ODtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM1MCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDcpIHtcbiAgICAgICAgczEgPSBwZWckYzUxO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM1MygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM3KSB7XG4gICAgICAgICAgczEgPSBwZWckYzU0O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNTYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU11bERpdk9wcygpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEwO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VQb3dlclNpZ25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZVBvd2VyU2lnbnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCk7XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMwKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUG93ZXJTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDk0KSB7XG4gICAgICBzMSA9IHBlZyRjNTc7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM1OSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2MCk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM2MSgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlRmFjdG9yKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHM1ID0gcGVnJHBhcnNlQmluRnVuY3Rpb25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRmFjdG9yKCk7XG4gICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTEoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEzO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNjIpIHtcbiAgICAgIHMxID0gcGVnJGM2MjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzY0KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY1KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNjYpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjgoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2OSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcwKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDEwKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzcxKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDEwKTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcyKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM3MygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzc0KSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNzYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzcpIHtcbiAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3OCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM3OSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRmFjdG9yKCk6IE9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE0O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDEpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckYzgyO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODQoczMpO1xuICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJHBhcnNlRnVuY3Rpb25PcCgpO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJHBhcnNlVW5hcnlGdW5jdGlvbk9wKCk7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJHBhcnNlQXRvbSgpO1xuICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckcGFyc2VBcnJheU9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRnVuY3Rpb25PcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQ7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTU7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnNBbmREaWdpdHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDApIHtcbiAgICAgICAgczIgPSBwZWckYzgwO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VTZXF1ZW5jZSgpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjODI7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzg1KHMxLCBzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVVuYXJ5RnVuY3Rpb25PcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzMpIHtcbiAgICAgIHMxID0gcGVnJGM4NjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Nyk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzg4KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg5KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjOTAoczMpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VBdG9tKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlVW5GdW5jdGlvbnMoKTtcbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzkxKHMxLCBzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVVuRnVuY3Rpb25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTIpIHtcbiAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM5NCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTUpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM5NygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBdG9tKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxODtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOSkgPT09IHBlZyRjOTgpIHtcbiAgICAgICAgczIgPSBwZWckYzk4O1xuICAgICAgICBwZWckY3VyclBvcyArPSA5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTkpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjMTAwKSB7XG4gICAgICAgICAgczIgPSBwZWckYzEwMDtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTAxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDIoKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VDb25zdFZhbHVlKCk7XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMDMoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgIHMyID0gcGVnJGMxMDQ7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA1KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlVmFsdWVJbnB1dCgpO1xuICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckYzEwNjtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA3KTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMDgoczMpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VDb25zdFZhbHVlKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMb2dpY1ZhbHVlKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxMDkoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJHBhcnNlQXJpdGhtZXRpY1ZhbHVlKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDkoczEpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnNBbmREaWdpdHMoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEwOShzMSk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxMTApIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMTA7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTExKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzExMigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzExMykge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE0KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTEyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE1O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTYpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VBbnlJbnB1dCgpO1xuICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzOSkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRjMTE1O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE2KTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE3KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE4O1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOSk7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUlucHV0KCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMTg7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOSk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE3KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQXJyYXlPcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyMDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTEpIHtcbiAgICAgIHMxID0gcGVnJGMxMjA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlU2VxdWVuY2UoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkzKSB7XG4gICAgICAgICAgczMgPSBwZWckYzEyMjtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIzKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMjQoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTZXF1ZW5jZSgpOiBBcnJheU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRjMTI1O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjYpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRjMTI1O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzEyNyhzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljVmFsdWUoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMjgpIHtcbiAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTMwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMzEpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTMzKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFyaXRobWV0aWNWYWx1ZSgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIzO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTM0KSB7XG4gICAgICBzMSA9IHBlZyRjMTM0O1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzNSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTM2KCk7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChwZWckYzEzNy50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzOCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VOdW1iZXIoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEzOShzMSwgczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VOdW1iZXIoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczM7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nikge1xuICAgICAgICBzMiA9IHBlZyRjMTQwO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxNDIoKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJHBhcnNlTm9uWmVyb0RpZ2l0cygpO1xuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTQzKCk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDgpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTQ0O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDUpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzE0NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVmFsdWVJbnB1dCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI1O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQ3KHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFueUlucHV0KCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczI7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjY7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IFtdO1xuICAgIHMyID0gcGVnJHBhcnNlQW55Q2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUNoYXJhY3RlcnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzE0NyhzMSk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzE0OCkge1xuICAgICAgczEgPSBwZWckYzE0ODtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTUwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTUxKSB7XG4gICAgICAgIHMxID0gcGVnJGMxNTE7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxNTMoKTtcbiAgICAgIH1cbiAgICAgIHMwID0gczE7XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKHBlZyRjMTU0LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTU2KCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYWx1ZUNoYXJhY3RlcnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKHBlZyRjMTU3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTgpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTU2KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzQW5kRGlnaXRzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBbXTtcbiAgICAgICAgczYgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW3M0LCBzNV07XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IFtzNCwgczVdO1xuICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzE1NigpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZURpZ2l0cygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNTkudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2MCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE1OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU5vblplcm9EaWdpdHMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDMxO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTYxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjIpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYyKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE2My50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY0KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgaWYgKHBlZyRjMTYzLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2NCk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlXygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2Nyk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzE2Ni50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2Nyk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY1KTsgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZDogT3BlcmFuZCwgdGFpbDogQXJyYXk8YW55PiwgaXNBcml0aG1ldGljT3A6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRhaWwucmVkdWNlKFxuICAgICAgICBmdW5jdGlvbihyZXN1bHQsIGVsZW1lbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlPcGVyYW5kKGVsZW1lbnRzWzFdLCByZXN1bHQsIGVsZW1lbnRzWzNdLCBpc0FyaXRobWV0aWNPcCk7XG4gICAgICAgIH0sIFxuICAgICAgICBoZWFkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbGF0dGVuQXJyYXkoYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGFycmF5KTtcbiAgICB9XG5cblxuICBwZWckcmVzdWx0ID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uKCk7XG5cbiAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiBwZWckcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICBwZWckZmFpbChwZWckZW5kRXhwZWN0YXRpb24oKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCxcbiAgICAgIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gaW5wdXQuY2hhckF0KHBlZyRtYXhGYWlsUG9zKSA6IG51bGwsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aFxuICAgICAgICA/IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJG1heEZhaWxQb3MsIHBlZyRtYXhGYWlsUG9zICsgMSlcbiAgICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcylcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnNlT3B0aW9ucyB7XG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICBzdGFydFJ1bGU/OiBzdHJpbmc7XG4gIHRyYWNlcj86IGFueTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHR5cGUgUGFyc2VGdW5jdGlvbiA9IChpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykgPT4gYW55O1xuZXhwb3J0IGNvbnN0IHBhcnNlOiBQYXJzZUZ1bmN0aW9uID0gcGVnJHBhcnNlO1xuXG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgRnVuY3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4uL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSBcImFzc2VydFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT3BlcmFuZCB7XG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIGFic3RyYWN0IGdldFR5cGUoKTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55O1xuICBwdWJsaWMgYWJzdHJhY3Qgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPik6IGFueTtcbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pOiB2b2lkIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlPcGVyYW5kIGV4dGVuZHMgT3BlcmFuZCB7XG4gIHByaXZhdGUgY29uc3VtZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGlzQXJpdGhtZXRpY1ZhbHVlOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wZXJhdG9yTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgbGVmdDogYW55ID0gbnVsbCxcbiAgICBwcml2YXRlIHJpZ2h0OiBhbnkgPSBudWxsLFxuICAgIGlzQXJpdGhtZXRpY09wOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzQXJpdGhtZXRpY1ZhbHVlID0gaXNBcml0aG1ldGljT3A7XG4gICAgaWYgKGlzQXJpdGhtZXRpY09wKSB7XG4gICAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tcImFyaXRobWV0aWNPcFwiXShcbiAgICAgICAgb3BlcmF0b3JOYW1lXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tvcGVyYXRvck5hbWVdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnN1bWVyID09IG51bGwpIHtcbiAgICAgIE9wZXJhbmRNYWtlci50aHJvd0ludmFsaWRPcGVyYXRvckVycm9yKG9wZXJhdG9yTmFtZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYmluYXJ5XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0FyaXRobWV0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBcml0aG1ldGljVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0Nvbmp1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yTmFtZSA9PSBcIm9yXCIgfHwgdGhpcy5vcGVyYXRvck5hbWUgPT0gXCJhbmRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbmp1bmN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb25qdW5jdGlvbiA/IHRoaXMub3BlcmF0b3JOYW1lIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgbGVmdE9wZXJhbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJpZ2h0T3BlcmFuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVQYXJhbSh4OiBhbnksIHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiB4LmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lci5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZXZhbHVhdGVQYXJhbSh0aGlzLmxlZnQsIHByb2Nlc3NWYWx1ZSksXG4gICAgICB0aGlzLmV2YWx1YXRlUGFyYW0odGhpcy5yaWdodCwgcHJvY2Vzc1ZhbHVlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgXCIoXCIgK1xuICAgICAgT3BlcmFuZE1ha2VyLnNhZmVUb1N0cmluZyh0aGlzLmxlZnQsIGZ1bmMpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci5vcGVyYXRvclRvU3RyaW5nKHRoaXMub3BlcmF0b3JOYW1lKSArXG4gICAgICBcIiBcIiArXG4gICAgICBPcGVyYW5kTWFrZXIuc2FmZVRvU3RyaW5nKHRoaXMucmlnaHQsIGZ1bmMpICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKHRoaXMubGVmdCAhPSBudWxsKSB0aGlzLmxlZnQuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgaWYgKHRoaXMucmlnaHQgIT0gbnVsbCkgdGhpcy5yaWdodC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNGdW5jdGlvbigpKSB8fFxuICAgICAgKCEhdGhpcy5yaWdodCAmJiB0aGlzLnJpZ2h0Lmhhc0Z1bmN0aW9uKCkpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNBc3luY0Z1bmN0aW9uKCkpIHx8XG4gICAgICAoISF0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaGFzQXN5bmNGdW5jdGlvbigpKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICBpZiAoISF0aGlzLmxlZnQpIHRoaXMubGVmdC5hZGRUb0FzeW5jTGlzdChsaXN0KTtcbiAgICBpZiAoISF0aGlzLnJpZ2h0KSB0aGlzLnJpZ2h0LmFkZFRvQXN5bmNMaXN0KGxpc3QpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFyeU9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBjb25zdW1lcjogRnVuY3Rpb247XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvblZhbHVlOiBPcGVyYW5kLCBwcml2YXRlIG9wZXJhdG9yTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLnVuYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgaWYgKHRoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogT3BlcmFuZCB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidW5hcnlcIjtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgT3BlcmFuZE1ha2VyLm9wZXJhdG9yVG9TdHJpbmcodGhpcy5vcGVyYXRvck5hbWUpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZyhmdW5jKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZXIuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuZXhwcmVzc2lvbi5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlPcGVyYW5kIGV4dGVuZHMgT3BlcmFuZCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZXM6IEFycmF5PE9wZXJhbmQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImFycmF5XCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIFwiW1wiICtcbiAgICAgIHRoaXMudmFsdWVzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24oZWw6IE9wZXJhbmQpIHtcbiAgICAgICAgICByZXR1cm4gZWwudG9TdHJpbmcoZnVuYyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgXCJdXCJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5tYXAoZnVuY3Rpb24oZWw6IE9wZXJhbmQpIHtcbiAgICAgIHJldHVybiBlbC5ldmFsdWF0ZShwcm9jZXNzVmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgZWwuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaGFzRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLnNvbWUoKG9wZXJhbmQpID0+IG9wZXJhbmQuaGFzRnVuY3Rpb24oKSk7XG4gIH1cbiAgcHVibGljIGhhc0FzeW5jRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLnNvbWUoKG9wZXJhbmQpID0+IG9wZXJhbmQuaGFzQXN5bmNGdW5jdGlvbigpKTtcbiAgfVxuICBwdWJsaWMgYWRkVG9Bc3luY0xpc3QobGlzdDogQXJyYXk8RnVuY3Rpb25PcGVyYW5kPikge1xuICAgIHRoaXMudmFsdWVzLmZvckVhY2goKG9wZXJhbmQpID0+IG9wZXJhbmQuYWRkVG9Bc3luY0xpc3QobGlzdCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25zdCBleHRlbmRzIE9wZXJhbmQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhbHVlOiBhbnkpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29uc3RcIjtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29ycmVjdFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdFZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGV2YWx1YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdFZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHt9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0VmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0aGlzLmlzQm9vbGVhblZhbHVlKHZhbHVlKSkgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xuICAgIGlmIChcbiAgICAgIHZhbHVlLmxlbmd0aCA+IDEgJiZcbiAgICAgIHRoaXMuaXNRdW90ZSh2YWx1ZVswXSkgJiZcbiAgICAgIHRoaXMuaXNRdW90ZSh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSlcbiAgICApXG4gICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKDEsIHZhbHVlLmxlbmd0aCAtIDIpO1xuICAgIGlmIChPcGVyYW5kTWFrZXIuaXNOdW1lcmljKHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoXCIweFwiKSA9PSAwKSByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDEgJiYgdmFsdWVbMF0gPT0gXCIwXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNRdW90ZShjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoID09IFwiJ1wiIHx8IGNoID09ICdcIic7XG4gIH1cbiAgcHJpdmF0ZSBpc0Jvb2xlYW5WYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbHVlICYmXG4gICAgICAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlIGV4dGVuZHMgQ29uc3Qge1xuICBzdGF0aWMgRGlzYWJsZUNvbnZlcnNpb25DaGFyID0gXCIjXCI7XG4gIHByaXZhdGUgdmFsdWVJbmZvOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSB1c2VWYWx1ZUFzSXRJczogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhcmlhYmxlTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMudmFyaWFibGVOYW1lICYmXG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZS5sZW5ndGggPiAxICYmXG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZVswXSA9PT0gVmFyaWFibGUuRGlzYWJsZUNvbnZlcnNpb25DaGFyXG4gICAgKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZSA9IHRoaXMudmFyaWFibGVOYW1lLnN1YnN0cigxKTtcbiAgICAgIHRoaXMudXNlVmFsdWVBc0l0SXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIHByZWZpeCA9IHRoaXMudXNlVmFsdWVBc0l0SXMgPyBWYXJpYWJsZS5EaXNhYmxlQ29udmVyc2lvbkNoYXIgOiBcIlwiO1xuICAgIHJldHVybiBcIntcIiArIHByZWZpeCArIHRoaXMudmFyaWFibGVOYW1lICsgXCJ9XCI7XG4gIH1cbiAgcHVibGljIGdldCB2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YXJpYWJsZU5hbWU7XG4gIH1cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgdGhpcy52YWx1ZUluZm8ubmFtZSA9IHRoaXMudmFyaWFibGVOYW1lO1xuICAgIHByb2Nlc3NWYWx1ZS5nZXRWYWx1ZUluZm8odGhpcy52YWx1ZUluZm8pO1xuICAgIHJldHVybiB0aGlzLnZhbHVlSW5mby5oYXNWYWx1ZVxuICAgICAgPyB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlSW5mby52YWx1ZSlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHZhcmlhYmxlcy5wdXNoKHRoaXMudmFyaWFibGVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLnVzZVZhbHVlQXNJdElzKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIHN1cGVyLmdldENvcnJlY3RWYWx1ZSh2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uT3BlcmFuZCBleHRlbmRzIE9wZXJhbmQge1xuICBwcml2YXRlIGlzUmVhZHlWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBhc3luUmVzdWx0OiBhbnk7XG4gIHB1YmxpYyBvbkFzeW5jUmVhZHk6ICgpID0+IHZvaWQ7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3JpZ2luYWxWYWx1ZTogc3RyaW5nLCBwcml2YXRlIHBhcmFtZXRlcnM6IEFycmF5T3BlcmFuZCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pc1JlYWR5VmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gbmV3IEFycmF5T3BlcmFuZChbXSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZnVuY3Rpb25cIjtcbiAgfVxuICBwdWJsaWMgZXZhbHVhdGVBc3luYyhwcm9jZXNzVmFsdWU6IFByb2Nlc3NWYWx1ZSkge1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gZmFsc2U7XG4gICAgdmFyIGFzeW5jUHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgIGFzeW5jUHJvY2Vzc1ZhbHVlLnZhbHVlcyA9IEhlbHBlcnMuY3JlYXRlQ29weShwcm9jZXNzVmFsdWUudmFsdWVzKTtcbiAgICBhc3luY1Byb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzID0gSGVscGVycy5jcmVhdGVDb3B5KHByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzKTtcbiAgICBhc3luY1Byb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzLnJldHVyblJlc3VsdCA9IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hc3luUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy5pc1JlYWR5VmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5vbkFzeW5jUmVhZHkoKTtcbiAgICB9O1xuICAgIHRoaXMuZXZhbHVhdGVDb3JlKGFzeW5jUHJvY2Vzc1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICBpZiAodGhpcy5pc1JlYWR5KSByZXR1cm4gdGhpcy5hc3luUmVzdWx0O1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlQ29yZShwcm9jZXNzVmFsdWUpO1xuICB9XG4gIHByaXZhdGUgZXZhbHVhdGVDb3JlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5ydW4oXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWUsXG4gICAgICB0aGlzLnBhcmFtZXRlcnMuZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKSxcbiAgICAgIHByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCkge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFZhbHVlICsgXCIoXCIgKyB0aGlzLnBhcmFtZXRlcnMudG9TdHJpbmcoZnVuYykgKyBcIilcIjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5wYXJhbWV0ZXJzLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWR5VmFsdWU7XG4gIH1cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBoYXNBc3luY0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UuaXNBc3luY0Z1bmN0aW9uKHRoaXMub3JpZ2luYWxWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICBpZiAodGhpcy5oYXNBc3luY0Z1bmN0aW9uKCkpIHtcbiAgICAgIGxpc3QucHVzaCh0aGlzKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhbmRNYWtlciB7XG4gIHN0YXRpYyB0aHJvd0ludmFsaWRPcGVyYXRvckVycm9yKG9wOiBzdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG9wZXJhdG9yOiAnXCIgKyBvcCArIFwiJ1wiKTtcbiAgfVxuXG4gIHN0YXRpYyBzYWZlVG9TdHJpbmcob3BlcmFuZDogT3BlcmFuZCwgZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBvcGVyYW5kID09IG51bGwgPyBcIlwiIDogb3BlcmFuZC50b1N0cmluZyhmdW5jKTtcbiAgfVxuXG4gIHN0YXRpYyB0b09wZXJhbmRTdHJpbmcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKFxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgIU9wZXJhbmRNYWtlci5pc051bWVyaWModmFsdWUpICYmXG4gICAgICAhT3BlcmFuZE1ha2VyLmlzQm9vbGVhblZhbHVlKHZhbHVlKVxuICAgIClcbiAgICAgIHZhbHVlID0gXCInXCIgKyB2YWx1ZSArIFwiJ1wiO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBpc1NwYWNlU3RyaW5nKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RyICYmICFzdHIucmVwbGFjZShcIiBcIiwgXCJcIik7XG4gIH1cblxuICBzdGF0aWMgaXNOdW1lcmljKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAhIXZhbHVlICYmXG4gICAgICAodmFsdWUuaW5kZXhPZihcIi1cIikgPiAtMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiK1wiKSA+IDEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIipcIikgPiAtMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiXlwiKSA+IC0xIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCIvXCIpID4gLTEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIiVcIikgPiAtMSlcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKE9wZXJhbmRNYWtlci5pc1NwYWNlU3RyaW5nKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBIZWxwZXJzLmlzTnVtYmVyKHZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Jvb2xlYW5WYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdmFsdWUgJiZcbiAgICAgICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIiB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIpXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyB1bmFyeUZ1bmN0aW9uczogSGFzaFRhYmxlPEZ1bmN0aW9uPiA9IHtcbiAgICBlbXB0eTogZnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKTtcbiAgICB9LFxuICAgIG5vdGVtcHR5OiBmdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIU9wZXJhbmRNYWtlci51bmFyeUZ1bmN0aW9ucy5lbXB0eSh2YWx1ZSk7XG4gICAgfSxcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKHZhbHVlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXZhbHVlO1xuICAgIH0sXG4gIH07XG5cbiAgc3RhdGljIGJpbmFyeUZ1bmN0aW9uczogSGFzaFRhYmxlPEZ1bmN0aW9uPiA9IHtcbiAgICBhcml0aG1ldGljT3Aob3BlcmF0b3JOYW1lOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihhOiBhbnksIGI6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShhKSAmJiAhT3BlcmFuZE1ha2VyLmlzU3BhY2VTdHJpbmcoYSkpIHtcbiAgICAgICAgICBhID0gdHlwZW9mIGIgPT09IFwic3RyaW5nXCIgPyBcIlwiIDogMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkoYikgJiYgIU9wZXJhbmRNYWtlci5pc1NwYWNlU3RyaW5nKGIpKSB7XG4gICAgICAgICAgYiA9IHR5cGVvZiBhID09PSBcInN0cmluZ1wiID8gXCJcIiA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgICAgIHJldHVybiBjb25zdW1lciA9PSBudWxsID8gbnVsbCA6IGNvbnN1bWVyLmNhbGwodGhpcywgYSwgYik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgYW5kOiBmdW5jdGlvbihhOiBib29sZWFuLCBiOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gYSAmJiBiO1xuICAgIH0sXG4gICAgb3I6IGZ1bmN0aW9uKGE6IGJvb2xlYW4sIGI6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhIHx8IGI7XG4gICAgfSxcbiAgICBwbHVzOiBmdW5jdGlvbihhOiBhbnksIGI6IGFueSk6IGFueSB7XG4gICAgICByZXR1cm4gYSArIGI7XG4gICAgfSxcbiAgICBtaW51czogZnVuY3Rpb24oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH0sXG4gICAgbXVsOiBmdW5jdGlvbihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gYSAqIGI7XG4gICAgfSxcbiAgICBkaXY6IGZ1bmN0aW9uKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIGlmICghYikgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gYSAvIGI7XG4gICAgfSxcbiAgICBtb2Q6IGZ1bmN0aW9uKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIGlmICghYikgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gYSAlIGI7XG4gICAgfSxcbiAgICBwb3dlcjogZnVuY3Rpb24oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIE1hdGgucG93KGEsIGIpO1xuICAgIH0sXG4gICAgZ3JlYXRlcjogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAobGVmdCA9PSBudWxsIHx8IHJpZ2h0ID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBsZWZ0ID4gcmlnaHQ7XG4gICAgfSxcbiAgICBsZXNzOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChsZWZ0ID09IG51bGwgfHwgcmlnaHQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDtcbiAgICB9LFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5ncmVhdGVyKGxlZnQsIHJpZ2h0KTtcbiAgICB9LFxuICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5sZXNzKGxlZnQsIHJpZ2h0KTtcbiAgICB9LFxuICAgIGVxdWFsOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuaXNUd29WYWx1ZUVxdWFscyhsZWZ0LCByaWdodCk7XG4gICAgfSxcbiAgICBub3RlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIU9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuZXF1YWwobGVmdCwgcmlnaHQpO1xuICAgIH0sXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnNDb3JlKGxlZnQsIHJpZ2h0LCB0cnVlKTtcbiAgICB9LFxuICAgIG5vdGNvbnRhaW5zOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmICghbGVmdCAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkocmlnaHQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zQ29yZShsZWZ0LCByaWdodCwgZmFsc2UpO1xuICAgIH0sXG4gICAgYW55b2Y6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGxlZnQpICYmIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoXG4gICAgICAgIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGxlZnQpIHx8XG4gICAgICAgICghQXJyYXkuaXNBcnJheShsZWZ0KSAmJiBsZWZ0Lmxlbmd0aCA9PT0gMClcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGVmdCkpXG4gICAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKHJpZ2h0LCBsZWZ0KTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyaWdodCkpXG4gICAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKGxlZnQsIHJpZ2h0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmlnaHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHRbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGFsbG9mOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmICghbGVmdCAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkocmlnaHQpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmlnaHQpKVxuICAgICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJpZ2h0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodFtpXSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBjb250YWluc0NvcmU6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgaXNDb250YWluczogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgbGVmdCAhPT0gMCAmJiBsZWZ0ICE9PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFsZWZ0Lmxlbmd0aCkge1xuICAgICAgICBsZWZ0ID0gbGVmdC50b1N0cmluZygpO1xuICAgICAgICBpZiAodHlwZW9mIHJpZ2h0ID09PSBcInN0cmluZ1wiIHx8IHJpZ2h0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IGxlZnQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICByaWdodCA9IHJpZ2h0LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJzdHJpbmdcIiB8fCBsZWZ0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIGlmICghcmlnaHQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmlnaHQgPSByaWdodC50b1N0cmluZygpO1xuICAgICAgICB2YXIgZm91bmQgPSBsZWZ0LmluZGV4T2YocmlnaHQpID4gLTE7XG4gICAgICAgIHJldHVybiBpc0NvbnRhaW5zID8gZm91bmQgOiAhZm91bmQ7XG4gICAgICB9XG4gICAgICB2YXIgcmlnaHRBcnJheSA9IEFycmF5LmlzQXJyYXkocmlnaHQpID8gcmlnaHQgOiBbcmlnaHRdO1xuICAgICAgZm9yICh2YXIgckluZGV4ID0gMDsgckluZGV4IDwgcmlnaHRBcnJheS5sZW5ndGg7IHJJbmRleCsrKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgcmlnaHQgPSByaWdodEFycmF5W3JJbmRleF07XG4gICAgICAgIGZvciAoOyBpIDwgbGVmdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChPcGVyYW5kTWFrZXIuaXNUd29WYWx1ZUVxdWFscyhsZWZ0W2ldLCByaWdodCkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID09IGxlZnQubGVuZ3RoKSByZXR1cm4gIWlzQ29udGFpbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNDb250YWlucztcbiAgICB9LFxuICB9O1xuXG4gIHN0YXRpYyBpc1R3b1ZhbHVlRXF1YWxzKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHggPT09IFwidW5kZWZpbmVkXCIpIHggPSB1bmRlZmluZWQ7XG4gICAgaWYgKHkgPT09IFwidW5kZWZpbmVkXCIpIHkgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh4LCB5LCB0cnVlKTtcbiAgfVxuXG4gIHN0YXRpYyBvcGVyYXRvclRvU3RyaW5nKG9wZXJhdG9yTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgb3BTdHIgPSBPcGVyYW5kTWFrZXIuc2lnbnNbb3BlcmF0b3JOYW1lXTtcbiAgICByZXR1cm4gb3BTdHIgPT0gbnVsbCA/IG9wZXJhdG9yTmFtZSA6IG9wU3RyO1xuICB9XG5cbiAgc3RhdGljIHNpZ25zOiBIYXNoVGFibGU8c3RyaW5nPiA9IHtcbiAgICBsZXNzOiBcIjxcIixcbiAgICBsZXNzb3JlcXVhbDogXCI8PVwiLFxuICAgIGdyZWF0ZXI6IFwiPlwiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcIj49XCIsXG4gICAgZXF1YWw6IFwiPT1cIixcbiAgICBub3RlcXVhbDogXCIhPVwiLFxuICAgIHBsdXM6IFwiK1wiLFxuICAgIG1pbnVzOiBcIi1cIixcbiAgICBtdWw6IFwiKlwiLFxuICAgIGRpdjogXCIvXCIsXG4gICAgYW5kOiBcImFuZFwiLFxuICAgIG9yOiBcIm9yXCIsXG4gICAgcG93ZXI6IFwiXlwiLFxuICAgIG1vZDogXCIlXCIsXG4gICAgbmVnYXRlOiBcIiFcIixcbiAgfTtcbn1cbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBJRWxlbWVudCwgSVF1ZXN0aW9uIH0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuLyoqXG4gKiBUaGUgZmxvdyBwYW5lbCBvYmplY3QuIEl0IGlzIGEgY29udGFpbmVyIHdpdGggZmxvdyBsYXlvdXQgd2hlcmUgeW91IGNhbiBtaXggcXVlc3Rpb25zIHdpdGggbWFya2Rvd24gdGV4dC5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBGbG93UGFuZWxNb2RlbCBleHRlbmRzIFBhbmVsTW9kZWwge1xuICBzdGF0aWMgY29udGVudEVsZW1lbnROYW1lUHJlZml4ID0gXCJlbGVtZW50OlwiO1xuICBwdWJsaWMgY29udGVudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIG9uR2V0SHRtbEZvclF1ZXN0aW9uOiAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBzdHJpbmc7XG4gIHB1YmxpYyBvbkN1c3RvbUh0bWxQcm9kdWNpbmc6ICgpID0+IHN0cmluZztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb250ZW50XCIsIHRoaXMsIHRydWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY29udGVudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLm9uQ29udGVudENoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZsb3dwYW5lbFwiO1xuICB9XG4gIGdldENoaWxkcmVuTGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZsb3dcIjtcbiAgfVxuICBvblN1cnZleUxvYWQoKTogYW55IHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLm9uQ29udGVudENoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb250ZW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29udGVudCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29udGVudFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jQ29udGVudCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb250ZW50XCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJodG1sXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaHRtbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImh0bWxcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Db250ZW50Q2hhbmdlZCgpOiBhbnkge1xuICAgIHZhciBodG1sID0gXCJcIjtcbiAgICBpZiAoISF0aGlzLm9uQ3VzdG9tSHRtbFByb2R1Y2luZykge1xuICAgICAgaHRtbCA9IHRoaXMub25DdXN0b21IdG1sUHJvZHVjaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWwgPSB0aGlzLnByb2R1Y2VIdG1sKCk7XG4gICAgfVxuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50Q2hhbmdlZENhbGxiYWNrKSB0aGlzLmNvbnRlbnRDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBwdWJsaWMgcHJvZHVjZUh0bWwoKTogc3RyaW5nIHtcbiAgICB2YXIgaHRtbCA9IFtdO1xuICAgIC8vY29udGVudEVsZW1lbnROYW1lUHJlZml4XG4gICAgdmFyIHJlZ0V4ID0gL3soLio/KGVsZW1lbnQ6KVteJF0uKj8pfS9nO1xuICAgIHZhciBzdHIgPSB0aGlzLmNvbnRlbnQ7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSAwO1xuICAgIHZhciByZXMgPSBudWxsO1xuICAgIHdoaWxlICgocmVzID0gcmVnRXguZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJlcy5pbmRleCA+IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgaHRtbC5wdXNoKHN0ci5zdWJzdHIoc3RhcnRJbmRleCwgcmVzLmluZGV4IC0gc3RhcnRJbmRleCkpO1xuICAgICAgICBzdGFydEluZGV4ID0gcmVzLmluZGV4O1xuICAgICAgfVxuICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkZyb21UZXh0KHJlc1swXSk7XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICBodG1sLnB1c2godGhpcy5nZXRIdG1sRm9yUXVlc3Rpb24ocXVlc3Rpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGh0bWwucHVzaChcbiAgICAgICAgICBzdHIuc3Vic3RyKHN0YXJ0SW5kZXgsIHJlcy5pbmRleCArIHJlc1swXS5sZW5ndGggLSBzdGFydEluZGV4KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3RhcnRJbmRleCA9IHJlcy5pbmRleCArIHJlc1swXS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChzdGFydEluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgICAgaHRtbC5wdXNoKHN0ci5zdWJzdHIoc3RhcnRJbmRleCwgc3RyLmxlbmd0aCAtIHN0YXJ0SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWwuam9pbihcIlwiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCI8YnI+XCIsIFwiZ1wiKSwgXCI8YnIvPlwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25Gcm9tVGV4dChzdHI6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICBzdHIgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZShGbG93UGFuZWxNb2RlbC5jb250ZW50RWxlbWVudE5hbWVQcmVmaXgsIFwiXCIpLnRyaW0oKTtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShzdHIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIdG1sRm9yUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLm9uR2V0SHRtbEZvclF1ZXN0aW9uKSByZXR1cm4gdGhpcy5vbkdldEh0bWxGb3JRdWVzdGlvbihxdWVzdGlvbik7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uSHRtbElkKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZSArIFwiX1wiICsgcXVlc3Rpb24uaWQ7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIHN1cGVyLm9uQWRkRWxlbWVudChlbGVtZW50LCBpbmRleCk7XG4gICAgdGhpcy5hZGRFbGVtZW50VG9Db250ZW50KGVsZW1lbnQpO1xuICAgIGVsZW1lbnQucmVuZGVyV2lkdGggPSBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBvblJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICB2YXIgc2VhcmNoU3RyID0gdGhpcy5nZXRFbGVtZW50Q29udGVudFRleHQoZWxlbWVudCk7XG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2Uoc2VhcmNoU3RyLCBcIlwiKTtcbiAgICBzdXBlci5vblJlbW92ZUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbiAgZHJhZ0Ryb3BNb3ZlRWxlbWVudChzcmM6IElFbGVtZW50LCB0YXJnZXQ6IElFbGVtZW50LCB0YXJnZXRJbmRleDogbnVtYmVyKSB7fVxuICBwcml2YXRlIGFkZEVsZW1lbnRUb0NvbnRlbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciB0ZXh0ID0gdGhpcy5nZXRFbGVtZW50Q29udGVudFRleHQoZWxlbWVudCk7XG4gICAgaWYgKCF0aGlzLmluc2VydFRleHRBdEN1cnNvcih0ZXh0KSkge1xuICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb250ZW50ICsgdGV4dDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpbnNlcnRUZXh0QXRDdXJzb3IodGV4dDogc3RyaW5nLCBwcmV2TmFtZTogc3RyaW5nID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzRGVzaWduTW9kZSB8fFxuICAgICAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAhd2luZG93LmdldFNlbGVjdGlvblxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWwuZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xuICAgICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgICB2YXIgc2VsZiA9IDxhbnk+dGhpcztcbiAgICAgIGlmIChzZWxmLmdldENvbnRlbnQpIHtcbiAgICAgICAgdmFyIHN0ciA9IHNlbGYuZ2V0Q29udGVudChwcmV2TmFtZSk7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHN0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIHJldHVybiBcIntcIiArIEZsb3dQYW5lbE1vZGVsLmNvbnRlbnRFbGVtZW50TmFtZVByZWZpeCArIGVsZW1lbnQubmFtZSArIFwifVwiO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZmxvd3BhbmVsXCIsXG4gIFt7IG5hbWU6IFwiY29udGVudDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb250ZW50XCIgfV0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEZsb3dQYW5lbE1vZGVsKCk7XG4gIH0sXG4gIFwicGFuZWxcIlxuKTtcbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IEZ1bmN0aW9uRmFjdG9yeSA9IG5ldyBGdW5jdGlvbkZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBmdW5jdGlvbkhhc2g6IEhhc2hUYWJsZTwocGFyYW1zOiBhbnlbXSkgPT4gYW55PiA9IHt9O1xuICBwcml2YXRlIGlzQXN5bmNIYXNoOiBIYXNoVGFibGU8Ym9vbGVhbj4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZ1bmM6IChwYXJhbXM6IGFueVtdKSA9PiBhbnksXG4gICAgaXNBc3luYzogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuZnVuY3Rpb25IYXNoW25hbWVdID0gZnVuYztcbiAgICBpZiAoaXNBc3luYykgdGhpcy5pc0FzeW5jSGFzaFtuYW1lXSA9IHRydWU7XG4gIH1cbiAgcHVibGljIHVucmVnaXN0ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMuZnVuY3Rpb25IYXNoW25hbWVdO1xuICAgIGRlbGV0ZSB0aGlzLmlzQXN5bmNIYXNoW25hbWVdO1xuICB9XG4gIHB1YmxpYyBoYXNGdW5jdGlvbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZ1bmN0aW9uSGFzaFtuYW1lXTtcbiAgfVxuICBwdWJsaWMgaXNBc3luY0Z1bmN0aW9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXNBc3luY0hhc2hbbmFtZV07XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5mdW5jdGlvbkhhc2ggPSB7fTtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5mdW5jdGlvbkhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBydW4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtczogYW55W10sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsXG4gICk6IGFueSB7XG4gICAgdmFyIGZ1bmMgPSB0aGlzLmZ1bmN0aW9uSGFzaFtuYW1lXTtcbiAgICBpZiAoIWZ1bmMpIHJldHVybiBudWxsO1xuICAgIGxldCBjbGFzc1J1bm5lciA9IHtcbiAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgfTtcblxuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAoPGFueT5jbGFzc1J1bm5lcilba2V5XSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzUnVubmVyLmZ1bmMocGFyYW1zKTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIHJlZ2lzdGVyRnVuY3Rpb24gPSBGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXI7XG5cbmZ1bmN0aW9uIGdldFBhcmFtc0FzQXJyYXkodmFsdWU6IGFueSwgYXJyOiBhbnlbXSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnZXRQYXJhbXNBc0FycmF5KHZhbHVlW2ldLCBhcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdW0ocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICByZXMgKz0gYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJzdW1cIiwgc3VtKTtcblxuZnVuY3Rpb24gbWluX21heChwYXJhbXM6IGFueVtdLCBpc01pbjogYm9vbGVhbik6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzID0gYXJyW2ldO1xuICAgIH1cbiAgICBpZiAoaXNNaW4pIHtcbiAgICAgIGlmIChyZXMgPiBhcnJbaV0pIHJlcyA9IGFycltpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlcyA8IGFycltpXSkgcmVzID0gYXJyW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBtaW4ocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBtaW5fbWF4KHBhcmFtcywgdHJ1ZSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtaW5cIiwgbWluKTtcblxuZnVuY3Rpb24gbWF4KHBhcmFtczogYW55W10pOiBhbnkge1xuICByZXR1cm4gbWluX21heChwYXJhbXMsIGZhbHNlKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1heFwiLCBtYXgpO1xuXG5mdW5jdGlvbiBjb3VudChwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIHJldHVybiBhcnIubGVuZ3RoO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiY291bnRcIiwgY291bnQpO1xuXG5mdW5jdGlvbiBhdmcocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICByZXMgKz0gYXJyW2ldO1xuICB9XG4gIHJldHVybiBhcnIubGVuZ3RoID4gMCA/IHJlcyAvIGFyci5sZW5ndGggOiAwO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiYXZnXCIsIGF2Zyk7XG5cbmZ1bmN0aW9uIGdldEluQXJyYXlQYXJhbXMocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmIChwYXJhbXMubGVuZ3RoICE9IDIpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gcGFyYW1zWzBdO1xuICBpZiAoIWFycikgcmV0dXJuIG51bGw7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpICYmICFBcnJheS5pc0FycmF5KE9iamVjdC5rZXlzKGFycikpKSByZXR1cm4gbnVsbDtcbiAgdmFyIG5hbWUgPSBwYXJhbXNbMV07XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIiAmJiAhKG5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgZGF0YTogYXJyLCBuYW1lOiBuYW1lIH07XG59XG5cbmZ1bmN0aW9uIGNhbGNJbkFycmF5KFxuICBwYXJhbXM6IGFueVtdLFxuICBmdW5jOiAocmVzOiBudW1iZXIsIHZhbDogbnVtYmVyKSA9PiBudW1iZXJcbik6IGFueSB7XG4gIHZhciB2ID0gZ2V0SW5BcnJheVBhcmFtcyhwYXJhbXMpO1xuICBpZiAoIXYpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciByZXMgPSB1bmRlZmluZWQ7XG4gIGlmIChBcnJheS5pc0FycmF5KHYuZGF0YSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB2LmRhdGFbaV07XG4gICAgICBpZiAoISFpdGVtICYmIGl0ZW1bPHN0cmluZz52Lm5hbWVdKSB7XG4gICAgICAgIHJlcyA9IGZ1bmMocmVzLCBpdGVtWzxzdHJpbmc+di5uYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiB2LmRhdGEpIHtcbiAgICAgIHZhciBpdGVtID0gdi5kYXRhW2tleV07XG4gICAgICBpZiAoISFpdGVtICYmIGl0ZW1bPHN0cmluZz52Lm5hbWVdKSB7XG4gICAgICAgIHJlcyA9IGZ1bmMocmVzLCBpdGVtWzxzdHJpbmc+di5uYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHN1bUluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciByZXMgPSBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJlcyA9IDA7XG4gICAgcmV0dXJuICtyZXMgKyArdmFsO1xuICB9KTtcbiAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkID8gcmVzIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcInN1bUluQXJyYXlcIiwgc3VtSW5BcnJheSk7XG5cbmZ1bmN0aW9uIG1pbkluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHJlcyA8IHZhbCA/IHJlcyA6IHZhbDtcbiAgfSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtaW5JbkFycmF5XCIsIG1pbkluQXJyYXkpO1xuXG5mdW5jdGlvbiBtYXhJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICByZXR1cm4gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbihyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsO1xuICAgIHJldHVybiByZXMgPiB2YWwgPyByZXMgOiB2YWw7XG4gIH0pO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibWF4SW5BcnJheVwiLCBtYXhJbkFycmF5KTtcblxuZnVuY3Rpb24gY291bnRJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgcmVzID0gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbihyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXMgPSAwO1xuICAgIHJldHVybiByZXMgKyAxO1xuICB9KTtcbiAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkID8gcmVzIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImNvdW50SW5BcnJheVwiLCBjb3VudEluQXJyYXkpO1xuXG5mdW5jdGlvbiBhdmdJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgY291bnQgPSBjb3VudEluQXJyYXkocGFyYW1zKTtcbiAgaWYgKGNvdW50ID09IDApIHJldHVybiAwO1xuICByZXR1cm4gc3VtSW5BcnJheShwYXJhbXMpIC8gY291bnQ7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJhdmdJbkFycmF5XCIsIGF2Z0luQXJyYXkpO1xuXG5mdW5jdGlvbiBpaWYocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBcIlwiO1xuICByZXR1cm4gcGFyYW1zWzBdID8gcGFyYW1zWzFdIDogcGFyYW1zWzJdO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiaWlmXCIsIGlpZik7XG5cbmZ1bmN0aW9uIGdldERhdGUocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPCAxKSByZXR1cm4gbnVsbDtcbiAgaWYgKCFwYXJhbXNbMF0pIHJldHVybiBudWxsO1xuICByZXR1cm4gbmV3IERhdGUocGFyYW1zWzBdKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImdldERhdGVcIiwgZ2V0RGF0ZSk7XG5cbmZ1bmN0aW9uIGFnZShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA8IDEpIHJldHVybiBudWxsO1xuICBpZiAoIXBhcmFtc1swXSkgcmV0dXJuIG51bGw7XG4gIHZhciBiaXJ0aERhdGUgPSBuZXcgRGF0ZShwYXJhbXNbMF0pO1xuICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICB2YXIgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGJpcnRoRGF0ZS5nZXRGdWxsWWVhcigpO1xuICB2YXIgbSA9IHRvZGF5LmdldE1vbnRoKCkgLSBiaXJ0aERhdGUuZ2V0TW9udGgoKTtcbiAgaWYgKG0gPCAwIHx8IChtID09PSAwICYmIHRvZGF5LmdldERhdGUoKSA8IGJpcnRoRGF0ZS5nZXREYXRlKCkpKSB7XG4gICAgYWdlIC09IGFnZSA+IDAgPyAxIDogMDtcbiAgfVxuICByZXR1cm4gYWdlO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiYWdlXCIsIGFnZSk7XG5cbmZ1bmN0aW9uIGlzQ29udGFpbmVyUmVhZHkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICghcGFyYW1zWzBdIHx8ICF0aGlzLnN1cnZleSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgbmFtZSA9IHBhcmFtc1swXTtcbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeU5hbWUobmFtZSk7XG4gIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSB0aGlzLnN1cnZleS5nZXRQYW5lbEJ5TmFtZShuYW1lKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHF1ZXN0aW9ucyA9IGNvbnRhaW5lci5xdWVzdGlvbnM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHF1ZXN0aW9uc1tpXS5oYXNFcnJvcnMoZmFsc2UpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJpc0NvbnRhaW5lclJlYWR5XCIsIGlzQ29udGFpbmVyUmVhZHkpO1xuXG5mdW5jdGlvbiBpc0Rpc3BsYXlNb2RlKCkge1xuICByZXR1cm4gdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlzRGlzcGxheU1vZGVcIiwgaXNEaXNwbGF5TW9kZSk7XG5cbmZ1bmN0aW9uIGN1cnJlbnREYXRlKCkge1xuICByZXR1cm4gbmV3IERhdGUoKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImN1cnJlbnREYXRlXCIsIGN1cnJlbnREYXRlKTtcblxuZnVuY3Rpb24gdG9kYXkocGFyYW1zOiBhbnlbXSkge1xuICB2YXIgcmVzID0gbmV3IERhdGUoKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSAmJiBwYXJhbXMubGVuZ3RoID09IDEpIHtcbiAgICByZXMuc2V0RGF0ZShyZXMuZ2V0RGF0ZSgpICsgcGFyYW1zWzBdKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwidG9kYXlcIiwgdG9kYXkpO1xuXG5mdW5jdGlvbiBkaWZmRGF5cyhwYXJhbXM6IGFueVtdKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpIHx8IHBhcmFtcy5sZW5ndGggIT09IDIpIHJldHVybiAwO1xuICBpZiAoIXBhcmFtc1swXSB8fCAhcGFyYW1zWzFdKSByZXR1cm4gMDtcbiAgY29uc3QgZGF0ZTE6IGFueSA9IG5ldyBEYXRlKHBhcmFtc1swXSk7XG4gIGNvbnN0IGRhdGUyOiBhbnkgPSBuZXcgRGF0ZShwYXJhbXNbMV0pO1xuICBjb25zdCBkaWZmVGltZSA9IE1hdGguYWJzKGRhdGUyIC0gZGF0ZTEpO1xuICByZXR1cm4gTWF0aC5jZWlsKGRpZmZUaW1lIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImRpZmZEYXlzXCIsIGRpZmZEYXlzKTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgSGFzaFRhYmxlPFQ+IHtcbiAgW2tleTogc3RyaW5nXTogVDtcbn1cblxuZXhwb3J0IGNsYXNzIEhlbHBlcnMge1xuICAvKipcbiAgICogQSBzdGF0aWMgbWV0aG9kcyB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nIG9yIGVtcHR5IGFycmF5LlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWx1ZUVtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIXZhbHVlICYmIHZhbHVlICE9PSAwICYmIHZhbHVlICE9PSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzQXJyYXlDb250YWluc0VxdWFsKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGogPSAwO1xuICAgICAgZm9yICg7IGogPCB5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeFtpXSwgeVtqXSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNBcnJheXNFcXVhbChcbiAgICB4OiBhbnksXG4gICAgeTogYW55LFxuICAgIGlnbm9yZU9yZGVyOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpZ25vcmVPcmRlcikge1xuICAgICAgdmFyIHhTb3J0ZWQgPSBbXTtcbiAgICAgIHZhciB5U29ydGVkID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeFNvcnRlZC5wdXNoKHhbaV0pO1xuICAgICAgICB5U29ydGVkLnB1c2goeVtpXSk7XG4gICAgICB9XG4gICAgICB4U29ydGVkLnNvcnQoKTtcbiAgICAgIHlTb3J0ZWQuc29ydCgpO1xuICAgICAgeCA9IHhTb3J0ZWQ7XG4gICAgICB5ID0geVNvcnRlZDtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh4W2ldLCB5W2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzVHdvVmFsdWVFcXVhbHMoXG4gICAgeDogYW55LFxuICAgIHk6IGFueSxcbiAgICBpZ25vcmVPcmRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh4ID09PSB5KSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHgubGVuZ3RoID09PSAwICYmIHR5cGVvZiB5ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeSkgJiYgeS5sZW5ndGggPT09IDAgJiYgdHlwZW9mIHggPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoKHggPT09IHVuZGVmaW5lZCB8fCB4ID09PSBudWxsKSAmJiB5ID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoKHkgPT09IHVuZGVmaW5lZCB8fCB5ID09PSBudWxsKSAmJiB4ID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgeSA9PSBcInN0cmluZ1wiKSByZXR1cm4geCA9PSB5O1xuXG4gICAgaWYgKEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHgpICYmIEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHkpKSB7XG4gICAgICBpZiAocGFyc2VJbnQoeCkgPT09IHBhcnNlSW50KHkpICYmIHBhcnNlRmxvYXQoeCkgPT09IHBhcnNlRmxvYXQoeSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh5KSkgfHxcbiAgICAgIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkoeSkpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgoeCA9PT0gdHJ1ZSB8fCB4ID09PSBmYWxzZSkgJiYgdHlwZW9mIHkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHgudG9TdHJpbmcoKSA9PT0geS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoKHkgPT09IHRydWUgfHwgeSA9PT0gZmFsc2UpICYmIHR5cGVvZiB4ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB5LnRvU3RyaW5nKCkgPT09IHgudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgJiYgISh5IGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIHggPT0geTtcbiAgICBpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCAhKHkgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHhbXCJlcXVhbHNcIl0pIHJldHVybiB4LmVxdWFscyh5KTtcbiAgICBpZiAoISF4LnRvSlNPTiAmJiAhIXkudG9KU09OICYmICEheC5nZXRUeXBlICYmICEheS5nZXRUeXBlKSB7XG4gICAgICBpZiAoeC5pc0RpcG9zZWQgfHwgeS5pc0RpcG9zZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh4LmdldFR5cGUoKSAhPT0geS5nZXRUeXBlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghIXgubmFtZSAmJiB4Lm5hbWUgIT09IHkubmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh4LnRvSlNPTigpLCB5LnRvSlNPTigpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkgJiYgQXJyYXkuaXNBcnJheSh5KSlcbiAgICAgIHJldHVybiBIZWxwZXJzLmlzQXJyYXlzRXF1YWwoeCwgeSwgaWdub3JlT3JkZXIpO1xuXG4gICAgZm9yICh2YXIgcCBpbiB4KSB7XG4gICAgICBpZiAoIXguaGFzT3duUHJvcGVydHkocCkpIGNvbnRpbnVlO1xuICAgICAgaWYgKCF5Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoeFtwXSA9PT0geVtwXSkgY29udGludWU7XG4gICAgICBpZiAodHlwZW9mIHhbcF0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHhbcF0sIHlbcF0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAocCBpbiB5KSB7XG4gICAgICBpZiAoeS5oYXNPd25Qcm9wZXJ0eShwKSAmJiAheC5oYXNPd25Qcm9wZXJ0eShwKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJhbmRvbWl6ZUFycmF5PFQ+KGFycmF5OiBBcnJheTxUPik6IEFycmF5PFQ+IHtcbiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcbiAgICAgIHZhciB0ZW1wID0gYXJyYXlbaV07XG4gICAgICBhcnJheVtpXSA9IGFycmF5W2pdO1xuICAgICAgYXJyYXlbal0gPSB0ZW1wO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRVbmJpbmRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgLy9kbyBub3QgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCBpbnN0YW5jZSEhIVxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ29weShvYmo6IGFueSkge1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIGlmICghb2JqKSByZXR1cm4gcmVzO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHJlc1trZXldID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NvbnZlcnRpYmxlVG9OdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAhaXNOYU4odmFsdWUpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgdmFsdWUuaW5kZXhPZihcIjB4XCIpID09IDAgJiZcbiAgICAgIHZhbHVlLmxlbmd0aCA+IDMyXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE1heExlbmd0aChtYXhMZW5ndGg6IG51bWJlciwgc3VydmV5TGVuZ3RoOiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChtYXhMZW5ndGggPCAwKSB7XG4gICAgICBtYXhMZW5ndGggPSBzdXJ2ZXlMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBtYXhMZW5ndGggPiAwID8gbWF4TGVuZ3RoIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE51bWJlckJ5SW5kZXgoaW5kZXg6IG51bWJlciwgc3RhcnRJbmRleFN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgc3RhcnRJbmRleCA9IDE7XG4gICAgdmFyIHByZWZpeCA9IFwiXCI7XG4gICAgdmFyIHBvc3RmaXggPSBcIi5cIjtcbiAgICB2YXIgaXNOdW1lcmljID0gdHJ1ZTtcbiAgICB2YXIgc3RySW5kZXggPSBcIkFcIjtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICBpZiAoISFzdGFydEluZGV4U3RyKSB7XG4gICAgICBzdHIgPSBzdGFydEluZGV4U3RyO1xuICAgICAgdmFyIGluZCA9IHN0ci5sZW5ndGggLSAxO1xuICAgICAgdmFyIGhhc0RpZ2l0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoSGVscGVycy5pc0NoYXJEaWdpdChzdHJbaV0pKSB7XG4gICAgICAgICAgaGFzRGlnaXQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hlY2tMZXR0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaGFzRGlnaXQgJiYgIUhlbHBlcnMuaXNDaGFyRGlnaXQoc3RyW2luZF0pKSB8fFxuICAgICAgICAgIEhlbHBlcnMuaXNDaGFyTm90TGV0dGVyQW5kRGlnaXQoc3RyW2luZF0pXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgd2hpbGUgKGluZCA+PSAwICYmIGNoZWNrTGV0dGVyKCkpIGluZC0tO1xuICAgICAgdmFyIG5ld1Bvc3RmaXggPSBcIlwiO1xuICAgICAgaWYgKGluZCA8IHN0ci5sZW5ndGggLSAxKSB7XG4gICAgICAgIG5ld1Bvc3RmaXggPSBzdHIuc3Vic3RyKGluZCArIDEpO1xuICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIGluZCArIDEpO1xuICAgICAgfVxuICAgICAgaW5kID0gc3RyLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaW5kID49IDApIHtcbiAgICAgICAgaWYgKGNoZWNrTGV0dGVyKCkpIGJyZWFrO1xuICAgICAgICBpbmQtLTtcbiAgICAgICAgaWYgKCFoYXNEaWdpdCkgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdHJJbmRleCA9IHN0ci5zdWJzdHIoaW5kICsgMSk7XG4gICAgICBwcmVmaXggPSBzdHIuc3Vic3RyKDAsIGluZCArIDEpO1xuICAgICAgaWYgKHBhcnNlSW50KHN0ckluZGV4KSkgc3RhcnRJbmRleCA9IHBhcnNlSW50KHN0ckluZGV4KTtcbiAgICAgIGVsc2UgaWYgKHN0ckluZGV4Lmxlbmd0aCA9PSAxKSBpc051bWVyaWMgPSBmYWxzZTtcbiAgICAgIGlmICghIW5ld1Bvc3RmaXggfHwgISFwcmVmaXgpIHtcbiAgICAgICAgcG9zdGZpeCA9IG5ld1Bvc3RmaXg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc051bWVyaWMpIHJldHVybiBwcmVmaXggKyAoaW5kZXggKyBzdGFydEluZGV4KS50b1N0cmluZygpICsgcG9zdGZpeDtcbiAgICByZXR1cm4gKFxuICAgICAgcHJlZml4ICsgU3RyaW5nLmZyb21DaGFyQ29kZShzdHJJbmRleC5jaGFyQ29kZUF0KDApICsgaW5kZXgpICsgcG9zdGZpeFxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NoYXJOb3RMZXR0ZXJBbmREaWdpdChjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoLnRvVXBwZXJDYXNlKCkgPT0gY2gudG9Mb3dlckNhc2UoKSAmJiAhSGVscGVycy5pc0NoYXJEaWdpdChjaCk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NoYXJEaWdpdChjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoID49IFwiMFwiICYmIGNoIDw9IFwiOVwiO1xuICB9XG59XG5pZiAoISg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdKSB7XG4gICg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24obWF0Y2g6IGFueSwgbnVtYmVyOiBhbnkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9IFwidW5kZWZpbmVkXCIgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcbiAgICB9KTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQge1xuICBKc29uT2JqZWN0LFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBcnJheSBvZiBJdGVtVmFsdWUgaXMgdXNlZCBpbiBjaGVja294LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBjaG9pY2VzLCBtYXRyaXggY29sdW1ucyBhbmQgcm93cy5cbiAqIEl0IGhhcyB0d28gbWFpbiBwcm9wZXJ0aWVzOiB2YWx1ZSBhbmQgdGV4dC4gSWYgdGV4dCBpcyBlbXB0eSwgdmFsdWUgaXMgdXNlZCBmb3IgZGlzcGxheWluZy5cbiAqIFRoZSB0ZXh0IHByb3BlcnR5IGlzIGxvY2FsaXphYmxlIGFuZCBzdXBwb3J0IG1hcmtkb3duLlxuICovXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwdWJsaWMgc3RhdGljIGdldCBTZXBhcmF0b3IoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLml0ZW1WYWx1ZVNlcGFyYXRvcjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBTZXBhcmF0b3IodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5pdGVtVmFsdWVTZXBhcmF0b3IgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVBcnJheShsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4gPSBbXTtcbiAgICBJdGVtVmFsdWUuc2V0dXBBcnJheShpdGVtcywgbG9jT3duZXIpO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldHVwQXJyYXkoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyXG4gICkge1xuICAgIGl0ZW1zLnB1c2ggPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnVuc2hpZnQgPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnNwbGljZSA9IGZ1bmN0aW9uKFxuICAgICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgICBkZWxldGVDb3VudD86IG51bWJlcixcbiAgICAgIC4uLml0ZW1zOiBJdGVtVmFsdWVbXVxuICAgICk6IEl0ZW1WYWx1ZVtdIHtcbiAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgLi4uaXRlbXNcbiAgICAgICk7XG4gICAgICBpZiAoIWl0ZW1zKSBpdGVtcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0RGF0YShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgdmFyIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGl0ZW0gPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHZhbHVlLmdldFR5cGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIGl0ZW0uc2V0RGF0YSh2YWx1ZSk7XG4gICAgICBpZiAoISF2YWx1ZS5vcmlnaW5hbEl0ZW0pIHtcbiAgICAgICAgaXRlbS5vcmlnaW5hbEl0ZW0gPSB2YWx1ZS5vcmlnaW5hbEl0ZW07XG4gICAgICB9XG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBhbnkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpdGVtc1tpXS5nZXREYXRhKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbUJ5VmFsdWUoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbDogYW55KTogSXRlbVZhbHVlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2YWxJc0VtcHR5ID0gSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsSXNFbXB0eSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eShpdGVtc1tpXS52YWx1ZSkpIHJldHVybiBpdGVtc1tpXTtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoaXRlbXNbaV0udmFsdWUsIHZhbCkpIHJldHVybiBpdGVtc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRUZXh0T3JIdG1sQnlWYWx1ZShcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICB2YWw6IGFueVxuICApOiBzdHJpbmcge1xuICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKGl0ZW1zLCB2YWwpO1xuICAgIHJldHVybiBpdGVtICE9PSBudWxsID8gaXRlbS5sb2NUZXh0LnRleHRPckh0bWwgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgbG9jU3Ryc0NoYW5nZWQoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtc1tpXS5sb2NUZXh0LnN0ckNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBydW5Db25kaXRpb25zRm9ySXRlbXMoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgZmlsdGVyZWRJdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBydW5uZXI6IENvbmRpdGlvblJ1bm5lcixcbiAgICB2YWx1ZXM6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBhbnksXG4gICAgdXNlSXRlbUV4cHJlc3Npb246IGJvb2xlYW4gPSB0cnVlXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zQ29yZShcbiAgICAgIGl0ZW1zLFxuICAgICAgZmlsdGVyZWRJdGVtcyxcbiAgICAgIHJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICB0cnVlLFxuICAgICAgdXNlSXRlbUV4cHJlc3Npb25cbiAgICApO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgcnVuRW5hYmxlZENvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBydW5uZXI6IENvbmRpdGlvblJ1bm5lcixcbiAgICB2YWx1ZXM6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBhbnksXG4gICAgb25JdGVtQ2FsbEJhY2s/OiAoaXRlbTogSXRlbVZhbHVlKSA9PiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zQ29yZShcbiAgICAgIGl0ZW1zLFxuICAgICAgbnVsbCxcbiAgICAgIHJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgICBvbkl0ZW1DYWxsQmFja1xuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgcnVuQ29uZGl0aW9uc0Zvckl0ZW1zQ29yZShcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBmaWx0ZXJlZEl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHJ1bm5lcjogQ29uZGl0aW9uUnVubmVyLFxuICAgIHZhbHVlczogYW55LFxuICAgIHByb3BlcnRpZXM6IGFueSxcbiAgICBpc1Zpc2libGU6IGJvb2xlYW4sXG4gICAgdXNlSXRlbUV4cHJlc3Npb246IGJvb2xlYW4gPSB0cnVlLFxuICAgIG9uSXRlbUNhbGxCYWNrPzogKGl0ZW06IEl0ZW1WYWx1ZSkgPT4gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlcykge1xuICAgICAgdmFsdWVzID0ge307XG4gICAgfVxuICAgIHZhciBpdGVtVmFsdWUgPSB2YWx1ZXNbXCJpdGVtXCJdO1xuICAgIHZhciBjaG9pY2VWYWx1ZSA9IHZhbHVlc1tcImNob2ljZVwiXTtcbiAgICB2YXIgaGFzQ2hhbmRlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICB2YWx1ZXNbXCJpdGVtXCJdID0gaXRlbS52YWx1ZTtcbiAgICAgIHZhbHVlc1tcImNob2ljZVwiXSA9IGl0ZW0udmFsdWU7XG4gICAgICB2YXIgaXRlbVJ1bm5lciA9XG4gICAgICAgIHVzZUl0ZW1FeHByZXNzaW9uICYmICEhaXRlbS5nZXRDb25kaXRpb25SdW5uZXJcbiAgICAgICAgICA/IGl0ZW0uZ2V0Q29uZGl0aW9uUnVubmVyKGlzVmlzaWJsZSlcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgaWYgKCFpdGVtUnVubmVyKSB7XG4gICAgICAgIGl0ZW1SdW5uZXIgPSBydW5uZXI7XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKGl0ZW1SdW5uZXIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBpdGVtUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbHVlICYmICEhb25JdGVtQ2FsbEJhY2spIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvbkl0ZW1DYWxsQmFjayhpdGVtKTtcbiAgICAgIH1cbiAgICAgIGlmICghIWZpbHRlcmVkSXRlbXMgJiYgbmV3VmFsdWUpIHtcbiAgICAgICAgZmlsdGVyZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgdmFyIG9sZFZhbHVlID0gaXNWaXNpYmxlID8gaXRlbS5pc1Zpc2libGUgOiBpdGVtLmlzRW5hYmxlZDtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPSBvbGRWYWx1ZSkge1xuICAgICAgICBoYXNDaGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICAgIGlmICghIWl0ZW0uc2V0SXNWaXNpYmxlKSBpdGVtLnNldElzVmlzaWJsZShuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCEhaXRlbS5zZXRJc0VuYWJsZWQpIGl0ZW0uc2V0SXNFbmFibGVkKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXRlbVZhbHVlKSB7XG4gICAgICB2YWx1ZXNbXCJpdGVtXCJdID0gaXRlbVZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVzW1wiaXRlbVwiXTtcbiAgICB9XG4gICAgaWYgKGNob2ljZVZhbHVlKSB7XG4gICAgICB2YWx1ZXNbXCJjaG9pY2VcIl0gPSBjaG9pY2VWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlc1tcImNob2ljZVwiXTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5kZWQ7XG4gIH1cbiAgcHVibGljIG93bmVyUHJvcGVydHlOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICAvL3ByaXZhdGUgaXRlbVZhbHVlOiBhbnk7XG4gIHByaXZhdGUgbG9jVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcbiAgcHJpdmF0ZSBpc1Zpc2libGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgdmlzaWJsZUNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGVuYWJsZUNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbHVlOiBhbnksXG4gICAgdGV4dDogc3RyaW5nID0gbnVsbCxcbiAgICBwcm90ZWN0ZWQgdHlwZU5hbWUgPSBcIml0ZW12YWx1ZVwiXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcobnVsbCwgdHJ1ZSk7XG4gICAgdGhpcy5sb2NUZXh0VmFsdWUub25TdHJDaGFuZ2VkID0gKG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInRleHRcIiwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMubG9jVGV4dFZhbHVlLm9uR2V0VGV4dENhbGxiYWNrID0gKHR4dCkgPT4ge1xuICAgICAgcmV0dXJuIHR4dFxuICAgICAgICA/IHR4dFxuICAgICAgICA6ICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLnZhbHVlKVxuICAgICAgICA/IHRoaXMudmFsdWUudG9TdHJpbmcoKVxuICAgICAgICA6IG51bGw7XG4gICAgfTtcbiAgICBpZiAodGV4dCkgdGhpcy5sb2NUZXh0LnRleHQgPSB0ZXh0O1xuICAgIGlmICghIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5zZXREYXRhKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRUeXBlKCkgIT0gXCJpdGVtdmFsdWVcIikge1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllcyh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cblxuICBwdWJsaWMgb25DcmVhdGluZygpOiBhbnkge31cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnR5cGVOYW1lID8gdGhpcy50eXBlTmFtZSA6IFwiaXRlbXZhbHVlXCI7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyICYmICEhKDxhbnk+dGhpcy5sb2NPd25lcilbXCJnZXRTdXJ2ZXlcIl1cbiAgICAgID8gKDxhbnk+dGhpcy5sb2NPd25lcikuZ2V0U3VydmV5KClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmxvY1RleHQgJiYgdGhpcy5sb2NUZXh0LmxvY2FsZSkgfHwgXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHRWYWx1ZTtcbiAgfVxuICBzZXRMb2NUZXh0KGxvY1RleHQ6IExvY2FsaXphYmxlU3RyaW5nKSB7XG4gICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBsb2NUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jT3duZXIoKTogSUxvY2FsaXphYmxlT3duZXIge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQub3duZXI7XG4gIH1cbiAgcHVibGljIHNldCBsb2NPd25lcih2YWx1ZTogSUxvY2FsaXphYmxlT3duZXIpIHtcbiAgICB0aGlzLmxvY1RleHQub3duZXIgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHZhciB0ZXh0OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgIHZhciBzdHI6IHN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB2YXIgaW5kZXggPSBzdHIuaW5kZXhPZihzZXR0aW5ncy5pdGVtVmFsdWVTZXBhcmF0b3IpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBzdHIuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB0ZXh0ID0gc3RyLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG5ld1ZhbHVlKTtcbiAgICBpZiAoISF0ZXh0KSB7XG4gICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5wdXJlVGV4dCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHB1cmVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5wdXJlVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHB1cmVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQuY2FsY3VsYXRlZFRleHQ7IC8vVE9ETzogaXQgd2lsbCBiZSBjb3JyZWN0IHRvIHVzZSB0aGlzLmxvY1RleHQudGV4dCwgaG93ZXZlciBpdCB3b3VsZCByZXF1aXJlIGEgbG90IG9mIHJld3JpdGluZyBpbiBDcmVhdG9yXG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KG5ld1RleHQ6IHN0cmluZykge1xuICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gbmV3VGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhbGN1bGF0ZWRUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQuY2FsY3VsYXRlZFRleHQ7XG4gIH1cbiAgcHVibGljIGdldERhdGEoKTogYW55IHtcbiAgICB2YXIganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgaWYgKCEhanNvbltcInZhbHVlXCJdICYmICEhanNvbltcInZhbHVlXCJdW1wicG9zXCJdKSB7XG4gICAgICBkZWxldGUganNvbltcInZhbHVlXCJdW1wicG9zXCJdO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoanNvbikubGVuZ3RoID09IDEgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KGpzb25bXCJ2YWx1ZVwiXSkpXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgdG9KU09OKCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBwcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzKHRoaXMuZ2V0VHlwZSgpKTtcbiAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy5sZW5ndGggPT0gMCkge1xuICAgICAgcHJvcGVydGllcyA9IFNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllcyhcIml0ZW12YWx1ZVwiKTtcbiAgICB9XG4gICAgdmFyIGpzb09iaiA9IG5ldyBKc29uT2JqZWN0KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBqc29PYmoudmFsdWVUb0pzb24odGhpcywgcmVzLCBwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0RGF0YSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHZhciBqc29uID0gdmFsdWU7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGpzb24gPSAoPEJhc2U+dmFsdWUpLnRvSlNPTigpO1xuICAgICAgfVxuICAgICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmxvY1RleHQuc3RyQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldElzVmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVmlzaWJsZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldElzRW5hYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyh0aGlzLmxvY1RleHRWYWx1ZSwgbG9jYWxlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKG5hbWUgPT09IFwidmFsdWVcIiAmJiAhdGhpcy5oYXNUZXh0KSB7XG4gICAgICB0aGlzLmxvY1RleHQub25DaGFuZ2VkKCk7XG4gICAgfVxuICAgIHZhciBmdW5jTmFtZSA9IFwiaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkXCI7XG4gICAgaWYgKCF0aGlzLmxvY093bmVyIHx8ICEoPGFueT50aGlzLmxvY093bmVyKVtmdW5jTmFtZV0pIHJldHVybjtcbiAgICAoPGFueT50aGlzLmxvY093bmVyKVtmdW5jTmFtZV0odGhpcywgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uUnVubmVyKGlzVmlzaWJsZTogYm9vbGVhbikge1xuICAgIGlmIChpc1Zpc2libGUpIHJldHVybiB0aGlzLmdldFZpc2libGVDb25kaXRpb25SdW5uZXIoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRFbmFibGVDb25kaXRpb25SdW5uZXIoKTtcbiAgfVxuICBwcml2YXRlIGdldFZpc2libGVDb25kaXRpb25SdW5uZXIoKTogQ29uZGl0aW9uUnVubmVyIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lcilcbiAgICAgIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy52aXNpYmxlSWYpO1xuICAgIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lcjtcbiAgfVxuICBwcml2YXRlIGdldEVuYWJsZUNvbmRpdGlvblJ1bm5lcigpOiBDb25kaXRpb25SdW5uZXIge1xuICAgIGlmICghdGhpcy5lbmFibGVJZikgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lcilcbiAgICAgIHRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmVuYWJsZUlmKTtcbiAgICB0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5lbmFibGVJZjtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVDb25kaXRpb25SdW5uZXI7XG4gIH1cbiAgcHVibGljIG9yaWdpbmFsSXRlbTogYW55O1xufVxuXG5CYXNlLmNyZWF0ZUl0ZW1WYWx1ZSA9IGZ1bmN0aW9uKHNvdXJjZTogYW55LCB0eXBlPzogc3RyaW5nKTogYW55IHtcbiAgdmFyIGl0ZW0gPSBudWxsO1xuICBpZiAoISF0eXBlKSB7XG4gICAgaXRlbSA9IEpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3ModHlwZSwge30pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgaXRlbSA9IG5ldyBJdGVtVmFsdWUobnVsbCwgdW5kZWZpbmVkLCBzb3VyY2UuZ2V0VHlwZSgpKTtcbiAgfSBlbHNlIHtcbiAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcbiAgfVxuICBpdGVtLnNldERhdGEoc291cmNlKTtcbiAgcmV0dXJuIGl0ZW07XG59O1xuQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkID0gZnVuY3Rpb24oYXJyOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZChhcnIpO1xufTtcbkpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odmFsOiBhbnkpOiBhbnkge1xuICB2YXIgcmVzID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcbiAgSXRlbVZhbHVlLnNldERhdGEocmVzLCB2YWwgfHwgW10pO1xuICByZXR1cm4gcmVzO1xufTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpdGVtdmFsdWVcIixcbiAgW1xuICAgIFwiIXZhbHVlXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGV4dFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInZpc2libGVJZjpjb25kaXRpb25cIiwgc2hvd01vZGU6IFwiZm9ybVwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJlbmFibGVJZjpjb25kaXRpb25cIixcbiAgICAgIHNob3dNb2RlOiBcImZvcm1cIixcbiAgICAgIHZpc2libGVJZjogKG9iajogSXRlbVZhbHVlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiAhb2JqIHx8IG9iai5vd25lclByb3BlcnR5TmFtZSAhPT0gXCJyYXRlVmFsdWVzXCI7XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gICh2YWx1ZTogYW55KSA9PiBuZXcgSXRlbVZhbHVlKHZhbHVlKVxuKTtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJUHJvcGVydHlEZWNvcmF0b3JPcHRpb25zIHtcbiAgZGVmYXVsdFZhbHVlPzogYW55O1xuICBkZWZhdWx0U291cmNlPzogc3RyaW5nO1xuICBsb2NhbGl6YWJsZT86XG4gICAgfCB7IG5hbWU6IHN0cmluZzsgb25HZXRUZXh0Q2FsbGJhY2s/OiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyB9XG4gICAgfCBib29sZWFuO1xuICBvblNldD86ICh2YWw6IGFueSwgdGFyZ2V0OiBhbnkpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUxvY1N0cmluZyhcbiAgdGFyZ2V0OiBhbnksXG4gIG9wdGlvbnM6IElQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMsXG4gIGtleTogc3RyaW5nXG4pIHtcbiAgbGV0IGxvY1N0cmluZyA9IHRhcmdldC5nZXRMb2NhbGl6YWJsZVN0cmluZyhrZXkpO1xuICBpZiAoIWxvY1N0cmluZykge1xuICAgIGxvY1N0cmluZyA9IHRhcmdldC5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhrZXksIHRhcmdldCwgdHJ1ZSk7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMubG9jYWxpemFibGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBvcHRpb25zLmxvY2FsaXphYmxlLm9uR2V0VGV4dENhbGxiYWNrID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIGxvY1N0cmluZy5vbkdldFRleHRDYWxsYmFjayA9IG9wdGlvbnMubG9jYWxpemFibGUub25HZXRUZXh0Q2FsbGJhY2s7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eShvcHRpb25zPzogSVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmxvY2FsaXphYmxlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKCEhb3B0aW9ucykge1xuICAgICAgICAgICAgaWYob3B0aW9ucy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihvcHRpb25zLmRlZmF1bHRTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpc1tvcHRpb25zLmRlZmF1bHRTb3VyY2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbDogYW55KSB7XG4gICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgICBpZiAoISFvcHRpb25zICYmIG9wdGlvbnMub25TZXQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub25TZXQodmFsLCB0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZW5zdXJlTG9jU3RyaW5nKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KGtleSkgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgICAgICB0aGlzW29wdGlvbnMuZGVmYXVsdFNvdXJjZV1cbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbDogYW55KSB7XG4gICAgICAgICAgZW5zdXJlTG9jU3RyaW5nKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoa2V5LCB2YWwpO1xuICAgICAgICAgIGlmICghIW9wdGlvbnMgJiYgb3B0aW9ucy5vblNldCkge1xuICAgICAgICAgICAgb3B0aW9ucy5vblNldCh2YWwsIHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIG9wdGlvbnMubG9jYWxpemFibGUgPT09IHRydWVcbiAgICAgICAgICA/IFwibG9jXCIgKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSlcbiAgICAgICAgICA6IG9wdGlvbnMubG9jYWxpemFibGUubmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBlbnN1cmVMb2NTdHJpbmcodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKGtleSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFycmF5UHJvcGVydHlEZWNvcmF0b3JPcHRpb25zIHtcbiAgb25QdXNoPzogYW55O1xuICBvblJlbW92ZT86IGFueTtcbiAgb25TZXQ/OiAodmFsOiBhbnksIHRhcmdldDogYW55KSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVBcnJheShcbiAgdGFyZ2V0OiBhbnksXG4gIG9wdGlvbnM6IElBcnJheVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucyxcbiAga2V5OiBzdHJpbmdcbikge1xuICB0YXJnZXQuZW5zdXJlQXJyYXkoXG4gICAga2V5LFxuICAgICEhb3B0aW9ucyA/IG9wdGlvbnMub25QdXNoIDogbnVsbCxcbiAgICAhIW9wdGlvbnMgPyBvcHRpb25zLm9uUmVtb3ZlIDogbnVsbFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBcnJheShvcHRpb25zPzogSUFycmF5UHJvcGVydHlEZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGVuc3VyZUFycmF5KHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5KTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbDogYW55KSB7XG4gICAgICAgIGVuc3VyZUFycmF5KHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgIGNvbnN0IGFyciA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICBpZiAodmFsID09PSBhcnIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFycikge1xuICAgICAgICAgIGFyci5zcGxpY2UoMCwgYXJyLmxlbmd0aCwgLi4uKHZhbCB8fCBbXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhb3B0aW9ucyAmJiBvcHRpb25zLm9uU2V0KSB7XG4gICAgICAgICAgb3B0aW9ucy5vblNldCh2YWwsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9wZXJ0eSBvZiBhIHN1cnZleSBlbGVtZW50IChwYWdlLCBwYW5lbCwgcXVlc3Rpb25zLCBhbmQgZXRjKS5cbiAqIEBzZWUgYWRkUHJvcGVydHlcbiAqIEBzZWUgcmVtb3ZlUHJvcGVydHlcbiAqIEBzZWUgW0FkZCBQcm9wZXJ0aWVzXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vU3VydmV5LUNyZWF0b3IjYWRkcHJvcGVydGllcylcbiAqIEBzZWUgW1JlbW92ZSBQcm9wZXJ0aWVzXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vU3VydmV5LUNyZWF0b3IjcmVtb3ZlcHJvcGVydGllcylcbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25PYmplY3RQcm9wZXJ0eSBpbXBsZW1lbnRzIElPYmplY3Qge1xuICBwdWJsaWMgc3RhdGljIGdldEl0ZW1WYWx1ZXNEZWZhdWx0VmFsdWU6ICh2YWw6IGFueSkgPT4gYW55O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIHByaXZhdGUgc3RhdGljIEluZGV4ID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgbWVyZ2FibGVWYWx1ZXMgPSBbXG4gICAgXCJ0eXBlVmFsdWVcIixcbiAgICBcImNob2ljZXNWYWx1ZVwiLFxuICAgIFwiYmFzZVZhbHVlXCIsXG4gICAgXCJyZWFkT25seVZhbHVlXCIsXG4gICAgXCJ2aXNpYmxlVmFsdWVcIixcbiAgICBcImlzU2VyaWFsaXphYmxlXCIsXG4gICAgXCJpc0xpZ2h0U2VyaWFsaXphYmxlXCIsXG4gICAgXCJpc0N1c3RvbVwiLFxuICAgIFwiaXNCaW5kYWJsZVwiLFxuICAgIFwiaXNVbmlxdWVcIixcbiAgICBcImlzRHluYW1pY0Nob2ljZXNcIixcbiAgICBcImlzTG9jYWxpemFibGVWYWx1ZVwiLFxuICAgIFwiY2xhc3NOYW1lXCIsXG4gICAgXCJhbHRlcm5hdGl2ZU5hbWVcIixcbiAgICBcImxheW91dFwiLFxuICAgIFwiY2xhc3NOYW1lUGFydFwiLFxuICAgIFwiYmFzZUNsYXNzTmFtZVwiLFxuICAgIFwiZGVmYXVsdFZhbHVlXCIsXG4gICAgXCJzZXJpYWxpemF0aW9uUHJvcGVydHlcIixcbiAgICBcIm9uR2V0VmFsdWVcIixcbiAgICBcIm9uU2V0VmFsdWVcIixcbiAgICBcImRpc3BsYXlOYW1lXCIsXG4gICAgXCJjYXRlZ29yeVwiLFxuICAgIFwiY2F0ZWdvcnlJbmRleFwiLFxuICAgIFwidmlzaWJsZUluZGV4XCIsXG4gICAgXCJuZXh0VG9Qcm9wZXJ0eVwiLFxuICAgIFwic2hvd01vZGVcIixcbiAgICBcImRlcGVuZGVkUHJvcGVydGllc1wiLFxuICAgIFwidmlzaWJsZUlmXCIsXG4gICAgXCJvblByb3BlcnR5RWRpdG9yVXBkYXRlXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1heFZhbHVlXCIsXG4gICAgXCJtaW5WYWx1ZVwiLFxuICAgIFwiZGF0YUxpc3RWYWx1ZVwiLFxuICBdO1xuICBwcml2YXRlIGlkVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBjbGFzc0luZm9WYWx1ZTogSnNvbk1ldGFkYXRhQ2xhc3M7XG4gIHByaXZhdGUgdHlwZVZhbHVlOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8YW55PiA9IG51bGw7XG4gIHByaXZhdGUgYmFzZVZhbHVlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGlzUmVxdWlyZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGlzVW5pcXVlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkT25seVZhbHVlOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdmlzaWJsZVZhbHVlOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNMb2NhbGl6YWJsZVZhbHVlOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hvaWNlc2Z1bmM6IChvYmo6IGFueSwgY2hvaWNlc0NhbGxiYWNrOiBhbnkpID0+IEFycmF5PGFueT4gPSBudWxsO1xuICBwcml2YXRlIGRlcGVuZGVkUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBpc1NlcmlhbGl6YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBpc0xpZ2h0U2VyaWFsaXphYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGlzQ3VzdG9tOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0R5bmFtaWNDaG9pY2VzOiBib29sZWFuID0gZmFsc2U7IC8vVE9ETyBvYnNvbGV0ZSwgdXNlIGRlcGVuZHNPbiBhdHRyaWJ1dGVcbiAgcHVibGljIGlzQmluZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGFsdGVybmF0aXZlTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGNsYXNzTmFtZVBhcnQ6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgZGVmYXVsdFZhbHVlVmFsdWU6IGFueSA9IG51bGw7XG4gIHB1YmxpYyBzZXJpYWxpemF0aW9uUHJvcGVydHk6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBkaXNwbGF5TmFtZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGNhdGVnb3J5OiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgY2F0ZWdvcnlJbmRleDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyB2aXNpYmxlSW5kZXg6IG51bWJlciA9IC0xO1xuICBwdWJsaWMgbmV4dFRvUHJvcGVydHk6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBzaG93TW9kZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIG1heExlbmd0aDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBtYXhWYWx1ZTogYW55O1xuICBwdWJsaWMgbWluVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBkYXRhTGlzdFZhbHVlOiBBcnJheTxzdHJpbmc+O1xuICBwdWJsaWMgbGF5b3V0OiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgb25HZXRWYWx1ZTogKG9iajogYW55KSA9PiBhbnkgPSBudWxsO1xuICBwdWJsaWMgb25TZXRWYWx1ZTogKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkgPT4gYW55ID0gbnVsbDtcbiAgcHVibGljIHZpc2libGVJZjogKG9iajogYW55KSA9PiBib29sZWFuID0gbnVsbDtcbiAgcHVibGljIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IChvYmo6IGFueSwgcHJvcEVkaXRvcjogYW55KSA9PiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xhc3NJbmZvOiBKc29uTWV0YWRhdGFDbGFzcyxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLmNsYXNzSW5mb1ZhbHVlID0gY2xhc3NJbmZvO1xuICAgIHRoaXMuaXNSZXF1aXJlZFZhbHVlID0gaXNSZXF1aXJlZDtcbiAgICB0aGlzLmlkVmFsdWUgPSBKc29uT2JqZWN0UHJvcGVydHkuSW5kZXgrKztcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsYXNzSW5mbygpOiBKc29uTWV0YWRhdGFDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NJbmZvVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHlwZVZhbHVlID8gdGhpcy50eXBlVmFsdWUgOiBcInN0cmluZ1wiO1xuICB9XG4gIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSBcIml0ZW12YWx1ZXNcIikgdmFsdWUgPSBcIml0ZW12YWx1ZVtdXCI7XG4gICAgdGhpcy50eXBlVmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy50eXBlVmFsdWUuaW5kZXhPZihcIltdXCIpID09PSB0aGlzLnR5cGVWYWx1ZS5sZW5ndGggLSAyKSB7XG4gICAgICB0aGlzLmlzQXJyYXkgPSB0cnVlO1xuICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLnR5cGVWYWx1ZS5zdWJzdHIoMCwgdGhpcy50eXBlVmFsdWUubGVuZ3RoIC0gMik7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBpc0FycmF5ID0gZmFsc2U7XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNSZXF1aXJlZFZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNVbmlxdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNVbmlxdWVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzVW5pcXVlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNVbmlxdWVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RvVXNlR2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub25HZXRWYWx1ZSB8fCB0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSB0aGlzLmRlZmF1bHRWYWx1ZVZhbHVlO1xuICAgIGlmIChcbiAgICAgICEhSnNvbk9iamVjdFByb3BlcnR5LmdldEl0ZW1WYWx1ZXNEZWZhdWx0VmFsdWUgJiZcbiAgICAgIEpzb25PYmplY3QubWV0YURhdGEuaXNEZXNjZW5kYW50T2YodGhpcy5jbGFzc05hbWUsIFwiaXRlbXZhbHVlXCIpXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSBKc29uT2JqZWN0UHJvcGVydHkuZ2V0SXRlbVZhbHVlc0RlZmF1bHRWYWx1ZShcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVWYWx1ZSB8fCBbXVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZShuZXdWYWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwdWJsaWMgaXNEZWZhdWx0VmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpKVxuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlID09IHZhbHVlO1xuICAgIHJldHVybiAoXG4gICAgICAodmFsdWUgPT09IGZhbHNlICYmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwic3dpdGNoXCIpKSB8fFxuICAgICAgdmFsdWUgPT09IFwiXCIgfHxcbiAgICAgIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlKG9iajogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5vbkdldFZhbHVlKSByZXR1cm4gdGhpcy5vbkdldFZhbHVlKG9iaik7XG4gICAgaWYgKHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5ICYmICEhb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XSlcbiAgICAgIHJldHVybiBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLmdldEpzb24oKTtcbiAgICByZXR1cm4gb2JqW3RoaXMubmFtZV07XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnR5VmFsdWUob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzTG9jYWxpemFibGUpIHtcbiAgICAgIHJldHVybiAhIW9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV1cbiAgICAgICAgPyBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnRleHRcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShvYmopO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG9Vc2VTZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vblNldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5O1xuICB9XG4gIHB1YmxpYyBzZXRWYWx1ZShvYmo6IGFueSwgdmFsdWU6IGFueSwganNvbkNvbnY6IEpzb25PYmplY3QpIHtcbiAgICBpZiAodGhpcy5vblNldFZhbHVlKSB7XG4gICAgICB0aGlzLm9uU2V0VmFsdWUob2JqLCB2YWx1ZSwganNvbkNvbnYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiYgISFvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldKVxuICAgICAgICBvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldLnNldEpzb24odmFsdWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy50eXBlID09IFwiYm9vbGVhblwiIHx8IHRoaXMudHlwZSA9PSBcInN3aXRjaFwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmpbdGhpcy5uYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0T2JqVHlwZShvYmpUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY2xhc3NOYW1lUGFydCkgcmV0dXJuIG9ialR5cGU7XG4gICAgcmV0dXJuIG9ialR5cGUucmVwbGFjZSh0aGlzLmNsYXNzTmFtZVBhcnQsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjbGFzc05hbWUpIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzLmNsYXNzTmFtZVBhcnQgJiYgY2xhc3NOYW1lLmluZGV4T2YodGhpcy5jbGFzc05hbWVQYXJ0KSA8IDBcbiAgICAgID8gY2xhc3NOYW1lICsgdGhpcy5jbGFzc05hbWVQYXJ0XG4gICAgICA6IGNsYXNzTmFtZTtcbiAgfVxuICAvKipcbiAgICogRGVwcmljYXRlZCwgcGxlYXNlIHVzZSBnZXRDaG9pY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlcyhudWxsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Nob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jaG9pY2VzVmFsdWUgfHwgISF0aGlzLmNob2ljZXNmdW5jO1xuICB9XG4gIHB1YmxpYyBnZXRDaG9pY2VzKG9iajogYW55LCBjaG9pY2VzQ2FsbGJhY2s6IGFueSA9IG51bGwpOiBBcnJheTxhbnk+IHtcbiAgICBpZiAodGhpcy5jaG9pY2VzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc1ZhbHVlO1xuICAgIGlmICh0aGlzLmNob2ljZXNmdW5jICE9IG51bGwpIHJldHVybiB0aGlzLmNob2ljZXNmdW5jKG9iaiwgY2hvaWNlc0NhbGxiYWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0Q2hvaWNlcyhcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICB2YWx1ZUZ1bmM6IChvYmo6IGFueSkgPT4gQXJyYXk8YW55PiA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5jaG9pY2VzVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNob2ljZXNmdW5jID0gdmFsdWVGdW5jO1xuICB9XG4gIHB1YmxpYyBnZXRCYXNlVmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYmFzZVZhbHVlKSByZXR1cm4gXCJcIjtcbiAgICBpZiAodHlwZW9mIHRoaXMuYmFzZVZhbHVlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRoaXMuYmFzZVZhbHVlKCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRCYXNlVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLmJhc2VWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5VmFsdWUgIT0gbnVsbCA/IHRoaXMucmVhZE9ubHlWYWx1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZWFkT25seVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBpc1Zpc2libGUobGF5b3V0OiBzdHJpbmcsIG9iajogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGxldCBpc0xheW91dCA9ICF0aGlzLmxheW91dCB8fCB0aGlzLmxheW91dCA9PSBsYXlvdXQ7XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgIWlzTGF5b3V0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCEhdGhpcy52aXNpYmxlSWYgJiYgISFvYmopIHJldHVybiB0aGlzLnZpc2libGVJZihvYmopO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlVmFsdWUgIT0gbnVsbCA/IHRoaXMudmlzaWJsZVZhbHVlIDogdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy52aXNpYmxlVmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBpc0xvY2FsaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSAhPSBudWxsID8gdGhpcy5pc0xvY2FsaXphYmxlVmFsdWUgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzTG9jYWxpemFibGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0xvY2FsaXphYmxlVmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBkYXRhTGlzdCgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFMaXN0VmFsdWUpID8gdGhpcy5kYXRhTGlzdFZhbHVlIDogW107XG4gIH1cbiAgcHVibGljIHNldCBkYXRhTGlzdCh2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmRhdGFMaXN0VmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIG1lcmdlV2l0aChwcm9wOiBKc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICB2YXIgdmFsdWVzTmFtZXMgPSBKc29uT2JqZWN0UHJvcGVydHkubWVyZ2FibGVWYWx1ZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXNOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tZXJnZVZhbHVlKHByb3AsIHZhbHVlc05hbWVzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFkZERlcGVuZGVkUHJvcGVydHkobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRlcGVuZGVkUHJvcGVydGllcykge1xuICAgICAgdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzLmluZGV4T2YobmFtZSkgPCAwKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUHJvcGVydGllcy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGVwZW5kZWRQcm9wZXJ0aWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiAhIXRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzID8gdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgOiBbXTtcbiAgfVxuICBwdWJsaWMgc2NoZW1hVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY2xhc3NOYW1lKSByZXR1cm4gXCJhcnJheVwiO1xuICAgIGlmICghIXRoaXMuYmFzZUNsYXNzTmFtZSkgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICBpZiAodGhpcy50eXBlID09IFwiYm9vbGVhblwiIHx8IHRoaXMudHlwZSA9PSBcIm51bWJlclwiKSByZXR1cm4gdGhpcy50eXBlO1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG4gIHByaXZhdGUgbWVyZ2VWYWx1ZShwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXNbdmFsdWVOYW1lXSA9PSBudWxsICYmIHByb3BbdmFsdWVOYW1lXSAhPSBudWxsKSB7XG4gICAgICB0aGlzW3ZhbHVlTmFtZV0gPSBwcm9wW3ZhbHVlTmFtZV07XG4gICAgfVxuICB9XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ge1xuICBwcml2YXRlIHN0YXRpYyBwcm9wZXJ0aWVzOiBJT2JqZWN0ID0ge307XG4gIHByaXZhdGUgc3RhdGljIHBhcmVudENsYXNzZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgcHVibGljIHN0YXRpYyBhZGRQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHk6IGFueSkge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgaWYgKCFwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICBwcm9wc1tjbGFzc05hbWVdID0gW107XG4gICAgfVxuICAgIHByb3BzW2NsYXNzTmFtZV0ucHVzaChwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyByZW1vdmVQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIGlmICghcHJvcHNbY2xhc3NOYW1lXSkgcmV0dXJuO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbY2xhc3NOYW1lXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLm5hbWUgPT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHByb3BzW2NsYXNzTmFtZV0uc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBhZGRDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgcGFyZW50Q2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAocGFyZW50Q2xhc3NOYW1lKSB7XG4gICAgICBwYXJlbnRDbGFzc05hbWUgPSBwYXJlbnRDbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucGFyZW50Q2xhc3Nlc1tjbGFzc05hbWVdID0gcGFyZW50Q2xhc3NOYW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydGllcyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIHdoaWxlIChjbGFzc05hbWUpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbY2xhc3NOYW1lXTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjbGFzc05hbWUgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKG9iajogYW55KSB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm47XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBvYmouZ2V0VHlwZSgpKTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzQ29yZShvYmo6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIGlmIChwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzSW5PYmoob2JqLCBwcm9wc1tjbGFzc05hbWVdKTtcbiAgICB9XG4gICAgdmFyIHBhcmVudENsYXNzID0gQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucGFyZW50Q2xhc3Nlc1tjbGFzc05hbWVdO1xuICAgIGlmIChwYXJlbnRDbGFzcykge1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBwYXJlbnRDbGFzcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXNJbk9iaihvYmo6IGFueSwgcHJvcGVydGllczogYW55W10pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnR5SW5PYmoob2JqLCBwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUHJvcGVydHlJbk9iaihvYmo6IGFueSwgcHJvcDogSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgaWYgKG9ialtwcm9wLm5hbWVdIHx8IG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgcHJvcC5pc0xvY2FsaXphYmxlICYmXG4gICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJlxuICAgICAgIW9ialtwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0gJiZcbiAgICAgIG9iai5jcmVhdGVDdXN0b21Mb2NhbGl6YWJsZU9ialxuICAgICkge1xuICAgICAgb2JqLmNyZWF0ZUN1c3RvbUxvY2FsaXphYmxlT2JqKHByb3AubmFtZSk7XG4gICAgICB2YXIgbG9jRGVzYyA9IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLmdldExvY2FsaXphYmxlU3RyaW5nKHByb3AubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHksIGxvY0Rlc2MpO1xuICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQocHJvcC5uYW1lLCBwcm9wLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odjogYW55KSB7XG4gICAgICAgICAgb2JqLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChwcm9wLm5hbWUsIHYpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AubmFtZSwgZGVzYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wLmRlZmF1bHRWYWx1ZTtcbiAgICAgIHZhciBpc0FycmF5UHJvcCA9IGZhbHNlO1xuICAgICAgaWYgKHR5cGVvZiBvYmouY3JlYXRlTmV3QXJyYXkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZihwcm9wLmNsYXNzTmFtZSwgXCJpdGVtdmFsdWVcIikpIHtcbiAgICAgICAgICBvYmouY3JlYXRlTmV3QXJyYXkocHJvcC5uYW1lLCBmdW5jdGlvbihpdGVtOiBhbnkpIHtcbiAgICAgICAgICAgIGl0ZW0ubG9jT3duZXIgPSBvYmo7XG4gICAgICAgICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlzQXJyYXlQcm9wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvL0l0IGlzIGEgc2ltcGxlIGFycmF5IHByb3BlcnR5XG4gICAgICAgIGlmIChwcm9wLnR5cGUgPT09IFwibXVsdGlwbGV2YWx1ZXNcIikge1xuICAgICAgICAgIG9iai5jcmVhdGVOZXdBcnJheShwcm9wLm5hbWUpO1xuICAgICAgICAgIGlzQXJyYXlQcm9wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheVByb3ApIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgICBvYmouc2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghIW9iai5nZXRQcm9wZXJ0eVZhbHVlICYmICEhb2JqLnNldFByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFwcm9wLm9uR2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3Aub25HZXRWYWx1ZShvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24odjogYW55KSB7XG4gICAgICAgICAgICBpZiAoISFwcm9wLm9uU2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgcHJvcC5vblNldFZhbHVlKG9iaiwgdiwgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmouc2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUsIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AubmFtZSwgZGVzYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKc29uTWV0YWRhdGFDbGFzcyB7XG4gIHN0YXRpYyByZXF1aXJlZFN5bWJvbCA9IFwiIVwiO1xuICBzdGF0aWMgdHlwZVN5bWJvbCA9IFwiOlwiO1xuICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+ID0gbnVsbDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxhbnk+LFxuICAgIHB1YmxpYyBjcmVhdG9yOiAoanNvbj86IGFueSkgPT4gYW55ID0gbnVsbCxcbiAgICBwdWJsaWMgcGFyZW50TmFtZTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0aGlzLnBhcmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFyZW50TmFtZSA9IHRoaXMucGFyZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uYWRkQ2xhc3MobmFtZSwgdGhpcy5wYXJlbnROYW1lKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gdGhpcy5jcmVhdGVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldKTtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZmluZChuYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucHJvcGVydGllc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVByb3BlcnR5KHByb3BJbmZvOiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSB0eXBlb2YgcHJvcEluZm8gPT09IFwic3RyaW5nXCIgPyBwcm9wSW5mbyA6IHByb3BJbmZvLm5hbWU7XG4gICAgaWYgKCFwcm9wZXJ0eU5hbWUpIHJldHVybjtcbiAgICB2YXIgcHJvcGVydHlUeXBlID0gbnVsbDtcbiAgICB2YXIgdHlwZUluZGV4ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoSnNvbk1ldGFkYXRhQ2xhc3MudHlwZVN5bWJvbCk7XG4gICAgaWYgKHR5cGVJbmRleCA+IC0xKSB7XG4gICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHR5cGVJbmRleCArIDEpO1xuICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCB0eXBlSW5kZXgpO1xuICAgIH1cbiAgICB2YXIgaXNSZXF1aXJlZCA9XG4gICAgICB0aGlzLmdldElzUHJvcGVydHlOYW1lUmVxdWlyZWQocHJvcGVydHlOYW1lKSB8fCAhIXByb3BJbmZvLmlzUmVxdWlyZWQ7XG4gICAgcHJvcGVydHlOYW1lID0gdGhpcy5nZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTtcbiAgICB2YXIgcHJvcCA9IG5ldyBKc29uT2JqZWN0UHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBpc1JlcXVpcmVkKTtcbiAgICBpZiAocHJvcGVydHlUeXBlKSB7XG4gICAgICBwcm9wLnR5cGUgPSBwcm9wZXJ0eVR5cGU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJvcEluZm8gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChwcm9wSW5mby50eXBlKSB7XG4gICAgICAgIHByb3AudHlwZSA9IHByb3BJbmZvLnR5cGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmRlZmF1bHQpKSB7XG4gICAgICAgIHByb3AuZGVmYXVsdFZhbHVlID0gcHJvcEluZm8uZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNTZXJpYWxpemFibGUpKSB7XG4gICAgICAgIHByb3AuaXNTZXJpYWxpemFibGUgPSBwcm9wSW5mby5pc1NlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNMaWdodFNlcmlhbGl6YWJsZSkpIHtcbiAgICAgICAgcHJvcC5pc0xpZ2h0U2VyaWFsaXphYmxlID0gcHJvcEluZm8uaXNMaWdodFNlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubWF4TGVuZ3RoKSkge1xuICAgICAgICBwcm9wLm1heExlbmd0aCA9IHByb3BJbmZvLm1heExlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uZGlzcGxheU5hbWUpKSB7XG4gICAgICAgIHByb3AuZGlzcGxheU5hbWUgPSBwcm9wSW5mby5kaXNwbGF5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uY2F0ZWdvcnkpKSB7XG4gICAgICAgIHByb3AuY2F0ZWdvcnkgPSBwcm9wSW5mby5jYXRlZ29yeTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uY2F0ZWdvcnlJbmRleCkpIHtcbiAgICAgICAgcHJvcC5jYXRlZ29yeUluZGV4ID0gcHJvcEluZm8uY2F0ZWdvcnlJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubmV4dFRvUHJvcGVydHkpKSB7XG4gICAgICAgIHByb3AubmV4dFRvUHJvcGVydHkgPSBwcm9wSW5mby5uZXh0VG9Qcm9wZXJ0eTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8udmlzaWJsZUluZGV4KSkge1xuICAgICAgICBwcm9wLnZpc2libGVJbmRleCA9IHByb3BJbmZvLnZpc2libGVJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uc2hvd01vZGUpKSB7XG4gICAgICAgIHByb3Auc2hvd01vZGUgPSBwcm9wSW5mby5zaG93TW9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubWF4VmFsdWUpKSB7XG4gICAgICAgIHByb3AubWF4VmFsdWUgPSBwcm9wSW5mby5tYXhWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8ubWluVmFsdWUpKSB7XG4gICAgICAgIHByb3AubWluVmFsdWUgPSBwcm9wSW5mby5taW5WYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uZGF0YUxpc3QpKSB7XG4gICAgICAgIHByb3AuZGF0YUxpc3QgPSBwcm9wSW5mby5kYXRhTGlzdDtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNEeW5hbWljQ2hvaWNlcykpIHtcbiAgICAgICAgcHJvcC5pc0R5bmFtaWNDaG9pY2VzID0gcHJvcEluZm8uaXNEeW5hbWljQ2hvaWNlcztcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNCaW5kYWJsZSkpIHtcbiAgICAgICAgcHJvcC5pc0JpbmRhYmxlID0gcHJvcEluZm8uaXNCaW5kYWJsZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uaXNVbmlxdWUpKSB7XG4gICAgICAgIHByb3AuaXNVbmlxdWUgPSBwcm9wSW5mby5pc1VuaXF1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby52aXNpYmxlID09PSB0cnVlIHx8IHByb3BJbmZvLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHByb3AudmlzaWJsZSA9IHByb3BJbmZvLnZpc2libGU7XG4gICAgICB9XG4gICAgICBpZiAoISFwcm9wSW5mby52aXNpYmxlSWYpIHtcbiAgICAgICAgcHJvcC52aXNpYmxlSWYgPSBwcm9wSW5mby52aXNpYmxlSWY7XG4gICAgICB9XG4gICAgICBpZiAoISFwcm9wSW5mby5vblByb3BlcnR5RWRpdG9yVXBkYXRlKSB7XG4gICAgICAgIHByb3Aub25Qcm9wZXJ0eUVkaXRvclVwZGF0ZSA9IHByb3BJbmZvLm9uUHJvcGVydHlFZGl0b3JVcGRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ucmVhZE9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgcHJvcC5yZWFkT25seSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uY2hvaWNlcykge1xuICAgICAgICB2YXIgY2hvaWNlc0Z1bmMgPVxuICAgICAgICAgIHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzID09PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcbiAgICAgICAgdmFyIGNob2ljZXNWYWx1ZSA9XG4gICAgICAgICAgdHlwZW9mIHByb3BJbmZvLmNob2ljZXMgIT09IFwiZnVuY3Rpb25cIiA/IHByb3BJbmZvLmNob2ljZXMgOiBudWxsO1xuICAgICAgICBwcm9wLnNldENob2ljZXMoY2hvaWNlc1ZhbHVlLCBjaG9pY2VzRnVuYyk7XG4gICAgICB9XG4gICAgICBpZiAoISFwcm9wSW5mby5iYXNlVmFsdWUpIHtcbiAgICAgICAgcHJvcC5zZXRCYXNlVmFsdWUocHJvcEluZm8uYmFzZVZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5vbkdldFZhbHVlKSB7XG4gICAgICAgIHByb3Aub25HZXRWYWx1ZSA9IHByb3BJbmZvLm9uR2V0VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ub25TZXRWYWx1ZSkge1xuICAgICAgICBwcm9wLm9uU2V0VmFsdWUgPSBwcm9wSW5mby5vblNldFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcbiAgICAgICAgcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5ID0gXCJsb2NcIiArIHByb3AubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkgPSBwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHk7XG4gICAgICAgIHZhciBzOiBzdHJpbmc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJlxuICAgICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LmluZGV4T2YoXCJsb2NcIikgPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uaXNMb2NhbGl6YWJsZSkge1xuICAgICAgICBwcm9wLmlzTG9jYWxpemFibGUgPSBwcm9wSW5mby5pc0xvY2FsaXphYmxlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZSkge1xuICAgICAgICBwcm9wLmNsYXNzTmFtZSA9IHByb3BJbmZvLmNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5iYXNlQ2xhc3NOYW1lKSB7XG4gICAgICAgIHByb3AuYmFzZUNsYXNzTmFtZSA9IHByb3BJbmZvLmJhc2VDbGFzc05hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uY2xhc3NOYW1lUGFydCkge1xuICAgICAgICBwcm9wLmNsYXNzTmFtZVBhcnQgPSBwcm9wSW5mby5jbGFzc05hbWVQYXJ0O1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZSkge1xuICAgICAgICBwcm9wLmFsdGVybmF0aXZlTmFtZSA9IHByb3BJbmZvLmFsdGVybmF0aXZlTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5sYXlvdXQpIHtcbiAgICAgICAgcHJvcC5sYXlvdXQgPSBwcm9wSW5mby5sYXlvdXQ7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uZGVwZW5kc09uKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydGllcyhwcm9wLCBwcm9wSW5mby5kZXBlbmRzT24pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcDtcbiAgfVxuICBwcml2YXRlIGFkZERlcGVuZHNPblByb3BlcnRpZXMocHJvcDogSnNvbk9iamVjdFByb3BlcnR5LCBkZXBlbmRzT246IGFueSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlcGVuZHNPbikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kc09uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydHkocHJvcCwgZGVwZW5kc09uW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGREZXBlbmRzT25Qcm9wZXJ0eShwcm9wLCBkZXBlbmRzT24pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZERlcGVuZHNPblByb3BlcnR5KHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSwgZGVwZW5kc09uOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmZpbmQoZGVwZW5kc09uKTtcbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBwcm9wZXJ0eSA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KHRoaXMucGFyZW50TmFtZSwgZGVwZW5kc09uKTtcbiAgICB9XG4gICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuO1xuICAgIHByb3BlcnR5LmFkZERlcGVuZGVkUHJvcGVydHkocHJvcC5uYW1lKTtcbiAgfVxuICBwcml2YXRlIGdldElzUHJvcGVydHlOYW1lUmVxdWlyZWQocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcGVydHlOYW1lLmxlbmd0aCA+IDAgJiZcbiAgICAgIHByb3BlcnR5TmFtZVswXSA9PSBKc29uTWV0YWRhdGFDbGFzcy5yZXF1aXJlZFN5bWJvbFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5nZXRJc1Byb3BlcnR5TmFtZVJlcXVpcmVkKHByb3BlcnR5TmFtZSkpIHJldHVybiBwcm9wZXJ0eU5hbWU7XG4gICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnNsaWNlKDEpO1xuICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgb2JqZWN0LiBJdCBjb250YWlucyBvYmplY3QgcHJvcGVydGllcycgcnVudGltZSBpbmZvcm1hdGlvbiBhbmQgYWxsb3dzIHlvdSB0byBtb2RpZnkgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uTWV0YWRhdGEge1xuICBwcml2YXRlIGNsYXNzZXM6IEhhc2hUYWJsZTxKc29uTWV0YWRhdGFDbGFzcz4gPSB7fTtcbiAgcHJpdmF0ZSBhbHRlcm5hdGl2ZU5hbWVzOiBIYXNoVGFibGU8c3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIGNoaWxkcmVuQ2xhc3NlczogSGFzaFRhYmxlPEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPj4gPSB7fTtcbiAgcHJpdmF0ZSBjbGFzc1Byb3BlcnRpZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+PiA9IHt9O1xuICBwcml2YXRlIGNsYXNzSGFzaFByb3BlcnRpZXM6IEhhc2hUYWJsZTxIYXNoVGFibGU8SnNvbk9iamVjdFByb3BlcnR5Pj4gPSB7fTtcbiAgcHVibGljIGdldE9ialByb3BlcnR5VmFsdWUob2JqOiBhbnksIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNPYmpXcmFwcGVyKG9iaikpIHtcbiAgICAgIHZhciBvcmlnbmFsT2JqID0gb2JqLmdldE9yaWdpbmFsT2JqKCk7XG4gICAgICB2YXIgcHJvcCA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KG9yaWduYWxPYmouZ2V0VHlwZSgpLCBuYW1lKTtcbiAgICAgIGlmICghIXByb3ApIHJldHVybiB0aGlzLmdldE9ialByb3BlcnR5VmFsdWVDb3JlKG9yaWduYWxPYmosIHByb3ApO1xuICAgIH1cbiAgICB2YXIgcHJvcCA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KG9iai5nZXRUeXBlKCksIG5hbWUpO1xuICAgIGlmICghcHJvcCkgcmV0dXJuIG9ialtuYW1lXTtcbiAgICByZXR1cm4gdGhpcy5nZXRPYmpQcm9wZXJ0eVZhbHVlQ29yZShvYmosIHByb3ApO1xuICB9XG4gIHB1YmxpYyBzZXRPYmpQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgaWYgKG9ialtuYW1lXSA9PT0gdmFsKSByZXR1cm47XG4gICAgaWYgKCEhb2JqW25hbWVdICYmICEhb2JqW25hbWVdLnNldEpzb24pIHtcbiAgICAgIG9ialtuYW1lXS5zZXRKc29uKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtuYW1lXSA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRPYmpQcm9wZXJ0eVZhbHVlQ29yZShvYmo6IGFueSwgcHJvcDogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcbiAgICBpZiAoIXByb3AuaXNTZXJpYWxpemFibGUpIHJldHVybiBvYmpbcHJvcC5uYW1lXTtcbiAgICBpZiAocHJvcC5pc0xvY2FsaXphYmxlKSB7XG4gICAgICBpZiAocHJvcC5pc0FycmF5KSByZXR1cm4gb2JqW3Byb3AubmFtZV07XG4gICAgICBpZiAoISFwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSlcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG9iai5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBpc09ialdyYXBwZXIob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFvYmouZ2V0T3JpZ2luYWxPYmogJiYgISFvYmouZ2V0T3JpZ2luYWxPYmooKTtcbiAgfVxuICBwdWJsaWMgYWRkQ2xhc3MoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnRpZXM6IEFycmF5PGFueT4sXG4gICAgY3JlYXRvcjogKGpzb24/OiBhbnkpID0+IGFueSA9IG51bGwsXG4gICAgcGFyZW50TmFtZTogc3RyaW5nID0gbnVsbFxuICApOiBKc29uTWV0YWRhdGFDbGFzcyB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IG5ldyBKc29uTWV0YWRhdGFDbGFzcyhcbiAgICAgIG5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgY3JlYXRvcixcbiAgICAgIHBhcmVudE5hbWVcbiAgICApO1xuICAgIHRoaXMuY2xhc3Nlc1tuYW1lXSA9IG1ldGFEYXRhQ2xhc3M7XG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXTtcbiAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW3BhcmVudE5hbWVdLnB1c2gobWV0YURhdGFDbGFzcyk7XG4gICAgfVxuICAgIHJldHVybiBtZXRhRGF0YUNsYXNzO1xuICB9XG4gIHB1YmxpYyByZW1vdmVDbGFzcyhuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgbWV0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgaWYgKCFtZXRhQ2xhc3MpIHJldHVybjtcbiAgICBkZWxldGUgdGhpcy5jbGFzc2VzW21ldGFDbGFzcy5uYW1lXTtcbiAgICBpZiAoISFtZXRhQ2xhc3MucGFyZW50TmFtZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbbWV0YUNsYXNzLnBhcmVudE5hbWVdLmluZGV4T2YobWV0YUNsYXNzKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW21ldGFDbGFzcy5wYXJlbnROYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGVDbGFzc0NyZWF0b3JlKG5hbWU6IHN0cmluZywgY3JlYXRvcjogKCkgPT4gYW55KSB7XG4gICAgdGhpcy5vdmVycmlkZUNsYXNzQ3JlYXRvcihuYW1lLCBjcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGVDbGFzc0NyZWF0b3IobmFtZTogc3RyaW5nLCBjcmVhdG9yOiAoKSA9PiBhbnkpIHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MpIHtcbiAgICAgIG1ldGFEYXRhQ2xhc3MuY3JlYXRvciA9IGNyZWF0b3I7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIG1ldGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKCFtZXRhQ2xhc3MpIHJldHVybiBbXTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuY2xhc3NQcm9wZXJ0aWVzW21ldGFDbGFzcy5uYW1lXTtcbiAgICBpZiAoISFwcm9wZXJ0aWVzKSByZXR1cm4gcHJvcGVydGllcztcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzRm9yQ2xhc3MobWV0YUNsYXNzLm5hbWUpO1xuICAgIHJldHVybiB0aGlzLmNsYXNzUHJvcGVydGllc1ttZXRhQ2xhc3MubmFtZV07XG4gIH1cbiAgcHJpdmF0ZSBnZXRIYXNoUHJvcGVydGllcyhjbGFzc05hbWU6IHN0cmluZyk6IEhhc2hUYWJsZTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgbWV0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIW1ldGFDbGFzcykgcmV0dXJuIHt9O1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW21ldGFDbGFzcy5uYW1lXTtcbiAgICBpZiAoISFwcm9wZXJ0aWVzKSByZXR1cm4gcHJvcGVydGllcztcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzRm9yQ2xhc3MobWV0YUNsYXNzLm5hbWUpO1xuICAgIHJldHVybiB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbbWV0YUNsYXNzLm5hbWVdO1xuICB9XG4gIHByaXZhdGUgZmlsbFByb3BlcnRpZXNGb3JDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcbiAgICB2YXIgaGFzaFByb3BlcnRpZXMgPSB7fTtcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcywgaGFzaFByb3BlcnRpZXMpO1xuICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NsYXNzTmFtZV0gPSBwcm9wZXJ0aWVzO1xuICAgIHRoaXMuY2xhc3NIYXNoUHJvcGVydGllc1tjbGFzc05hbWVdID0gaGFzaFByb3BlcnRpZXM7XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnRpZXNCeU9iaihvYmo6IGFueSk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIGlmICghb2JqIHx8ICFvYmouZ2V0VHlwZSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIHZhciBwcm9wcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbcHJvcHNbaV0ubmFtZV0gPSBwcm9wc1tpXTtcbiAgICB9XG4gICAgdmFyIGR5bmFtaWNQcm9wcyA9ICEhb2JqLmdldER5bmFtaWNUeXBlXG4gICAgICA/IHRoaXMuZ2V0UHJvcGVydGllcyhvYmouZ2V0RHluYW1pY1R5cGUoKSlcbiAgICAgIDogbnVsbDtcbiAgICBpZiAoZHluYW1pY1Byb3BzICYmIGR5bmFtaWNQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bmFtaWNQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZFByb3AgPSBkeW5hbWljUHJvcHNbaV07XG4gICAgICAgIGlmICghIXJlc1tkUHJvcC5uYW1lXSkgY29udGludWU7XG4gICAgICAgIHJlc1tkUHJvcC5uYW1lXSA9IGRQcm9wO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzKS5tYXAoKGtleSkgPT4gcmVzW2tleV0pO1xuICB9XG4gIHB1YmxpYyBnZXREeW5hbWljUHJvcGVydGllc0J5T2JqKFxuICAgIG9iajogYW55LFxuICAgIGR5bmFtaWNUeXBlOiBzdHJpbmcgPSBudWxsXG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIGlmICghb2JqIHx8ICFvYmouZ2V0VHlwZSB8fCAoIW9iai5nZXREeW5hbWljVHlwZSAmJiAhZHluYW1pY1R5cGUpKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIHZhciBkVHlwZSA9ICEhZHluYW1pY1R5cGUgPyBkeW5hbWljVHlwZSA6IG9iai5nZXREeW5hbWljVHlwZSgpO1xuICAgIGlmICghZFR5cGUpIHJldHVybiBbXTtcbiAgICB2YXIgZHluYW1pY1Byb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGRUeXBlKTtcbiAgICBpZiAoIWR5bmFtaWNQcm9wcyB8fCBkeW5hbWljUHJvcHMubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICB2YXIgaGFzaDogYW55ID0ge307XG4gICAgdmFyIHByb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXRUeXBlKCkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhc2hbcHJvcHNbaV0ubmFtZV0gPSBwcm9wc1tpXTtcbiAgICB9XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluYW1pY1Byb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZFByb3AgPSBkeW5hbWljUHJvcHNbaV07XG4gICAgICBpZiAoIWhhc2hbZFByb3AubmFtZV0pIHtcbiAgICAgICAgcmVzLnB1c2goZFByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBoYXNPcmlnaW5hbFByb3BlcnR5KG9iajogQmFzZSwgcHJvcE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0T3JpZ2luYWxQcm9wZXJ0eShvYmosIHByb3BOYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0T3JpZ2luYWxQcm9wZXJ0eShvYmo6IEJhc2UsIHByb3BOYW1lOiBzdHJpbmcpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciByZXMgPSB0aGlzLmZpbmRQcm9wZXJ0eShvYmouZ2V0VHlwZSgpLCBwcm9wTmFtZSk7XG4gICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIGlmICh0aGlzLmlzT2JqV3JhcHBlcihvYmopKVxuICAgICAgcmV0dXJuIHRoaXMuZmluZFByb3BlcnR5KCg8YW55Pm9iaikuZ2V0T3JpZ2luYWxPYmooKS5nZXRUeXBlKCksIHByb3BOYW1lKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZmluZFByb3BlcnR5KFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmdldEhhc2hQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XG4gICAgdmFyIHJlcyA9IGhhc2hbcHJvcGVydHlOYW1lXTtcbiAgICByZXR1cm4gISFyZXMgPyByZXMgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBmaW5kUHJvcGVydGllcyhcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eU5hbWVzOiBBcnJheTxzdHJpbmc+XG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaGFzaCA9IHRoaXMuZ2V0SGFzaFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gaGFzaFtwcm9wZXJ0eU5hbWVzW2ldXTtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRBbGxQcm9wZXJ0aWVzQnlOYW1lKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xuICAgIHZhciBjbGFzc2VzID0gdGhpcy5nZXRBbGxDbGFzc2VzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3Nlc1tpXSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNsYXNzSW5mby5wcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChjbGFzc0luZm8ucHJvcGVydGllc1tqXS5uYW1lID09IHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgIHJlcy5wdXNoKGNsYXNzSW5mby5wcm9wZXJ0aWVzW2pdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxDbGFzc2VzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5jbGFzc2VzKSB7XG4gICAgICByZXMucHVzaChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgY3JlYXRlQ2xhc3MobmFtZTogc3RyaW5nLCBqc29uOiBhbnkgPSB1bmRlZmluZWQpOiBhbnkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xuICAgIGlmIChtZXRhRGF0YUNsYXNzLmNyZWF0b3IpIHJldHVybiBtZXRhRGF0YUNsYXNzLmNyZWF0b3IoanNvbik7XG4gICAgdmFyIHBhcmVudE5hbWUgPSBtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWU7XG4gICAgd2hpbGUgKHBhcmVudE5hbWUpIHtcbiAgICAgIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhwYXJlbnROYW1lKTtcbiAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIG51bGw7XG4gICAgICBwYXJlbnROYW1lID0gbWV0YURhdGFDbGFzcy5wYXJlbnROYW1lO1xuICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MuY3JlYXRvcilcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tVHlwZShuYW1lLCBtZXRhRGF0YUNsYXNzLmNyZWF0b3IsIGpzb24pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVR5cGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWF0b3I6IGFueSxcbiAgICBqc29uOiBhbnkgPSB1bmRlZmluZWRcbiAgKTogYW55IHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSBjcmVhdG9yKGpzb24pO1xuICAgIHZhciBjdXN0b21UeXBlTmFtZSA9IG5hbWU7XG4gICAgdmFyIGN1c3RvbVRlbXBsYXRlTmFtZSA9IHJlcy5nZXRUZW1wbGF0ZVxuICAgICAgPyByZXMuZ2V0VGVtcGxhdGUoKVxuICAgICAgOiByZXMuZ2V0VHlwZSgpO1xuICAgIHJlcy5nZXRUeXBlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVHlwZU5hbWU7XG4gICAgfTtcbiAgICByZXMuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZW1wbGF0ZU5hbWU7XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q2hpbGRyZW5DbGFzc2VzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4ge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+ID0gW107XG4gICAgdGhpcy5maWxsQ2hpbGRyZW5DbGFzc2VzKG5hbWUsIGNhbkJlQ3JlYXRlZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRSZXF1aXJlZFByb3BlcnRpZXMobmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMobmFtZSk7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BlcnRpZXNbaV0uaXNSZXF1aXJlZCkge1xuICAgICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBhZGRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzSW5mb3M6IEFycmF5PGFueT4pIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzSW5mb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tUHJvcGVydHlDb3JlKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnRpZXNJbmZvc1tpXSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHlJbmZvOiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLmFkZEN1c3RvbVByb3BlcnR5Q29yZSh0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpLCBwcm9wZXJ0eUluZm8pO1xuICB9XG4gIHByaXZhdGUgYWRkQ3VzdG9tUHJvcGVydHlDb3JlKFxuICAgIG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHByb3BlcnR5SW5mbzogYW55XG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5SW5mbyk7XG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBwcm9wZXJ0eS5pc0N1c3RvbSA9IHRydWU7XG4gICAgICB0aGlzLmFkZFByb3BlcnR5VG9DbGFzcyhtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0eSk7XG4gICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmFkZFByb3BlcnR5KG1ldGFEYXRhQ2xhc3MubmFtZSwgcHJvcGVydHkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cbiAgcHVibGljIHJlbW92ZVByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmZpbmQocHJvcGVydHlOYW1lKTtcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlGcm9tQ2xhc3MobWV0YURhdGFDbGFzcywgcHJvcGVydHkpO1xuICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5yZW1vdmVQcm9wZXJ0eShcbiAgICAgICAgbWV0YURhdGFDbGFzcy5uYW1lLFxuICAgICAgICBwcm9wZXJ0eU5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydHlUb0NsYXNzKFxuICAgIG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHlcbiAgKSB7XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eS5uYW1lKSAhPSBudWxsKSByZXR1cm47XG4gICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlUHJvcGVydHlGcm9tQ2xhc3MoXG4gICAgbWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICB2YXIgaW5kZXggPSBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eSk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG4gIHByaXZhdGUgZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzKSB7XG4gICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XG4gICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW21ldGFEYXRhQ2xhc3MubmFtZV0gPSBudWxsO1xuICAgIHZhciBjaGlsZENsYXNzZXMgPSB0aGlzLmdldENoaWxkcmVuQ2xhc3NlcyhtZXRhRGF0YUNsYXNzLm5hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNsYXNzUHJvcGVydGllc1tjaGlsZENsYXNzZXNbaV0ubmFtZV0gPSBudWxsO1xuICAgICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW2NoaWxkQ2xhc3Nlc1tpXS5uYW1lXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbENoaWxkcmVuQ2xhc3NlcyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FuQmVDcmVhdGVkOiBib29sZWFuLFxuICAgIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+XG4gICkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW25hbWVdO1xuICAgIGlmICghY2hpbGRyZW4pIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWNhbkJlQ3JlYXRlZCB8fCBjaGlsZHJlbltpXS5jcmVhdG9yKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhjaGlsZHJlbltpXS5uYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBmaW5kQ2xhc3MobmFtZTogc3RyaW5nKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMuY2xhc3Nlc1tuYW1lXTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgdmFyIG5ld05hbWUgPSB0aGlzLmFsdGVybmF0aXZlTmFtZXNbbmFtZV07XG4gICAgICBpZiAoISFuZXdOYW1lICYmIG5ld05hbWUgIT0gbmFtZSkgcmV0dXJuIHRoaXMuZmluZENsYXNzKG5ld05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBpc0Rlc2NlbmRhbnRPZihjbGFzc05hbWU6IHN0cmluZywgYW5jZXN0b3JDbGFzc05hbWU6IHN0cmluZykge1xuICAgIGlmICghY2xhc3NOYW1lIHx8ICFhbmNlc3RvckNsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBhbmNlc3RvckNsYXNzTmFtZSA9IGFuY2VzdG9yQ2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGNsYXNzXyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKCFjbGFzc18pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHBhcmVudENsYXNzID0gY2xhc3NfO1xuICAgIGRvIHtcbiAgICAgIGlmIChwYXJlbnRDbGFzcy5uYW1lID09PSBhbmNlc3RvckNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENsYXNzID0gdGhpcy5jbGFzc2VzW3BhcmVudENsYXNzLnBhcmVudE5hbWVdO1xuICAgIH0gd2hpbGUgKCEhcGFyZW50Q2xhc3MpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkQWx0ZXJOYXRpdmVDbGFzc05hbWUobmFtZTogc3RyaW5nLCBhbHRlcm5hdGl2ZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuYWx0ZXJuYXRpdmVOYW1lc1thbHRlcm5hdGl2ZU5hbWUudG9Mb3dlckNhc2UoKV0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcHVibGljIGdlbmVyYXRlU2NoZW1hKGNsYXNzTmFtZTogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBpZiAoIWNsYXNzTmFtZSkgY2xhc3NOYW1lID0gXCJzdXJ2ZXlcIjtcbiAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIWNsYXNzSW5mbykgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICRzY2hlbWE6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjXCIsXG4gICAgICB0aXRsZTogXCJTdXJ2ZXlKUyBMaWJyYXJ5IGpzb24gc2NoZW1hXCIsXG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcHJvcGVydGllczoge30sXG4gICAgICBkZWZpbml0aW9uczoge30sXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYXRlU2NoZW1hUHJvcGVydGllcyhjbGFzc0luZm8sIHJlcy5wcm9wZXJ0aWVzLCByZXMuZGVmaW5pdGlvbnMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjaGVtYVByb3BlcnRpZXMoXG4gICAgY2xhc3NJbmZvOiBKc29uTWV0YWRhdGFDbGFzcyxcbiAgICBzY2hlbWFQcm9wZXJ0aWVzOiBhbnksXG4gICAgc2NoZW1hRGVmOiBhbnlcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjbGFzc0luZm8pIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzSW5mby5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IGNsYXNzSW5mby5wcm9wZXJ0aWVzW2ldO1xuICAgICAgc2NoZW1hUHJvcGVydGllc1twcm9wLm5hbWVdID0gdGhpcy5nZW5lcmF0ZVNjaGVtYVByb3BlcnR5KFxuICAgICAgICBwcm9wLFxuICAgICAgICBzY2hlbWFEZWZcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0eShcbiAgICBwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgc2NoZW1hRGVmOiBhbnlcbiAgKTogYW55IHtcbiAgICB2YXIgcmVzOiBhbnkgPSB7IHR5cGU6IHByb3Auc2NoZW1hVHlwZSgpIH07XG4gICAgaWYgKHByb3AuaGFzQ2hvaWNlcykge1xuICAgICAgcmVzLmVudW0gPSBwcm9wLmdldENob2ljZXMobnVsbCk7XG4gICAgfVxuICAgIGlmICghIXByb3AuY2xhc3NOYW1lKSB7XG4gICAgICByZXMuaXRlbXMgPSB7ICRyZWY6IFwiI1wiICsgcHJvcC5jbGFzc05hbWUgfTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKHByb3AuY2xhc3NOYW1lLCBzY2hlbWFEZWYpO1xuICAgIH1cbiAgICBpZiAoISFwcm9wLmJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHZhciB1c2VkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKHByb3AuYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XG4gICAgICBpZiAocHJvcC5iYXNlQ2xhc3NOYW1lID09IFwicXVlc3Rpb25cIikge1xuICAgICAgICB1c2VkQ2xhc3Nlcy5wdXNoKHRoaXMuZmluZENsYXNzKFwicGFuZWxcIikpO1xuICAgICAgfVxuICAgICAgcmVzLml0ZW1zID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZWRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjbGFzc05hbWUgPSB1c2VkQ2xhc3Nlc1tpXS5uYW1lO1xuICAgICAgICByZXMuaXRlbXMucHVzaCh7ICRyZWY6IFwiI1wiICsgY2xhc3NOYW1lIH0pO1xuICAgICAgICB0aGlzLmdlbmVyYXRlQ2hlbWFDbGFzcyhjbGFzc05hbWUsIHNjaGVtYURlZik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNoZW1hQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcsIHNjaGVtYURlZjogYW55KSB7XG4gICAgaWYgKCEhc2NoZW1hRGVmW2NsYXNzTmFtZV0pIHJldHVybjtcbiAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIWNsYXNzSW5mbykgcmV0dXJuO1xuICAgIHZhciBoYXNQYXJlbnQgPSAhIWNsYXNzSW5mby5wYXJlbnROYW1lICYmIGNsYXNzSW5mby5wYXJlbnROYW1lICE9IFwiYmFzZVwiO1xuICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKGNsYXNzSW5mby5wYXJlbnROYW1lLCBzY2hlbWFEZWYpO1xuICAgIH1cbiAgICB2YXIgcmVzOiBhbnkgPSB7IHR5cGU6IFwib2JqZWN0XCIsICRpZDogXCIjXCIgKyBjbGFzc05hbWUgfTtcbiAgICBzY2hlbWFEZWZbY2xhc3NOYW1lXSA9IHJlcztcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB0aGlzLmdlbmVyYXRlU2NoZW1hUHJvcGVydGllcyhjbGFzc0luZm8sIHByb3BzLCBzY2hlbWFEZWYpO1xuICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgIHJlcy5hbGxPZmYgPSBbXG4gICAgICAgIHsgJHJlZjogXCIjXCIgKyBjbGFzc0luZm8ucGFyZW50TmFtZSB9LFxuICAgICAgICB7IHByb3BlcnRpZXM6IHByb3BzIH0sXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMucHJvcGVydGllcyA9IHByb3BzO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGZpbGxQcm9wZXJ0aWVzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBsaXN0OiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGhhc2g6IEhhc2hUYWJsZTxKc29uT2JqZWN0UHJvcGVydHk+XG4gICkge1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm47XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSkge1xuICAgICAgdGhpcy5maWxsUHJvcGVydGllcyhtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWUsIGxpc3QsIGhhc2gpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXNbaV07XG4gICAgICB0aGlzLmFkZFByb3BlcnR5Q29yZShwcm9wLCBsaXN0LCBoYXNoKTtcbiAgICAgIGhhc2hbcHJvcC5uYW1lXSA9IHByb3A7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydHlDb3JlKFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PixcbiAgICBoYXNoOiBIYXNoVGFibGU8SnNvbk9iamVjdFByb3BlcnR5PlxuICApIHtcbiAgICBpZiAoIWhhc2hbcHJvcGVydHkubmFtZV0pIHtcbiAgICAgIGxpc3QucHVzaChwcm9wZXJ0eSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByb3BlcnR5Lm1lcmdlV2l0aChsaXN0W2luZGV4XSk7XG4gICAgbGlzdFtpbmRleF0gPSBwcm9wZXJ0eTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25FcnJvciB7XG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0OiBOdW1iZXIgPSAtMTtcbiAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IHN0cmluZywgcHVibGljIG1lc3NhZ2U6IHN0cmluZykge31cbiAgcHVibGljIGdldEZ1bGxEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2UgKyAodGhpcy5kZXNjcmlwdGlvbiA/IFwiXFxuXCIgKyB0aGlzLmRlc2NyaXB0aW9uIDogXCJcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uVW5rbm93blByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJ1bmtub3ducHJvcGVydHlcIixcbiAgICAgIFwiVGhlIHByb3BlcnR5ICdcIiArXG4gICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgIFwiJyBpbiBjbGFzcyAnXCIgK1xuICAgICAgICBjbGFzc05hbWUgK1xuICAgICAgICBcIicgaXMgdW5rbm93bi5cIlxuICAgICk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlOiBcIjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IHByb3BlcnRpZXNbaV0ubmFtZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIuXCI7XG4gICAgfVxuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlIGV4dGVuZHMgSnNvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nLFxuICAgIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodHlwZSwgbWVzc2FnZSk7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgYXZhaWxhYmxlOiBcIjtcbiAgICB2YXIgdHlwZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldENoaWxkcmVuQ2xhc3NlcyhiYXNlQ2xhc3NOYW1lLCB0cnVlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSA+IDApIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIsIFwiO1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIidcIiArIHR5cGVzW2ldLm5hbWUgKyBcIidcIjtcbiAgICB9XG4gICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIi5cIjtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25NaXNzaW5nVHlwZUVycm9yIGV4dGVuZHMgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBiYXNlQ2xhc3NOYW1lLFxuICAgICAgXCJtaXNzaW5ndHlwZXByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIG1pc3NpbmcgaW4gdGhlIG9iamVjdC4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHByb3BlcnR5OiAnXCIgK1xuICAgICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgICBcIicuXCJcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbkluY29ycmVjdFR5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYmFzZUNsYXNzTmFtZSxcbiAgICAgIFwiaW5jb3JyZWN0dHlwZXByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIGluY29ycmVjdCBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArXG4gICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgIFwiJy5cIlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwicmVxdWlyZWRwcm9wZXJ0eVwiLFxuICAgICAgXCJUaGUgcHJvcGVydHkgJ1wiICtcbiAgICAgICAgcHJvcGVydHlOYW1lICtcbiAgICAgICAgXCInIGlzIHJlcXVpcmVkIGluIGNsYXNzICdcIiArXG4gICAgICAgIGNsYXNzTmFtZSArXG4gICAgICAgIFwiJy5cIlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEpzb25PYmplY3Qge1xuICBwcml2YXRlIHN0YXRpYyB0eXBlUHJvcGVydHlOYW1lID0gXCJ0eXBlXCI7XG4gIHByaXZhdGUgc3RhdGljIHBvc2l0aW9uUHJvcGVydHlOYW1lID0gXCJwb3NcIjtcbiAgcHJpdmF0ZSBzdGF0aWMgbWV0YURhdGFWYWx1ZSA9IG5ldyBKc29uTWV0YWRhdGEoKTtcbiAgcHVibGljIHN0YXRpYyBnZXQgbWV0YURhdGEoKSB7XG4gICAgcmV0dXJuIEpzb25PYmplY3QubWV0YURhdGFWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZXJyb3JzID0gbmV3IEFycmF5PEpzb25FcnJvcj4oKTtcbiAgcHVibGljIGxpZ2h0U2VyaWFsaXppbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRvSnNvbk9iamVjdChvYmo6IGFueSwgc3RvcmVEZWZhdWx0cyA9IGZhbHNlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50b0pzb25PYmplY3RDb3JlKG9iaiwgbnVsbCwgc3RvcmVEZWZhdWx0cyk7XG4gIH1cbiAgcHVibGljIHRvT2JqZWN0KGpzb25PYmo6IGFueSwgb2JqOiBhbnkpIHtcbiAgICB0aGlzLnRvT2JqZWN0Q29yZShqc29uT2JqLCBvYmopO1xuICAgIHZhciBlcnJvciA9IHRoaXMuZ2V0UmVxdWlyZWRFcnJvcihvYmosIGpzb25PYmopO1xuICAgIGlmICghIWVycm9yKSB7XG4gICAgICB0aGlzLmFkZE5ld0Vycm9yKGVycm9yLCBqc29uT2JqKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHRvT2JqZWN0Q29yZShqc29uT2JqOiBhbnksIG9iajogYW55KSB7XG4gICAgaWYgKCFqc29uT2JqKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnRpZXMgPSBudWxsO1xuICAgIHZhciBvYmpUeXBlID0gdW5kZWZpbmVkO1xuICAgIHZhciBuZWVkQWRkRXJyb3JzID0gdHJ1ZTtcbiAgICBpZiAob2JqLmdldFR5cGUpIHtcbiAgICAgIG9ialR5cGUgPSBvYmouZ2V0VHlwZSgpO1xuICAgICAgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmpUeXBlKTtcbiAgICAgIG5lZWRBZGRFcnJvcnMgPVxuICAgICAgICAhIW9ialR5cGUgJiYgIUpzb25PYmplY3QubWV0YURhdGEuaXNEZXNjZW5kYW50T2Yob2JqVHlwZSwgXCJpdGVtdmFsdWVcIik7XG4gICAgfVxuICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuO1xuICAgIGlmIChvYmouc3RhcnRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIG9iai5zdGFydExvYWRpbmdGcm9tSnNvbigpO1xuICAgIH1cbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5hZGREeW5hbWljUHJvcGVydGllcyhvYmosIGpzb25PYmosIHByb3BlcnRpZXMpO1xuICAgIGZvciAodmFyIGtleSBpbiBqc29uT2JqKSB7XG4gICAgICBpZiAoa2V5ID09PSBKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWUpIGNvbnRpbnVlO1xuICAgICAgaWYgKGtleSA9PT0gSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZSkge1xuICAgICAgICBvYmpba2V5XSA9IGpzb25PYmpba2V5XTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmZpbmRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBrZXkpO1xuICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICBpZiAobmVlZEFkZEVycm9ycykge1xuICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IoXG4gICAgICAgICAgICBuZXcgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yKGtleS50b1N0cmluZygpLCBvYmpUeXBlKSxcbiAgICAgICAgICAgIGpzb25PYmpcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZVRvT2JqKGpzb25PYmpba2V5XSwgb2JqLCBwcm9wZXJ0eSk7XG4gICAgfVxuICAgIGlmIChvYmouZW5kTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICBvYmouZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB0b0pzb25PYmplY3RDb3JlKFxuICAgIG9iajogYW55LFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgc3RvcmVEZWZhdWx0cyA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm4gb2JqO1xuICAgIGlmICh0eXBlb2Ygb2JqLmdldERhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG9iai5nZXREYXRhKCk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmICFwcm9wZXJ0eS5jbGFzc05hbWUpIHtcbiAgICAgICg8YW55PnJlc3VsdClbSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lXSA9IHByb3BlcnR5LmdldE9ialR5cGUoXG4gICAgICAgIG9iai5nZXRUeXBlKClcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucHJvcGVydGllc1RvSnNvbihcbiAgICAgIG9iaixcbiAgICAgIEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0b3JlRGVmYXVsdHNcbiAgICApO1xuICAgIHRoaXMucHJvcGVydGllc1RvSnNvbihcbiAgICAgIG9iaixcbiAgICAgIHRoaXMuZ2V0RHluYW1pY1Byb3BlcnRpZXMob2JqKSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0b3JlRGVmYXVsdHNcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXREeW5hbWljUHJvcGVydGllcyhvYmo6IGFueSk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBTZXJpYWxpemVyLmdldER5bmFtaWNQcm9wZXJ0aWVzQnlPYmoob2JqKTtcbiAgfVxuICBwcml2YXRlIGFkZER5bmFtaWNQcm9wZXJ0aWVzKFxuICAgIG9iajogYW55LFxuICAgIGpzb25PYmo6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+XG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIGlmICghb2JqLmdldER5bmFtaWNQcm9wZXJ0eU5hbWUpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIHZhciBkeW5hbWljUHJvcE5hbWUgPSBvYmouZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSgpO1xuICAgIGlmICghZHluYW1pY1Byb3BOYW1lKSByZXR1cm4gcHJvcGVydGllcztcbiAgICBpZiAoanNvbk9ialtkeW5hbWljUHJvcE5hbWVdKSB7XG4gICAgICBvYmpbZHluYW1pY1Byb3BOYW1lXSA9IGpzb25PYmpbZHluYW1pY1Byb3BOYW1lXTtcbiAgICB9XG4gICAgdmFyIGR5bmFtaWNQcm9wZXJ0aWVzID0gdGhpcy5nZXREeW5hbWljUHJvcGVydGllcyhvYmopO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChkeW5hbWljUHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzVG9Kc29uKFxuICAgIG9iajogYW55LFxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAganNvbjogYW55LFxuICAgIHN0b3JlRGVmYXVsdHMgPSBmYWxzZVxuICApIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy52YWx1ZVRvSnNvbihvYmosIGpzb24sIHByb3BlcnRpZXNbaV0sIHN0b3JlRGVmYXVsdHMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgdmFsdWVUb0pzb24oXG4gICAgb2JqOiBhbnksXG4gICAgcmVzdWx0OiBhbnksXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBzdG9yZURlZmF1bHRzID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgcHJvcGVydHkuaXNTZXJpYWxpemFibGUgPT09IGZhbHNlIHx8XG4gICAgICAocHJvcGVydHkuaXNMaWdodFNlcmlhbGl6YWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5saWdodFNlcmlhbGl6aW5nKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZShvYmopO1xuICAgIGlmICghc3RvcmVEZWZhdWx0cyAmJiBwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YXIgYXJyVmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyVmFsdWUucHVzaCh0aGlzLnRvSnNvbk9iamVjdENvcmUodmFsdWVbaV0sIHByb3BlcnR5LCBzdG9yZURlZmF1bHRzKSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IGFyclZhbHVlLmxlbmd0aCA+IDAgPyBhcnJWYWx1ZSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlLCBwcm9wZXJ0eSwgc3RvcmVEZWZhdWx0cyk7XG4gICAgfVxuICAgIHZhciBoYXNWYWx1ZSA9XG4gICAgICB0eXBlb2Ygb2JqW1wiZ2V0UHJvcGVydHlWYWx1ZVwiXSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICBvYmpbXCJnZXRQcm9wZXJ0eVZhbHVlXCJdKHByb3BlcnR5Lm5hbWUsIG51bGwpICE9PSBudWxsO1xuICAgIGlmICgoc3RvcmVEZWZhdWx0cyAmJiBoYXNWYWx1ZSkgfHwgIXByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB2YWx1ZVRvT2JqKHZhbHVlOiBhbnksIG9iajogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcbiAgICB0aGlzLnJlbW92ZVBvcyhwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5Lmhhc1RvVXNlU2V0VmFsdWUpIHtcbiAgICAgIHByb3BlcnR5LnNldFZhbHVlKG9iaiwgdmFsdWUsIHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlVG9BcnJheSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBuZXdPYmogPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZSwgcHJvcGVydHkpO1xuICAgIGlmIChuZXdPYmoubmV3T2JqKSB7XG4gICAgICB0aGlzLnRvT2JqZWN0Q29yZSh2YWx1ZSwgbmV3T2JqLm5ld09iaik7XG4gICAgICB2YWx1ZSA9IG5ld09iai5uZXdPYmo7XG4gICAgfVxuICAgIGlmICghbmV3T2JqLmVycm9yKSB7XG4gICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCkge1xuICAgICAgICBwcm9wZXJ0eS5zZXRWYWx1ZShvYmosIHZhbHVlLCB0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtwcm9wZXJ0eS5uYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlbW92ZVBvcyhwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCFwcm9wZXJ0eSB8fCAhcHJvcGVydHkudHlwZSB8fCBwcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJ2YWx1ZVwiKSA8IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5yZW1vdmVQb3NGcm9tT2JqKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZVBvc0Zyb21PYmoob2JqOiBhbnkpIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9zRnJvbU9iaihvYmpbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISFvYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV0pIHtcbiAgICAgIGRlbGV0ZSBvYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUFycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXdPYmoodmFsdWU6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSk6IGFueSB7XG4gICAgdmFyIHJlc3VsdDogYW55ID0geyBuZXdPYmo6IG51bGwsIGVycm9yOiBudWxsIH07XG4gICAgdmFyIGNsYXNzTmFtZSA9IHZhbHVlW0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV07XG4gICAgaWYgKCFjbGFzc05hbWUgJiYgcHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5jbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BlcnR5LmNsYXNzTmFtZTtcbiAgICB9XG4gICAgY2xhc3NOYW1lID0gcHJvcGVydHkuZ2V0Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgcmVzdWx0Lm5ld09iaiA9IGNsYXNzTmFtZVxuICAgICAgPyBKc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKGNsYXNzTmFtZSwgdmFsdWUpXG4gICAgICA6IG51bGw7XG4gICAgcmVzdWx0LmVycm9yID0gdGhpcy5jaGVja05ld09iamVjdE9uRXJyb3JzKFxuICAgICAgcmVzdWx0Lm5ld09iaixcbiAgICAgIHZhbHVlLFxuICAgICAgcHJvcGVydHksXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBjaGVja05ld09iamVjdE9uRXJyb3JzKFxuICAgIG5ld09iajogYW55LFxuICAgIHZhbHVlOiBhbnksXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBjbGFzc05hbWU6IHN0cmluZ1xuICApOiBKc29uRXJyb3Ige1xuICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgZXJyb3IgPSB0aGlzLmdldFJlcXVpcmVkRXJyb3IobmV3T2JqLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lKSB7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbk1pc3NpbmdUeXBlRXJyb3IoXG4gICAgICAgICAgICBwcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydHkuYmFzZUNsYXNzTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbkluY29ycmVjdFR5cGVFcnJvcihcbiAgICAgICAgICAgIHByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAgICBwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVxdWlyZWRFcnJvcihvYmo6IGFueSwganNvblZhbHVlOiBhbnkpOiBKc29uRXJyb3Ige1xuICAgIGlmICghb2JqLmdldFR5cGUgfHwgdHlwZW9mIG9iai5nZXREYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuICAgIHZhciBjbGFzc05hbWUgPSBvYmouZ2V0VHlwZSgpO1xuICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgaWYgKCFyZXF1aXJlZFByb3BlcnRpZXMpIHJldHVybiBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWpzb25WYWx1ZVtyZXF1aXJlZFByb3BlcnRpZXNbaV1dKSB7XG4gICAgICAgIHJldHVybiBuZXcgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcihyZXF1aXJlZFByb3BlcnRpZXNbaV0sIGNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgYWRkTmV3RXJyb3IoZXJyb3I6IEpzb25FcnJvciwganNvbk9iajogYW55KSB7XG4gICAgaWYgKGpzb25PYmogJiYganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXSkge1xuICAgICAgZXJyb3IuYXQgPSBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdLnN0YXJ0O1xuICAgIH1cbiAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgfVxuICBwcml2YXRlIHZhbHVlVG9BcnJheShcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICBvYmo6IGFueSxcbiAgICBrZXk6IGFueSxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5XG4gICkge1xuICAgIGlmIChvYmpba2V5XSAmJiB2YWx1ZS5sZW5ndGggPiAwKSBvYmpba2V5XS5zcGxpY2UoMCwgb2JqW2tleV0ubGVuZ3RoKTtcbiAgICB2YXIgdmFsdWVSZXMgPSBvYmpba2V5XSA/IG9ialtrZXldIDogW107XG4gICAgdGhpcy5hZGRWYWx1ZXNJbnRvQXJyYXkodmFsdWUsIHZhbHVlUmVzLCBwcm9wZXJ0eSk7XG4gICAgaWYgKCFvYmpba2V5XSkgb2JqW2tleV0gPSB2YWx1ZVJlcztcbiAgfVxuICBwcml2YXRlIGFkZFZhbHVlc0ludG9BcnJheShcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICByZXN1bHQ6IEFycmF5PGFueT4sXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZVtpXSwgcHJvcGVydHkpO1xuICAgICAgaWYgKG5ld1ZhbHVlLm5ld09iaikge1xuICAgICAgICBpZiAoISF2YWx1ZVtpXS5uYW1lKSB7XG4gICAgICAgICAgbmV3VmFsdWUubmV3T2JqLm5hbWUgPSB2YWx1ZVtpXS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKG5ld1ZhbHVlLm5ld09iaik7XG4gICAgICAgIHRoaXMudG9PYmplY3RDb3JlKHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGZpbmRQcm9wZXJ0eShcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGtleTogYW55XG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIGlmIChwcm9wLm5hbWUgPT0ga2V5IHx8IHByb3AuYWx0ZXJuYXRpdmVOYW1lID09IGtleSkgcmV0dXJuIHByb3A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBtZXRhZGF0YSBvYmplY3QuIEl0IGNvbnRhaW5zIG9iamVjdCBwcm9wZXJ0aWVzJyBydW50aW1lIGluZm9ybWF0aW9uIGFuZCBhbGxvd3MgeW91IHRvIG1vZGlmeSBpdC5cbiAqIEBzZWUgSnNvbk1ldGFkYXRhXG4gKi9cbmV4cG9ydCB2YXIgU2VyaWFsaXplciA9IEpzb25PYmplY3QubWV0YURhdGE7XG4iLCJpbXBvcnQgeyBJQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9ucy9hY3Rpb25cIjtcclxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdE1vZGVsIGV4dGVuZHMgQmFzZSB7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBpc0V4cGFuZGVkOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSgpIHNlbGVjdGVkSXRlbTogSUFjdGlvbjtcclxuICBwdWJsaWMgc3RhdGljIElOREVOVDogbnVtYmVyID0gMTY7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaXRlbXM6IEFycmF5PElBY3Rpb24+LFxyXG4gICAgcHVibGljIG9uSXRlbVNlbGVjdDogKGl0ZW06IElBY3Rpb24pID0+IHZvaWQsXHJcbiAgICBwdWJsaWMgYWxsb3dTZWxlY3Rpb246IGJvb2xlYW4sXHJcbiAgICBzZWxlY3RlZEl0ZW0/OiBJQWN0aW9uXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcIml0ZW1zXCIpO1xyXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PElBY3Rpb24+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtc1wiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogQXJyYXk8SUFjdGlvbj4pIHtcclxuICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIHRoaXMuaXRlbXMubGVuZ3RoLCAuLi4odmFsdWUgfHwgW10pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RJdGVtID0gKGl0ZW1WYWx1ZTogSUFjdGlvbikgPT4ge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5hbGxvd1NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW1WYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICghIXRoaXMub25JdGVtU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMub25JdGVtU2VsZWN0KGl0ZW1WYWx1ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGlzSXRlbURpc2FibGVkID0gKGl0ZW1WYWx1ZTogSUFjdGlvbikgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW1WYWx1ZS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW1WYWx1ZS5lbmFibGVkO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZCA9IChpdGVtVmFsdWU6IElBY3Rpb24pID0+IHtcclxuICAgIHJldHVybiB0aGlzLmFsbG93U2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0ZWRJdGVtID09IGl0ZW1WYWx1ZTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZ2V0SXRlbUNsYXNzID0gKGl0ZW1WYWx1ZTogSUFjdGlvbikgPT4ge1xyXG4gICAgdmFyIGNsYXNzTmFtZSA9IFwic3YtbGlzdF9faXRlbVwiO1xyXG4gICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbVZhbHVlKSkge1xyXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3YtbGlzdF9faXRlbS0tZGlzYWJsZWRcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW1WYWx1ZSkpIHtcclxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2LWxpc3RfX2l0ZW0tLXNlbGVjdGVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtSW5kZW50ID0gKGl0ZW1WYWx1ZTogYW55KSA9PiB7XHJcbiAgICBjb25zdCBsZXZlbCA9IGl0ZW1WYWx1ZS5sZXZlbCB8fCAwO1xyXG4gICAgcmV0dXJuIChsZXZlbCArIDEpICogTGlzdE1vZGVsLklOREVOVCArIFwicHhcIjtcclxuICB9O1xyXG59XHJcbiIsImltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvY2FsaXphYmxlT3duZXIge1xuICBnZXRMb2NhbGUoKTogc3RyaW5nO1xuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIElMb2NhbGl6YWJsZVN0cmluZyB7XG4gIGdldExvY2FsZVRleHQobG9jOiBzdHJpbmcpOiBzdHJpbmc7XG4gIHNldExvY2FsZVRleHQobG9jOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBhbnk7XG4gIGdldExvY2FsZXMoKTogQXJyYXk8c3RyaW5nPjtcbn1cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgdGhlIHN0cmluZyB0aGF0IHN1cHBvcnRzIG11bHRpLWxhbmd1YWdlcyBhbmQgbWFya2Rvd24uXG4gKiBJdCB1c2VzIGluIGFsbCBvYmplY3RzIHdoZXJlIHN1cHBvcnQgZm9yIG11bHRpLWxhbmd1YWdlcyBhbmQgbWFya2Rvd24gaXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbGl6YWJsZVN0cmluZyBpbXBsZW1lbnRzIElMb2NhbGl6YWJsZVN0cmluZyB7XG4gIHB1YmxpYyBzdGF0aWMgU2VyaWFsaXplQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBnZXQgZGVmYXVsdExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBkZWZhdWx0TG9jYWxlKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0UmVuZGVyZXIgPSBcInN2LXN0cmluZy12aWV3ZXJcIjtcbiAgcHVibGljIHN0YXRpYyBlZGl0YWJsZVJlbmRlcmVyID0gXCJzdi1zdHJpbmctZWRpdG9yXCI7XG4gIHByaXZhdGUgdmFsdWVzID0ge307XG4gIHByaXZhdGUgaHRtbFZhbHVlcyA9IHt9O1xuICBwcml2YXRlIHJlbmRlcmVkVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIGNhbGN1bGF0ZWRUZXh0VmFsdWU6IHN0cmluZztcbiAgcHVibGljIG9uR2V0VGV4dENhbGxiYWNrOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZztcbiAgcHVibGljIG9uU3RyQ2hhbmdlZDogKG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHB1YmxpYyBvblNlYXJjaENoYW5nZWQ6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBzaGFyZWREYXRhOiBMb2NhbGl6YWJsZVN0cmluZztcbiAgcHVibGljIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgcHVibGljIHNlYXJjaEluZGV4OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvd25lcjogSUxvY2FsaXphYmxlT3duZXIsXG4gICAgcHVibGljIHVzZU1hcmtkb3duOiBib29sZWFuID0gZmFsc2UsXG4gICAgcHVibGljIG5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXIgJiYgdGhpcy5vd25lci5nZXRMb2NhbGUgPyB0aGlzLm93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc3RyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnNlYXJjaGFibGVUZXh0ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlID0gdGhpcy5jYWxUZXh0KCk7XG4gICAgaWYgKHRoaXMucmVuZGVyZWRUZXh0ICE9PSB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnB1cmVUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRlZFRleHQoKTogc3RyaW5nIHtcbiAgICB0aGlzLnJlbmRlcmVkVGV4dCA9XG4gICAgICB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZVxuICAgICAgICA6IHRoaXMuY2FsVGV4dCgpO1xuICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFRleHQ7XG4gIH1cbiAgcHJpdmF0ZSBjYWxUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMucHVyZVRleHQ7XG4gICAgaWYgKFxuICAgICAgcmVzICYmXG4gICAgICB0aGlzLm93bmVyICYmXG4gICAgICB0aGlzLm93bmVyLmdldFByb2Nlc3NlZFRleHQgJiZcbiAgICAgIHJlcy5pbmRleE9mKFwie1wiKSA+IC0xXG4gICAgKSB7XG4gICAgICByZXMgPSB0aGlzLm93bmVyLmdldFByb2Nlc3NlZFRleHQocmVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25HZXRUZXh0Q2FsbGJhY2spIHJlcyA9IHRoaXMub25HZXRUZXh0Q2FsbGJhY2socmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgcHVyZVRleHQoKSB7XG4gICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZShsb2MpO1xuICAgIGlmICghcmVzICYmIGxvYyA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSkge1xuICAgICAgcmVzID0gdGhpcy5nZXRWYWx1ZShzdXJ2ZXlMb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZSk7XG4gICAgfVxuICAgIGlmICghcmVzICYmIGxvYyAhPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpIHtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0VmFsdWUoc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXJlcykgcmVzID0gXCJcIjtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzSHRtbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNIdG1sVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGh0bWwoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0h0bWwpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiB0aGlzLmdldEh0bWxWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXNLZXlzKCkubGVuZ3RoID09IDA7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0T3JIdG1sKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0h0bWwgPyB0aGlzLmdldEh0bWxWYWx1ZSgpIDogdGhpcy5jYWxjdWxhdGVkVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkSHRtbCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0T3JIdG1sO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGVUZXh0KHRoaXMubG9jYWxlLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldExvY2FsZVRleHQobG9jOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZShsb2MpO1xuICAgIHJldHVybiByZXMgPyByZXMgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChsb2MpKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgdmFsdWUgJiZcbiAgICAgIGxvYyAmJlxuICAgICAgbG9jICE9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lICYmXG4gICAgICAhdGhpcy5nZXRWYWx1ZShsb2MpICYmXG4gICAgICB2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQoc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHZhciBjdXJMb2MgPSB0aGlzLmxvY2FsZTtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgaWYgKCFjdXJMb2MpIGN1ckxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgIHZhciBoYXNPblN0ckNoYW5nZWQgPSB0aGlzLm9uU3RyQ2hhbmdlZCAmJiBsb2MgPT09IGN1ckxvYztcbiAgICB2YXIgb2xkVmFsdWUgPSBoYXNPblN0ckNoYW5nZWQgPyB0aGlzLnB1cmVUZXh0IDogdW5kZWZpbmVkO1xuXG4gICAgZGVsZXRlICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5nZXRWYWx1ZShsb2MpKSB0aGlzLmRlbGV0ZVZhbHVlKGxvYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxvYyAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgICAgIHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGxvYywgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZShsb2MsIHZhbHVlKTtcbiAgICAgICAgICBpZiAobG9jID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RyQ2hhbmdlZCgpO1xuICAgIGlmIChoYXNPblN0ckNoYW5nZWQpIHtcbiAgICAgIHRoaXMub25TdHJDaGFuZ2VkKG9sZFZhbHVlLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNOb25EZWZhdWx0VGV4dCgpOiBib29sZWFuIHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGtleXMubGVuZ3RoID4gMSB8fCBrZXlzWzBdICE9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuICBwdWJsaWMgZ2V0SnNvbigpOiBhbnkge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRKc29uKCk7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKFxuICAgICAga2V5cy5sZW5ndGggPT0gMSAmJlxuICAgICAga2V5c1swXSA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgIXNldHRpbmdzLnNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3RcbiAgICApXG4gICAgICByZXR1cm4gKDxhbnk+dGhpcykudmFsdWVzW2tleXNbMF1dO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSB7XG4gICAgICB0aGlzLnNoYXJlZERhdGEuc2V0SnNvbih2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgdGhpcy5odG1sVmFsdWVzID0ge307XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChudWxsLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldExvY2FsZVRleHQoa2V5LCB2YWx1ZVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJBcygpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5vd25lcikge1xuICAgICAgcmV0dXJuIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLm93bmVyLmdldFJlbmRlcmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXI7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm93bmVyLmdldFJlbmRlcmVyKHRoaXMubmFtZSkgfHwgTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZXF1YWxzKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSByZXR1cm4gdGhpcy5zaGFyZWREYXRhLmVxdWFscyhvYmopO1xuICAgIGlmICghb2JqIHx8ICFvYmoudmFsdWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlcywgb2JqLnZhbHVlcyk7XG4gIH1cbiAgcHJpdmF0ZSBzZWFyY2hhYmxlVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgc2V0RmluZFRleHQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PSB0ZXh0KSByZXR1cm47XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcbiAgICBpZiAoIXRoaXMuc2VhcmNoYWJsZVRleHQpIHtcbiAgICAgIGxldCB0ZXh0T3JIdG1sID0gdGhpcy50ZXh0T3JIdG1sO1xuICAgICAgdGhpcy5zZWFyY2hhYmxlVGV4dCA9ICEhdGV4dE9ySHRtbCA/IHRleHRPckh0bWwudG9Mb3dlckNhc2UoKSA6IFwiXCI7XG4gICAgfVxuICAgIHZhciBzdHIgPSB0aGlzLnNlYXJjaGFibGVUZXh0O1xuICAgIHZhciBpbmRleCA9ICEhc3RyICYmICEhdGV4dCA/IHN0ci5pbmRleE9mKHRleHQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgIGlmIChpbmRleCAhPSB1bmRlZmluZWQgfHwgdGhpcy5zZWFyY2hJbmRleCAhPSBpbmRleCkge1xuICAgICAgdGhpcy5zZWFyY2hJbmRleCA9IGluZGV4O1xuICAgICAgaWYgKCEhdGhpcy5vblNlYXJjaENoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vblNlYXJjaENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoSW5kZXggIT0gdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBvbkNoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHt9XG4gIHByaXZhdGUgaGFzSHRtbFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5vd25lciB8fCAhdGhpcy51c2VNYXJrZG93bikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZW5kZXJlZFRleHQgPSB0aGlzLmNhbGN1bGF0ZWRUZXh0O1xuICAgIGlmICghcmVuZGVyZWRUZXh0KSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICAoPGFueT50aGlzKS5odG1sVmFsdWVzW2xvY10gPSB0aGlzLm93bmVyLmdldE1hcmtkb3duSHRtbChcbiAgICAgIHJlbmRlcmVkVGV4dCxcbiAgICAgIHRoaXMubmFtZVxuICAgICk7XG4gICAgcmV0dXJuICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0SHRtbFZhbHVlKCk6IHN0cmluZyB7XG4gICAgdmFyIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICByZXR1cm4gKDxhbnk+dGhpcykuaHRtbFZhbHVlc1tsb2NdO1xuICB9XG4gIHByaXZhdGUgZGVsZXRlVmFsdWVzRXF1YWxzVG9EZWZhdWx0KGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChrZXlzW2ldID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSBjb250aW51ZTtcbiAgICAgIGlmICh0aGlzLmdldFZhbHVlKGtleXNbaV0pID09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlKGtleXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFZhbHVlKGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHJldHVybiB0aGlzLnNoYXJlZERhdGEuZ2V0VmFsdWUobG9jKTtcbiAgICByZXR1cm4gKDxhbnk+dGhpcykudmFsdWVzW2xvY107XG4gIH1cbiAgcHJpdmF0ZSBzZXRWYWx1ZShsb2M6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgdGhpcy5zaGFyZWREYXRhLnNldFZhbHVlKGxvYywgdmFsdWUpO1xuICAgIGVsc2UgKDxhbnk+dGhpcykudmFsdWVzW2xvY10gPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGRlbGV0ZVZhbHVlKGxvYzogc3RyaW5nKSB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSB0aGlzLnNoYXJlZERhdGEuZGVsZXRlVmFsdWUobG9jKTtcbiAgICBlbHNlIGRlbGV0ZSAoPGFueT50aGlzKS52YWx1ZXNbbG9jXTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlc0tleXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKTtcbiAgfVxufVxuLyoqXG4gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyB0aGUgbGlzdCBvZiBzdHJpbmdzIHRoYXQgc3VwcG9ydHMgbXVsdGktbGFuZ3VhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxpemFibGVTdHJpbmdzIGltcGxlbWVudHMgSUxvY2FsaXphYmxlU3RyaW5nIHtcbiAgcHJpdmF0ZSB2YWx1ZXM6IGFueSA9IHt9O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3duZXI6IElMb2NhbGl6YWJsZU93bmVyKSB7fVxuICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lciAmJiB0aGlzLm93bmVyLmdldExvY2FsZSA/IHRoaXMub3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnNldFZhbHVlKFwiXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlLmpvaW4oXCJcXG5cIikgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSAhIXZhbCA/IHZhbC5zcGxpdChcIlxcblwiKSA6IFtdO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUobG9jLCAhbG9jIHx8IGxvYyA9PT0gdGhpcy5sb2NhbGUpO1xuICAgIGlmICghcmVzIHx8ICFBcnJheS5pc0FycmF5KHJlcykgfHwgcmVzLmxlbmd0aCA9PSAwKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcHVibGljIHNldExvY2FsZVRleHQobG9jOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciB2YWwgPSAhIW5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoXCJcXG5cIikgOiBudWxsO1xuICAgIHRoaXMuc2V0VmFsdWUobG9jLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShsb2M6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShsb2MpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVDb3JlKGxvYzogc3RyaW5nLCB1c2VEZWZhdWx0OiBib29sZWFuID0gdHJ1ZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIGxvYyA9IHRoaXMuZ2V0TG9jYWxlKGxvYyk7XG4gICAgaWYgKHRoaXMudmFsdWVzW2xvY10pIHJldHVybiB0aGlzLnZhbHVlc1tsb2NdO1xuICAgIGlmICh1c2VEZWZhdWx0KSB7XG4gICAgICB2YXIgZGVmTG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgICBpZiAobG9jICE9PSBkZWZMb2MpIHJldHVybiB0aGlzLnZhbHVlc1tkZWZMb2NdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKGxvYzogc3RyaW5nLCB2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICBsb2MgPSB0aGlzLmdldExvY2FsZShsb2MpO1xuICAgIGlmICghdmFsIHx8IHZhbC5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW2xvY107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzW2xvY10gPSB2YWw7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXNLZXlzKCkubGVuZ3RoID09IDA7XG4gIH1cbiAgcHJpdmF0ZSBnZXRMb2NhbGUobG9jOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghIWxvYykgcmV0dXJuIGxvYztcbiAgICBsb2MgPSB0aGlzLmxvY2FsZTtcbiAgICByZXR1cm4gISFsb2MgPyBsb2MgOiBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbiAgcHVibGljIGdldEpzb24oKTogYW55IHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoXG4gICAgICBrZXlzLmxlbmd0aCA9PSAxICYmXG4gICAgICBrZXlzWzBdID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lICYmXG4gICAgICAhc2V0dGluZ3Muc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdFxuICAgIClcbiAgICAgIHJldHVybiAoPGFueT50aGlzKS52YWx1ZXNba2V5c1swXV07XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICB9XG4gIHB1YmxpYyBzZXRKc29uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXksIHZhbHVlW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFZhbHVlc0tleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYXJhYmljU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItin2YTYs9in2KjZglwiLFxuICBwYWdlTmV4dFRleHQ6IFwi2KfZhNiq2KfZhNmKXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLYpdix2LPYp9mEINin2YTYqNmK2KfZhtin2KpcIixcbiAgcHJldmlld1RleHQ6IFwi2YXYudin2YrZhtipXCIsXG4gIGVkaXRUZXh0OiBcItiq2LnYr9mK2YRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItio2K/Yp9mK2KlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLZhti1INii2K7YsVwiLFxuICBub25lSXRlbVRleHQ6IFwi2YTYpyDYtNmK2KFcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi2KfYrtiq2LEg2KfZhNmD2YRcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcInsxfSDYtdmB2K3YqSB7MH0g2YXZhlwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi2LPYrNmEIHswfSDZhdmGIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi2KrZhdiqINin2YTYpdis2KfYqNipINi52YTZiSDYo9iz2KbZhNipIHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCLZhNinINiq2YjYrNivINi12YHYrdipINmF2LHYptmK2Kkg2KPZiCDYs9ik2KfZhCDZgdmKINin2YTZhtmF2YjYsNisXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi2LTZg9ix2Kcg2YTZg9mFINmE2KfYs9iq2YPZhdin2YQg2KfZhNmG2YXZiNiw2KwhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLYqti42YfYsSDYs9is2YTYp9iq2YbYpyDYo9mG2YMg2YLYryDYo9mD2YXZhNiqINmH2LDYpyDYp9mE2KfYs9iq2LfZhNin2Lkg2KjYp9mE2YHYudmELlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIi4uLtmK2KrZhSDYqtit2YXZitmEINin2YTZhtmF2YjYsNisXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIi4uLtin2K7YqtixXCIsXG4gIHZhbHVlOiBcItin2YTZgtmK2YXYqVwiLFxuICByZXF1aXJlZEVycm9yOiBcIi7Zitix2KzZiSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2KfZhNiz2KTYp9mEXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItin2YTYsdis2KfYoSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2LPYpNin2YQg2YjYp9it2K8g2LnZhNmJINin2YTYo9mC2YQuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi2YrYsdis2Ykg2KfZhNil2KzYp9io2Kkg2LnZhNmJINin2YTYo9iz2KbZhNipINmB2Yog2KzZhdmK2Lkg2KfZhNi12YHZiNmBXCIsXG4gIG51bWVyaWNFcnJvcjogXCLZitis2Kgg2KPZhiDYqtmD2YjZhiDYp9mE2YLZitmF2Kkg2LHZgtmF2YrYqS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INit2LHZiNmBXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2KPZgtmEINmF2YYgezB9INit2LHZiNmBXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi2YrYsdis2Ykg2KXYr9iu2KfZhCDYo9mD2KvYsSDZhdmGIHswfSDZiNij2YLZhCDZhdmGIHsxfSDYrdix2YjZgVwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItmK2LHYrNmJINmF2YTYoSDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INin2YTYtdmB2YjZgVwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLZitix2KzZiSDYqtit2K/ZitivINmF2Kcg2YTYpyDZitmC2YQg2LnZhiB7MH0g2KfZhNmF2KrYutmK2LHYp9iqXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItmK2LHYrNmJINiq2K3Yr9mK2K8g2YXYpyDZhNinINmK2LLZitivINi52YYgezB9INin2YTZhdiq2LrZitix2KfYqlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwi2YgnezB9JyDZitis2Kgg2KPZhiDYqtmD2YjZhiDZhdiz2KfZiNmK2Kkg2KPZiCDYo9mD2KvYsSDZhdmGIHsxfSDZiNiq2LPYp9mI2Yog2KPZiCDYo9mC2YQg2YXZhiB7Mn3Yp1wiLFxuICBudW1lcmljTWluOiBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZg9ir2LEg2YXZhiB7MX3Yp1wiLFxuICBudW1lcmljTWF4OiBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZgtmEINmF2YYgezF92KdcIixcbiAgaW52YWxpZEVtYWlsOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINio2LHZitivINin2YTZg9iq2LHZiNmG2Yog2LXYrdmK2K1cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi2YrYrNioINij2YYg2YrYudix2LYg2KfZhNiq2LnYqNmK2LE6IHswfSAn2LXZiNin2KgnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi2LfZhNioINil2LHYrNin2Lkg2K7Yt9ijICd7MH0nLiB7MX3Yp1wiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi2LnYp9ivINi32YTYqCDYp9mE2KjZitin2YbYp9iqINmB2KfYsdi6INij2YggJ9in2YTZhdiz2KfYsScg2LrZitixINi12K3ZititIFwiLFxuICBleGNlZWRNYXhTaXplOiBcItmK2YbYqNi62Yog2KPZhNinINmK2KrYrNin2YjYsiDYrdis2YUg2KfZhNmF2YTZgSB7MH3Yp1wiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2YLZitmF2Kkg2KPYrtix2YlcIixcbiAgdXBsb2FkaW5nRmlsZTogXCLYqtit2YXZitmEINin2YTZhdmE2YEg2KfZhNiu2KfYtSDYqNmDLiDZitix2KzZiSDYp9mE2KfZhtiq2LjYp9ixINi52K/YqSDYq9mI2KfZhiDZiNin2YTZhdit2KfZiNmE2Kkg2YTYp9it2YLZi9inXCIsXG4gIGxvYWRpbmdGaWxlOiBcItis2KfYsSDYp9mE2KrYrdmF2YrZhC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItin2K7YqtixINin2YTZhdmE2YHYp9iqLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLZhNmFINiq2YLZhSDYqNin2K7YqtmK2KfYsSDZhdmE2YFcIixcbiAgY29uZmlybURlbGV0ZTogXCLZh9mEINiq2LHZitivINit2LDZgSDYp9mE2LPYrNmE2J9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLZitis2Kgg2KPZhiDYqtmD2YjZhiDZh9iw2Ycg2KfZhNmC2YrZhdipINmB2LHZitiv2KkuXCIsXG4gIGFkZENvbHVtbjogXCLYo9i22YEg2KfZhNi52YXZiNivXCIsXG4gIGFkZFJvdzogXCLYp9i22KfZgdipINi12YFcIixcbiAgcmVtb3ZlUm93OiBcItil2LLYp9mE2Kkg2LXZgVwiLFxuICBhZGRQYW5lbDogXCLYp9i22YEg2KzYr9mK2K9cIixcbiAgcmVtb3ZlUGFuZWw6IFwi2KXYstin2YTYqVwiLFxuICBjaG9pY2VzX0l0ZW06IFwi2KjZhtivXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi2LnZhdmI2K9cIixcbiAgbWF0cml4X3JvdzogXCLYtdmBXCIsXG4gIHNhdmluZ0RhdGE6IFwi2YrYqtmFINit2YHYuCDYp9mE2YbYqtin2KbYrCDYudmE2Ykg2KfZhNiu2KfYr9mFIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi2K3Yr9irINiu2LfYoyDZiNmE2YUg2YbYqtmF2YPZhiDZhdmGINit2YHYuCDYp9mE2YbYqtin2KbYrC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi2KrZhSDYrdmB2Lgg2KfZhNmG2KrYp9im2Kwg2KjZhtis2KfYrSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItit2KfZiNmEINmF2KzYr9iv2KdcIixcbiAgdGltZXJNaW46IFwi2K/ZgtmK2YLYqVwiLFxuICB0aW1lclNlYzogXCLYq9in2YbZitipXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi2YTZgtivINij2YbZgdmC2KogezB9INi52YTZiSDZh9iw2Ycg2KfZhNi12YHYrdipINmIIHsxfSDYpdis2YXYp9mE2KfZiy5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi2YTZgtivINij2YbZgdmC2KogezB9INi52YTZiSDZh9iw2Ycg2KfZhNi12YHYrdipLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDYpdis2YXYp9mE2KfZiy5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDZhdmGIHsxfSDZgdmKINmH2LDZhyDYp9mE2LXZgdit2Kkg2YggezJ9INmF2YYg2KXYrNmF2KfZhNmKIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi2YTZgtivINij2YbZgdmC2KogezB9INmF2YYgezF9INmB2Yog2YfYsNmHINin2YTYtdmB2K3YqS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLZhNmC2K8g2KPZhtmB2YLYqiB7MH0g2YXZhiDYpdis2YXYp9mE2YogezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi2YbYuNmK2YFcIixcbiAgY2xlYXJDYXB0aW9uOiBcItmI2KfYttitXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItin2K7YqtixINmF2YTZgVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLZgtmFINio2KXYstin2YTYqSDZh9iw2Kcg2KfZhNmF2YTZgVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItmG2LnZhVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi2YTYp1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLZh9mEINij2YbYqiDZhdiq2KPZg9ivINij2YbZgyDYqtix2YrYryDYpdiy2KfZhNipINmH2LDYpyDYp9mE2YXZhNmBOiB7MH3Yn1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi2YfZhCDYo9mG2Kog2YXYqtij2YPYryDYo9mG2YMg2KrYsdmK2K8g2KXYstin2YTYqSDZg9in2YHYqSDYp9mE2YXZhNmB2KfYqtifXCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLYudmG2YjYp9mGINin2YTYs9ik2KfZhFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJhclwiXSA9IGFyYWJpY1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJhclwiXSA9IFwi2KfZhNi52LHYqNmK2KlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYmFzcXVlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkF1cnJla29hXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJIdXJyZW5nb2FcIixcbiAgY29tcGxldGVUZXh0OiBcIkJ1a2F0dVwiLFxuICBwcmV2aWV3VGV4dDogXCJBdXJyZWJpc3RhXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhdHVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkhhc2lcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJCZXN0ZSBiYXQgKHplaGF6dHUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJCYXQgZXJlIGV6XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkd1enRpYSBoYXV0YXR1XCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MX0tKGUpdGlrIHswfSBvcnJpYWxkZVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IGVycmlnaXN0cm8gezF9LShlKXRpa1wiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiRXJhbnR6dW5kYWtvIGdhbGRlcmFrIHswfS97MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRXogZGFnbyBvcnJpYWxkZSBiaXN0YXJhZ2FycmlyaWsgZWRvIGV6IGRhZ28gZ2FsZGVyYXJpay5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJFc2tlcnJpayBhc2tvIGdhbGRldGVnaWEgZXJhbnR6dXRlYWdhdGlrIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIkd1cmUgZGF0dWVrIGRpb3RlIGRhZ29lbmVrbyBnYWxkZXRlZ2lhIGVyYW50enVuIGR1enVsYS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJHYWxkZXRlZ2lhIGthcmdhdHplbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJIYXV0YXR1Li4uXCIsXG4gIHZhbHVlOiBcImJhbGlvYVwiLFxuICByZXF1aXJlZEVycm9yOiBcIk1lc2VkZXosIGdhbGRlcmEgZXJhbnR6dW4uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIk1lc2VkZXosIGd1dHhpZW5leiBnYWxkZXJhIGJhdCBlcmFudHp1bi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJNZXNlZGV6LCBlcnJlbmthZGFrbyBnYWxkZXJhIGd1enRpYWsgZXJhbnR6dW4uXCIsXG4gIG51bWVyaWNFcnJvcjogXCJFc3RpbWF6aW9hIHplbmJha2l6a29hIGl6YW4gYmVoYXIgZHUuXCIsXG4gIG1pbkVycm9yOiBcIkJhbGlvYSBleiBkYSB7MH0gYmFpbm8gdHhpa2lhZ29hIGl6YW4gYmVoYXJcIixcbiAgbWF4RXJyb3I6IFwiQmFsaW9hIGV6IGRhIHswfSBiYWlubyBoYW5kaWFnb2EgaXphbiBiZWhhclwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIk1lc2VkZXosIGd1dHhpZW5leiB7MH0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJNZXNlZGV6LCBnZWhpZW5leiB7MH0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJNZXNlZGV6LCBnZWhpZW5leiB7MH0gZXRhIGd1dHhpZW5leiB7MX0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNZXNlZGV6LCBndXR4aWVuZXogezB9IGVycmVua2FkYSBiZXRlLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJNZXNlZGV6LCBndXR4aWVuZXogezB9IGF1a2VyYSBoYXV0YXR1LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJNZXNlZGV6LCB7MH0gYXVrZXJhIGJhaW5vIGdlaGlhZ28gZXogaGF1dGF0dS5cIixcbiAgbnVtZXJpY01pbk1heDogXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyB7MX0gYmFpbm8gaGFuZGlhZ29hIGVkbyBiZXJkaW4gaXphbiBiZWhhciBkYVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHsxfSBiYWlubyB0eGlraWFnbyBlZG8gYmVyZGluIGl6YW4gYmVoYXIgZGFcIixcbiAgaW52YWxpZEVtYWlsOiBcIk1lc2VkZXosIGJhbGlvemtvIGVtYWlsYSBpZGF0eiBlemF6dS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9IGFkaWVyYXpwZW5hayAnZWdpYXprb2EnIGl0enVsaSBiZWhhcmtvIGx1a2UuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJFc2thZXJhayAnezB9JyBlcnJvcmVhIGl0enVsaSBkdS4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJMYSBzb2xpY2l0dWQgcmVncmVzw7MgdmFjw61vIGRlIGRhdGEgbyBsYSBwcm9waWVkYWQgJ3RyYXllY3RvcmlhJyBubyBlcyBjb3JyZWN0YVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZpdHhhdGVnaWFyZW4gdGFtYWluYSBleiBkYSB7MH0gYmFpbm8gaGFuZGlhZ29hIGl6YW4gYmVoYXIuXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNZXNlZGV6LCBiZXN0ZSBlc3RpbWF6aW9hIGdlaGl0dS5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJadXJlIGZpdHhhdGVnaWEgaWdvdHplbiBhcmkgZGEuIE1lc2VkZXosIHNlZ3VuZG8gYmF0enVrIGl0eGFyb24gZXRhIHNhaWF0dSBiZXJyaXJvLlwiLFxuICBsb2FkaW5nRmlsZTogXCJLYXJnYXR6ZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJGaXR4YXRlZ2lhKGspIGhhdXRhdHUuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkV6IGRhIGlub2xha28gZml0eGF0ZWdpcmlrIGhhdXRhdHVcIixcbiAgY29uZmlybURlbGV0ZTogXCLCv0VycmVnaXN0cm9hIGJvcnJhdHUgbmFoaSBhbCBkdXp1P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkJhbGlvIGhhdSBiYWthcnJhIGl6YW4gYmVoYXIgZHUuXCIsXG4gIGFkZENvbHVtbjogXCJadXRhYmUgYmF0IGdlaGl0dVwiLFxuICBhZGRSb3c6IFwiRXJyZW5rYWRhIGJhdCBnZWhpdHVcIixcbiAgcmVtb3ZlUm93OiBcIkVycmVua2FkYSBiYXQga2VuZHVcIixcbiAgZW1wdHlSb3dzVGV4dDogXCJFeiBkYWdvIGVycmVua2FkYXJpay5cIixcbiAgYWRkUGFuZWw6IFwiQmVycmlhIGdlaGl0dVwiLFxuICByZW1vdmVQYW5lbDogXCJLZW5kdVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiYXJ0aWt1bHVhXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiWnV0YWJlYVwiLFxuICBtYXRyaXhfcm93OiBcIkVycmVua2FkYVwiLFxuICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGVzdHVhXCIsXG4gIHNhdmluZ0RhdGE6IFwiRXJhbnR6dW5hayB6ZXJiaXR6YXJpYW4gZ29yZGV0emVuIGFyaSBkaXJhLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJFcnJvcmVyZW4gYmF0IGdlcnRhdHUgZXRhIGVyYW50enVuYWsgZXogZGlyYSB6ZXJiaXR6YXJpYW4gZ29yZGUgYWhhbCBpemFuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJFcmFudHp1bmFrIGVnb2tpIGdvcmRlIGRpcmEhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJCZXJyaXJvIHNhaWF0dS5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlZ1wiLFxuICB0aW1lclNwZW50QWxsOiBcInswfSBlcmFiaWxpIGR1enUgb3JyaWFsZGUgaG9uZXRhbiBldGEgb3JvdGFyYSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlp1ayB7MH0gZXJhYmlsaSBkdXp1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIk9yb3RhcmEgZ2FzdGF0dSBkdXp1LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcInswfSBnYXN0YXR1IGR1enUgezF9LShlKXRpayBvcnJpYWxkZSBob25ldGFuIGV0YSBvcm90YXJhIHsyfSB7M30tKGUpdGlrLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJ7MH0gZ2FzdGF0dSBkdXp1IG9ycmlhbGRlIGhvbmV0YW4gezF9LShlKXRpay5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJadWsgb3JvdGFyYSB7MH0gZ2FzdGF0dSBkdXp1IHsxfS0oZSl0aWsuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJHYXJiaXR1XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJIdXN0dVwiLFxuICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaW5hdHUgaGVtZW5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRml0eGF0ZWdpYSBoYXV0YXR1XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZpdHhhdGVnaSBoYXUgZXphYmF0dVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkJhaVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiRXpcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiWml1ciB6YXVkZSBodXJyZW5nbyBmaXR4YXRlZ2lhIGV6YWJhdHUgbmFoaSBkdXp1bGE6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlppdXIgYWwgemF1ZGUgZml0eGF0ZWdpIGd1enRpYWsgZXphYmF0dSBuYWhpIGRpdHV6dWxhP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiR2FsZGVyYXJlbiBpemVuYnVydWFcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkV6ZXp0YXR1XCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkV6YXJyaVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJldVwiXSA9IGJhc3F1ZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJldVwiXSA9IFwiRXVza2FyYVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBidWxnYXJpYW5TdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0J3QsNC/0YDQtdC0XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQmtGA0LDQuVwiLFxuICBwcmV2aWV3VGV4dDogXCLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y9cIixcbiAgZWRpdFRleHQ6IFwi0YDQtdC00LDQutGC0LjRgNCw0L3QtVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J3QsNGH0LDQu9C+XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQviAo0L7Qv9C40YjQtdGC0LUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC40YLQviDQtdC00LjQvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktGB0LjRh9C60LhcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItGB0YLRgC4gezB9LCDQvtCx0YnQviDRgdGC0YAuIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgSB7MH0g0L7RgiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCe0YLQs9C+0LLQvtGA0LXQvdC4INC90LAgezB9IC8gezF9INCy0YrQv9GA0L7RgdCwXCIsXG4gIGVtcHR5U3VydmV5OiBcItCQ0L3QutC10YLQsNGC0LAg0L3QtSDRgdGK0LTRitGA0LbQsCDQstC40LTQuNC80Lgg0YHRgtGA0LDQvdC40YbQuCDQuNC70Lgg0LLRitC/0YDQvtGB0LguXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JHQu9Cw0LPQvtC00LDRgNC40Lwg0LLQuCDQt9CwINGD0YfQsNGB0YLQuNC10YLQviDQsiDQsNC90LrQtdGC0LDRgtCwIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcItCY0LfQs9C70LXQttC00LAsINGH0LUg0LLQuNC1INCy0LXRh9C1INGB0YLQtSDQv9C+0L/RitC70L3QuNC70Lgg0LDQvdC60LXRgtCw0YLQsC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQsNC90LrQtdGC0LDRgtCwLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUuLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQnNC+0LvRjywg0L7RgtCz0L7QstC+0YDQtdGC0LUg0L3QsCDRgdC70LXQtNC90LjRjyDQstGK0L/RgNC+0YEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQv9C+0L3QtSDQvdCwINC10LTQuNC9INC+0YIg0LLRitC/0YDQvtGB0LjRgtC1LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQvdCwINCy0YrQv9GA0L7RgdC40YLQtSDQvdCwINCy0YHQuNGH0LrQuCDRgNC10LTQvtCy0LUuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRh9C40YHQu9C+LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC/0L7QvdC1IHswfSDRgdC40LzQstC+0LvQsC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQnNC+0LvRjywg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvdC1INC/0L7QstC10YfQtSDQvtGCIHswfSDRgdC40LzQstC+0LvQsC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC/0L7QstC10YfQtSDQvtGCIHswfSDQuCDQv9C+LdC80LDQu9C60L4g0L7RgiB7MX0g0YHQuNC80LLQvtC70LAuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0JzQvtC70Y8sINC/0L7Qv9GK0LvQvdC10YLQtSDQv9C+0L3QtSB7MH0g0YDQtdC00LAuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCc0L7Qu9GPLCDQuNC30LHQtdGA0LXRgtC1INC/0L7QvdC1IHswfSDQstCw0YDQuNCw0L3RgtCwLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQnNC+0LvRjywg0LjQt9Cx0LXRgNC10YLQtSDQvdC1INC/0L7QstC10YfQtSDQvtGCIHswfSDQstCw0YDQuNCw0L3RgtCwLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAgJ3swfScg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MX0g0Lgg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3QvNCw0LvQutCwINC+0YIgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAgJ3swfScg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MX1cIixcbiAgbnVtZXJpY01heDogXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdC80LDQu9C60LAg0L7RgiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INCy0LDQu9C40LTQtdC9INCw0LTRgNC10YEg0L3QsCDQtdC70LXQutGC0YDQvtC90L3QsCDQv9C+0YnQsC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjQt9GA0LDQt9GK0YI6IHswfSDRgtGA0Y/QsdCy0LAg0LTQsCDQtNCw0LLQsCDRgNC10LfRg9C70YLQsNGCICd0cnVlJyAo0LjRgdGC0LjQvdCwKS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCX0LDRj9Cy0LrQsNGC0LAg0LLQvtC00Lgg0LTQviDQs9GA0LXRiNC60LAgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQl9Cw0Y/QstC60LDRgtCwINC90LUg0LLRgNGK0YnQsCDQtNCw0L3QvdC4INC40LvQuCDRh9Cw0YHRgtGC0LAgJ3BhdGgnICjQv9GK0YIg0LTQviDRgtGK0YDRgdC10L3QuNGPINGA0LXRgdGD0YDRgSDQvdCwINGB0YrRgNCy0YrRgNCwKSDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQt9Cw0LTQsNC00LXQvdCwXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KDQsNC30LzQtdGA0YrRgiDQvdCwINGE0LDQudC70LAg0YHQu9C10LTQstCwINC00LAg0L3QtSDQv9GA0LXQstC40YjQsNCy0LAgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LTRgNGD0LPQsNGC0LAg0YHRgtC+0LnQvdC+0YHRgi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCS0LDRiNC40YIg0YTQsNC50Lsg0YHQtSDQt9Cw0YDQtdC20LTQsCDQvdCwINGB0YrRgNCy0YrRgNCwLiDQnNC+0LvRjywg0LjQt9GH0LDQutCw0LnRgtC1INC90Y/QutC+0LvQutC+INGB0LXQutGD0L3QtNC4INC4INGC0L7Qs9Cw0LLQsCDQvtC/0LjRgtCy0LDQudGC0LUg0L7RgtC90L7QstC+LlwiLFxuICBsb2FkaW5nRmlsZTogXCLQl9Cw0YDQtdC20LTQsNC90LUuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQmNC30LHQtdGA0LXRgtC1INGE0LDQudC7KNC+0LLQtSkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCd0Y/QvNCwINC40LfQsdGA0LDQvSDRhNCw0LnQu1wiLFxuICBjb25maXJtRGVsZXRlOiBcItCW0LXQu9Cw0LXRgtC1INC70Lgg0LTQsCDQuNC30YLRgNC40LXRgtC1INC30LDQv9C40YHQsD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRg9C90LjQutCw0LvQvdCwLlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7Qu9C+0L3QsFwiLFxuICBhZGRSb3c6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtFwiLFxuICByZW1vdmVSb3c6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgNC10LRcIixcbiAgYWRkUGFuZWw6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDQvdC10LtcIixcbiAgcmVtb3ZlUGFuZWw6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0L3QtdC7XCIsXG4gIGNob2ljZXNfSXRlbTogXCLQtdC70LXQvNC10L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QsFwiLFxuICBtYXRyaXhfcm93OiBcItCg0LXQtFwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRgtCw0YLQuNGC0LUg0YHQtSDQt9Cw0L/QsNC30LLQsNGCINC90LAg0YHRitGA0LLRitGA0LAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOlxuICAgIFwi0J/QvtGA0LDQtNC4INCy0YrQt9C90LjQutC90LDQu9CwINCz0YDQtdGI0LrQsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1INC90LUg0LzQvtC20LDRhdCwINC00LAg0LHRitC00LDRgiDQt9Cw0L/QsNC30LXQvdC4LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INCx0Y/RhdCwINC30LDQv9Cw0LfQtdC90Lgg0YPRgdC/0LXRiNC90L4hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQndC+0LIg0L7Qv9C40YJcIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1IHswfSDQvdCwINGC0LDQt9C4INGB0YLRgNCw0L3QuNGG0LAg0Lgg0L7QsdGJ0L4gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSB7MH0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1INC+0LHRidC+IHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCS0LjQtSDQuNC30L/QvtC30LLQsNGF0YLQtSB7MH0g0L7RgiB7MX0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwINC4INC+0LHRidC+IHsyfSDQvtGCIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUgezB9INC+0YIgezF9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSDQvtCx0YnQviB7MH0g0L7RgiB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQmNC30YfQuNGB0YLQstCw0L3QtVwiLFxuICBjbGVhckNhcHRpb246IFwi0J3QsNGH0LDQu9C90L4g0YHRitGB0YLQvtGP0L3QuNC1XCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUg0YTQsNC50LtcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0JTQsFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi0J3QtVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LjRgdC60LDRgtC1INC00LAg0L/RgNC10LzQsNGF0L3QtdGC0LUg0YLQvtC30Lgg0YTQsNC50Ls6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCd0LDQuNGB0YLQuNC90LAg0LvQuCDQuNGB0LrQsNGC0LUg0LTQsCDQv9GA0LXQvNCw0YXQvdC10YLQtSDQstGB0LjRh9C60Lgg0YTQsNC50LvQvtCy0LU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQl9Cw0LPQu9Cw0LLQuNC1INC90LAg0LLRitC/0YDQvtGB0LBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiYmdcIl0gPSBidWxnYXJpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiYmdcIl0gPSBcItCx0YrQu9Cz0LDRgNGB0LrQuFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBjYXRhbGFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZWfDvGVudFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIlVuIGFsdHJlIChkZXNjcmlndWkpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6BnaW5hIHswfSBkZSB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGkgaGEgY2FwIHDDoGdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGEgbCdlbnF1ZXN0YS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJHcsOgY2llcyBwZXIgY29tcGxldGFyIGwnZW5xdWVzdGEhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTCdlbnF1ZXN0YSBzJ2VzdMOgIGNhcnJlZ2FudCAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNjaW9uYSAuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJTaSB1cyBwbGF1IGNvbnRlc3RpIGxhIHByZWd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlNpIHVzIHBsYXUgY29udGVzdGkgbGVzIHByZWd1bnRlcyBkZSBjYWRhIGZpbGVyYS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkwnZXN0aW1hY2nDsyBoYSBkZSBzZXIgbnVtw6hyaWNhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlNpIHVzIHBsYXUgZW50cmUgYWxtZW55cyB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtZW55cyBkZSB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtw6lzIGRlIHswfSBpIG1lbnlzIGRlIHsxfSBzw61tYm9scy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJTaSB1cyBwbGF1IG9tcGxpIGFsbWVueXMgezB9IGZpbGVyZXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNpIHVzIHBsYXUgc2VsZWNjaW9uaSBhbG1lbnlzIHswfSB2YXJpYW50cy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2kgdXMgcGxhdSBzZWxlY2Npb25pIG5vIG3DqXMgZGUgezB9IHZhcmlhbnRzLlwiLFxuICBudW1lcmljTWluTWF4OiBcIkVsICd7MH0nIGRldSBzZXIgaWd1YWwgbyBtw6lzIGRlIHsxfSBpIGlndWFsIG8gbWVueXMgZGUgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiRWwgJ3swfScgaGEgZGUgc2VyIGlndWFsIG8gbcOpcyBkZSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJFbCAnezB9JyBoYSBkZSBzZXIgaWd1YWwgbyBtZW55cyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlNpIHVzIHBsYXUgYWZlZ2l1IHVuIGNvcnJldSBlbGVjdHLDsm5pYyB2w6BsaWQuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSBzb2zCt2xpY2l0dWQgdmEgdG9ybmFyIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgc29swrdsaWNpdHVkIHZhIHRvcm5hciBidWlkYSBkZSBkYXRlcyBvIGxhIHByb3BpZXRhdCAndHJhamVjdMOycmlhJyBubyDDqXMgY29ycmVjdGFcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJMYSBtaWRhIGRlIGwnYXJ4aXUgbm8gcG90IGV4Y2VkaXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiU2kgdXMgcGxhdSBhZmVnaXUgbCdhbHRyYSBlc3RpbWFjacOzLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRWwgc2V1IGFyeGl1IHMnZXN0w6AgcHVqYW50LiBTaSB1cyBwbGF1IGVzcGVyaSB1bnMgc2Vnb25zIGkgaW50ZW50ZXUtaG8gZGUgbm91LlwiLFxuICBhZGRSb3c6IFwiQWZlZ2l1IHVuYSBmaWxlcmFcIixcbiAgcmVtb3ZlUm93OiBcIkVsaW1pbmFyIHVuYSBmaWxlcmFcIixcbiAgY2hvaWNlc19maXJzdEl0ZW06IFwicHJpbWVyIGFydGljbGVcIixcbiAgY2hvaWNlc19zZWNvbmRJdGVtOiBcInNlZ29uIGFydGljbGVcIixcbiAgY2hvaWNlc190aGlyZEl0ZW06IFwidGVyY2VyIGFydGljbGVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiRmlsZXJhXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY2FcIl0gPSBjYXRhbGFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImNhXCJdID0gXCJjYXRhbMOgXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGNyb2F0aWFuU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZXRob2RuaVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2xqZWRlxIdpXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJLb21wbGV0YW5cIixcbiAgcHJldmlld1RleHQ6IFwiUHJlZ2xlZFwiLFxuICBlZGl0VGV4dDogXCJVcmXEkWl2YW5qZVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiUG/EjWV0YWtcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPc3RhbGkgKG9waXMpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOaXRrb1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTdHJhbmljYSB7MH0gb2QgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJaYXBpc2EgezB9IG9kIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2Rnb3ZvcmlvIG5hIHswfS97MX0gcGl0YW5qYVwiLFxuICBlbXB0eVN1cnZleTogXCJVIGFua2V0aSBuZW1hIHZpZGxqaXZlIHN0cmFuaWNlIGlsaSBwaXRhbmphLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkh2YWxhIHZhbSDFoXRvIHN0ZSB6YXZyxaFpbGkgYW5rZXR1IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTmHFoWkgemFwaXNpIHBva2F6dWp1IGRhIHN0ZSB2ZcSHIHphdnLFoWlsaSBvdnUgYW5rZXR1LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkFua2V0YSBvIHXEjWl0YXZhbmplLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIk9kYWJlcml0ZS4uLlwiLFxuICB2YWx1ZTogXCJ2cmlqZWRub3N0XCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTW9saW0gdmFzIG9kZ292b3JpdGUgbmEgcGl0YW5qZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTW9saW0gdmFzIG9kZ292b3JpdGUgbmEgYmFyZW0gamVkbm8gcGl0YW5qZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJPZGdvdm9yaXRlIG5hIHBpdGFuamEgdSBzdmltIHJlZG92aW1hLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVnJpamVkbm9zdCBiaSB0cmViYWxhIGJpdGkgYnJvasSNYW5hLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlVuZXNpdGUgbmFqbWFuamUgezB9IHpuYWsob3ZhKS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJVbmVzaXRlIG1hbmplIG9kIHswfSB6bmFrKG92YSkuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiVW5lc2l0ZSB2acWhZSBvZCB7MH0gaSBtYW5qZSBvZCB7MX0gem5ha292YS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNb2xpbW8gaXNwdW5pdGUgbmFqbWFuamUgezB9IHJlZGFrYS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiT2RhYmVyaXRlIGJhcmVtIHswfSB2YXJpamFudGUuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk9kYWJlcml0ZSBuZSB2acWhZSBvZCB7MH0gdmFyaWphbnRpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfSdiaSB0cmViYW8gYml0aSBqZWRuYWsgaWxpIHZpxaFlIG9kIHsxfSBpIGplZG5hayBpbGkgbWFuamkgb2QgezJ9LlwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGJpIHRyZWJhbyBiaXRpIGplZG5hayBpbGkgdmnFoWUgb2QgezF9LlwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGJpIHRyZWJhbyBiaXRpIGplZG5hayBpbGkgbWFuamkgb2QgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJVbmVzaXRlIHZhbGphbnUgZS1tYWlsIGFkcmVzdS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiSXpyYXo6IHswfSB0cmViYSB2cmF0aXRpICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlphaHRqZXYgdnJhdGlvIHBvZ3JlxaFrdSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlphaHRqZXYgamUgdnJhdGlvIHByYXpuZSBwb2RhdGtlIGlsaSBqZSAncGF0aCcgc3ZvanN0dm8gbmV0b8SNbmEuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVmVsacSNaW5hIGRhdG90ZWtlIG5lIHNtaWplIHByZWxheml0aSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJVbmVzaXRlIGRydWd1IHZyaWplZG5vc3QuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJWYcWhYSBkYXRvdGVrYSBzZSBwcmVub3NpLiBQcmnEjWVrYWp0ZSBuZWtvbGlrbyBzZWt1bmRpIGkgcG9rdcWhYWp0ZSBwb25vdm5vLlwiLFxuICBsb2FkaW5nRmlsZTogXCJVxI1pdGF2YW5qZS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIk9kYWJlcml0ZSBkYXRvdGVrdS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmlqZSBvZGFicmFuYSBkYXRvdGVrYVwiLFxuICBjb25maXJtRGVsZXRlOiBcIsW9ZWxpdGUgbGkgaXpicmlzYXRpIHphcGlzP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRhIGJpIHZyaWplZG5vc3QgdHJlYmFsYSBiaXRpIGplZGluc3R2ZW5hLlwiLFxuICBhZGRDb2x1bW46IFwiRG9kYXZhbmplIHN0dXBjYVwiLFxuICBhZGRSb3c6IFwiRG9kYXZhbmplIHJlZGFrYVwiLFxuICByZW1vdmVSb3c6IFwiVWtsb25pdGlcIixcbiAgYWRkUGFuZWw6IFwiRG9kYXZhbmplIG5vdmloXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlVrbG9uaXRpXCIsXG4gIGNob2ljZXNfSXRlbTogXCJzdGF2a3VcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTdHVwY2FcIixcbiAgbWF0cml4X3JvdzogXCJSZWRha1wiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdGF0aSBzZSBzcHJlbWFqdSBuYSBwb3NsdcW+aXRlbGp1Li4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEb8WhbG8gamUgZG8gcG9ncmXFoWtlIGkgbmlzbW8gbW9nbGkgc3ByZW1pdGkgcmV6dWx0YXRlLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGkgc3UgdXNwamXFoW5vIHNwcmVtbGplbmkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQb2t1xaFhaiBwb25vdm9cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZpIHN0ZSBwcm92ZWxpIHswfSBuYSBvdm9qIHN0cmFuaWNpIGkgezF9IHVrdXBuby5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiUG90cm/FoWlsaSBzdGUgezB9IG5hIG92dSBzdHJhbmljdS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gaW4gdG90YWwuIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIlZpIHN0ZSBwcm92ZWxpIHswfSBvZCB7MX0gbmEgb3ZvaiBzdHJhbmljaSBpIHsyfSBvZCB7M30gdWt1cG5vLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJQb3Ryb8WhaW8gc2kgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlVrdXBubyBzdGUgcG90cm/FoWlsaSB7MH0gb2QgezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwiT8SNaXN0aXRpXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJPxI1pc3RpdGlcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiT2RhYmVyaXRlIGRhdG90ZWt1XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlVrbG9uaXRlIG92dSBkYXRvdGVrdVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkRhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJKZXN0ZSBsaSBzaWd1cm5pIGRhIMW+ZWxpdGUgdWtsb25pdGkgb3Z1IGRhdG90ZWt1OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJKZXN0ZSBsaSBzaWd1cm5pIGRhIMW+ZWxpdGUgdWtsb25pdGkgc3ZlIGRhdG90ZWtlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTmFzbG92IHBpdGFuamFcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIk90a2F6YXRpXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlByaW1pamVuaXRpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImhyXCJdID0gY3JvYXRpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaHJcIl0gPSBcImhydmF0c2tpXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGN6ZWNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlDFmWVkY2hvesOtXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJEYWzFocOtXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJIb3Rvdm9cIixcbiAgcHJldmlld1RleHQ6IFwiTsOhaGxlZFwiLFxuICBlZGl0VGV4dDogXCJVcHJhdml0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkppbsOhIG9kcG92xJvEjyAobmFwacWhdGUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLFvcOhZG7DvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWeWJyYXQgdsWhZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5hIHswfSB6IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiWsOhem5hbSB7MH0geiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlpvZHBvdsSbemVuw6kgb3TDoXpreTogezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIlByxa96a3VtdSBuZW9ic2FodWplIMW+w6FkbsOpIG90w6F6a3kuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRMSba3VqZW1lIHphIHZ5cGxuxJtuw60gcHLFr3prdW11IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTmHFoWUgesOhem5hbXkgdWthenVqw60sIMW+ZSBqc3RlIHRlbnRvIHByxa96a3VtIGppxb4gZG9rb27EjWlsaS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJQcm9iw61ow6EgbmHEjcOtdMOhbsOtIHByxa96a3VtdS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWeWJlci4uLlwiLFxuICB2YWx1ZTogXCJob2Rub3RhXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIG90w6F6a3UuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBsZWFzZSBhbnN3ZXIgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSB2xaFlY2hueSBvdMOhemt5LlwiLFxuICBudW1lcmljRXJyb3I6IFwiViB0b210byBwb2xpIGx6ZSB6YWRhdCBwb3V6ZSDEjcOtc2xhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBtw6luxJsgbmXFviB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSBhIG3DqW7EmyBuZcW+IHsxfSB6bmFrxa8uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVnlwbMWIdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gxZnDoWRrxa8uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZ5YmVydGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gdmFyaWFudHkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk5ldnliw61yZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IHZhcmlhbnQuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfSBhIG1lbsWhw60gbmVibyByb3ZubyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IG1lbsWhw60gbmVibyByb3ZubyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlphZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJWw71yYXo6IHswfSBieSBtxJtsIHZyw6F0aXQgaG9kbm90dSDigJ50cnVl4oCcLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUG/FvmFkYXZlayB2csOhdGlsIGNoeWJ1ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlBvxb5hZGF2ZWsgbmV2csOhdGlsIGRhdGEgbmVibyBjZXN0YSBqZSBuZXBsYXRuw6FcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpa29zdCBzb3Vib3J1IGJ5IG5lbcSbbGEgYsO9dCB2xJt0xaHDrSBuZcW+IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlphZGVqdGUgcHJvc8OtbSBqaW5vdSBob2Rub3R1LlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIlbDocWhIHNvdWJvciBzZSBuYWhyw6F2w6EuIFprdXN0ZSB0byBwcm9zw61tIHphIG7Em2tvbGlrIHNla3VuZC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTmHEjcOtdMOhbsOtLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVnliZXJ0ZSBzb3Vib3J5IC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVuw60genZvbGVuw70gxb7DoWRuw70gc291Ym9yXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQ2hjZXRlIHNtYXphdCB6w6F6bmFtP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRhdG8gaG9kbm90YSBieSBtxJtsYSBiw710IGplZGluZcSNbsOhLlwiLFxuICBhZGRDb2x1bW46IFwiUMWZaWRhdCBzbG91cGVjXCIsXG4gIGFkZFJvdzogXCJQxZlpZGF0IMWZw6FkZWtcIixcbiAgcmVtb3ZlUm93OiBcIk9kc3RyYW5pdFwiLFxuICBhZGRQYW5lbDogXCJQxZlpZGF0IG5vdsO9XCIsXG4gIHJlbW92ZVBhbmVsOiBcIk9kc3RyYW5pdFwiLFxuICBjaG9pY2VzX0l0ZW06IFwicG9sb8W+a2FcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTbG91cGVjXCIsXG4gIG1hdHJpeF9yb3c6IFwixZjDoWRla1wiLFxuICBzYXZpbmdEYXRhOiBcIlbDvXNsZWRreSBzZSB1a2zDoWRhasOtIG5hIHNlcnZlciAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkRvxaFsbyBrIGNoeWLEmyBhIHbDvXNsZWRreSBqc21lIG5lbW9obGkgdWxvxb5pdC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVsO9c2xlZGt5IGJ5bHkgw7pzcMSbxaFuxJsgdWxvxb5lbnkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJaa3VzIHRvIHpub3Z1XCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIGNlbGtlbSB7MH0gYSBjZWxrZW0gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIHswfS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJDZWxrZW0ganN0ZSB1dHJhdGlsaSB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIHswfSB6IHsxfSBhIGNlbGtlbSB7Mn0geiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgc3Ryw6F2aWxpIHswfSB6IHsxfS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJDZWxrb3bEmyBqc3RlIHV0cmF0aWxpIHswfSB6IHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIsSMaXN0w71cIixcbiAgY2xlYXJDYXB0aW9uOiBcIlByxa9obGVkbsOhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZ5YmVydGUgc291Ym9yXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIk9kZWJlcnRlIHRlbnRvIHNvdWJvclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkFub1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiT3ByYXZkdSBjaGNldGUgb2RlYnJhdCB0ZW50byBzb3Vib3I6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIk9wcmF2ZHUgY2hjZXRlIG9kc3RyYW5pdCB2xaFlY2hueSBzb3Vib3J5P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTsOhemV2IG90w6F6a3lcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3NcIl0gPSBjemVjaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJjc1wiXSA9IFwixI1lxaF0aW5hXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGRhbmlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJUaWxiYWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJWaWRlcmVcIixcbiAgY29tcGxldGVUZXh0OiBcIkbDpnJkaWdcIixcbiAgcHJldmlld1RleHQ6IFwiRm9ycHJlbWllcmVcIixcbiAgZWRpdFRleHQ6IFwiUmVkaWfDqXJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiVmFsZ2ZyaXQgc3Zhci4uLlwiLFxuICBub25lSXRlbVRleHQ6IFwiSW5nZW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVsOmbGcgYWxsZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2lkZSB7MH0gYWYgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJPcHRhZyB7MH0gYWYgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJCZXN2YXJlZGUgezB9IC8gezF9IHNww7hyZ3Ntw6VsXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRlciBlciBpbmdlbiBzeW5saWdlIHNww7hyZ3Ntw6VsLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk1hbmdlIHRhayBmb3IgZGluIGJlc3ZhcmVsc2UhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJWb3JlcyBkYXRhIHZpc2VyIGF0IGR1IGFsbGVyZWRlIGhhciBnZW5uZW1mw7hydCBkZXR0ZSBzcMO4cmdlc2tlbWEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiU3DDuHJnZXNrZW1hZXQgaGVudGVzIGZyYSBzZXJ2ZXJlbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWw6ZsZy4uLlwiLFxuICB2YWx1ZTogXCJ2w6ZyZGlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJCZXN2YXIgdmVubGlnc3Qgc3DDuHJnc23DpWxldC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQmVzdmFyIHZlbmxpZ3N0IG1pbmRzdCDDqXQgc3DDuHJnc23DpWwuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQmVzdmFyIHZlbmxpZ3N0IHNww7hyZ3Ntw6VsIGkgYWxsZSByw6Zra2VyLlwiLFxuICBudW1lcmljRXJyb3I6IFwiQW5naXYgZXQgdGFsLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkFuZ2l2IG1pbmRzdCB7MH0gdGVnbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIHswfSBjaGFyYWN0ZXJzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkFuZ2l2IG1lcmUgZW5kIHswfSBvZyBtaW5kcmUgZW5kIHsxfSB0ZWduLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlVkZnlsZCBtaW5kc3QgezB9IHLDpmtrZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IG1pbmRzdCB7MH0gc3Zhcm11bGlnaGVkKGVyKS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVsOmbGcgdmVubGlnc3QgZsOmcnJlIHswfSBzdmFybXVsaWdoZWRlcihlcikuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9IG9nIGxpZyBtZWQgZWxsZXIgbWluZHJlIGVuZCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJBbmdpdiB2ZW5saWdzdCBlbiBneWxkaWcgZS1tYWlsIGFkcmVzc2UuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlVkdHJ5a2tldDogezB9IHNrYWwgcmV0dXJuZXJlICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGZlamxlbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGluZ2VuIGRhdGEgZWxsZXIgJ3BhdGgnIHBhcmFtZXRlcmVuIGVyIGZvcmtlcnRcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdMO4cnJlbHNlbiBtw6UgaWtrZSBvdmVyc3RpZ2UgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQW5naXYgZW4gdsOmcmRpIGZvciBkaXQgdmFsZ2ZyaWUgc3Zhci5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkRpbiBmaWwgYmxpdmVyIHVwbG9hZGV0LiBWZW50IG5vZ2xlIHNla3VuZGVyIG9nIHByw7h2IGV2ZW50dWVsdCBpZ2VuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJJbmRsw6ZzZXIuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWw6ZsZyBmaWwoZXIpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJJbmdlbiBmaWwgZXIgdmFsZ3RcIixcbiAgY29uZmlybURlbGV0ZTogXCJWaWwgZHUgZmplcm5lIGRlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZW5uZSB2w6ZyZGkgc2thbCB2w6ZyZSB1bmlrLlwiLFxuICBhZGRDb2x1bW46IFwiVGlsZsO4aiBrb2xvbm5lXCIsXG4gIGFkZFJvdzogXCJUaWxmw7hqIHLDpmtrZVwiLFxuICByZW1vdmVSb3c6IFwiRmplcm5cIixcbiAgYWRkUGFuZWw6IFwiVGlsZsO4aiBueVwiLFxuICByZW1vdmVQYW5lbDogXCJGamVyblwiLFxuICBjaG9pY2VzX0l0ZW06IFwidmFsZ1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9ubmVcIixcbiAgbWF0cml4X3JvdzogXCJSw6Zra2VcIixcbiAgc2F2aW5nRGF0YTogXCJSZXN1bHRhdGVybmUgYmxpdmVyIGdlbXQgcMOlIHNlcnZlcmVuLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEZXIgb3BzdG9kIGVuIGZlamwgb2cgdmkga3VubmUgaWtrZSBnZW1tZSByZXN1bHRhdGV0LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGV0IGJsZXYgZ2VtdCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByw7h2IGlnZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkR1IGhhciBicnVndCB7MH0gcMOlIGRlbm5lIHNpZGUgb2cgezF9IGkgYWx0LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJEdSBoYXIgYnJ1Z3QgezB9IHDDpSBkZW5uZSBzaWRlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciBicnVndCB7MH0gaSBhbHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBww6UgZGVubmUgc2lkZSBvZyB7Mn0gYWYgezN9IGkgYWx0LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBww6UgZGVubmUgc2lkZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBpIGFsdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlJlbnNcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkZqZXJuXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlbDpmxnIGZpbFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJGamVybiBkZW5uZSBmaWxcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiSW5nZW5cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgdmlsIGZqZXJuZSBkZW5uZSBmaWw6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVyIGR1IHNpa2tlciBww6UsIGF0IGR1IHZpbCBmamVybmUgYWxsZSBmaWxlcj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlNww7hyZ3Ntw6VscyB0aXRlbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkYVwiXSA9IGRhbmlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJkYVwiXSA9IFwiZGFuc2tcIjtcbiIsIi8vQ3JlYXRlZCBvbiBiZWhhbGYgaHR0cHM6Ly9naXRodWIuY29tL0ZyYW5rMTNcbi8vTW9kaWZpZWQgb24gYmVoYWxmIFJvZWxhbmQgVmVyYmFrZWxcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZHV0Y2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVm9yaWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJWb2xnZW5kZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiVmVyemVuZGVuXCIsXG4gIHByZXZpZXdUZXh0OiBcIlZvb3JiZWVsZFwiLFxuICBlZGl0VGV4dDogXCJCZXdlcmtcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkJlZ2luIG1ldFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFuZGVycywgbmwuXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJHZWVuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdGVlciBBbGxlc1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSB2YW4gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiR2VhbnR3b29yZCB7MH0vezF9IHZyYWdlblwiLFxuICBlbXB0eVN1cnZleTogXCJFciBpcyBnZWVuIHppY2h0YmFyZSBwYWdpbmEgb2YgdnJhYWcgaW4gZGV6ZSB2cmFnZW5saWpzdFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkJlZGFua3Qgdm9vciBoZXQgaW52dWxsZW4gdmFuIGRlIHZyYWdlbmxpanN0XCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgICBcIk9uemUgZ2VnZXZlbnMgdG9uZW4gYWFuIGRhdCBqZSBkZXplIHZyYWdlbmxpanN0IHJlZWRzIGJlYW50d29vcmQgaGVidC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJEZSB2cmFnZW5saWpzdCBpcyBhYW4gaGV0IGxhZGVuLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIktpZXMuLi5cIixcbiAgdmFsdWU6IFwid2FhcmRlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiRGl0IGlzIGVlbiB2ZXJlaXN0ZSB2cmFhZ1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJHZWxpZXZlIHRlbiBtaW5zdGUgZWVuIHZyYWFnIHRlIGJlYW50d29vcmRlbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJEZXplIHZyYWFnIHZlcmVpc3Qgw6nDqW4gYW50d29vcmQgcGVyIHJpalwiLFxuICBudW1lcmljRXJyb3I6IFwiSGV0IGFudHdvb3JkIG1vZXQgZWVuIGdldGFsIHppam5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJWdWwgbWluc3RlbnMgezB9IGthcmFrdGVycyBpblwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkdlbGlldmUgbWluZGVyIGRhbiB7MH0ga2FyYWt0ZXJzIGluIHRlIHZ1bGxlbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJHZWxpZXZlIG1lZXIgZGFuIHswfSBlbiBtaW5kZXIgZGFuIHsxfSBrYXJha3RlcnMgaW4gdGUgdnVsbGVuLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkdlbGlldmUgdGVuIG1pbnN0ZSB7MH0gcmlqZW4gaW4gdGUgdnVsbGVuLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY3RlZXIgbWluaW11bSB7MH0gYW50d29vcmRlblwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTZWxlY3RlZXIgbmlldCBtZWVyIGRhbiB7MH0gYW50d29vcmRlblwiLFxuICBudW1lcmljTWluTWF4OlxuICAgICAgXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9IGVuIGtsZWluZXIgb2YgZ2VsaWprIGFhbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVnVsIGVlbiBnZWxkaWcgZS1tYWlsYWRyZXMgaW5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRGUgdWl0ZHJ1a2tpbmc6IHswfSBtb2V0ICd3YWFyJyB0ZXJ1Z2dldmVuLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRGUgdnJhYWcga2VlcmRlIGVlbiBmb3V0IHRlcnVnICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgICAgXCJEZSB2cmFhZyBnYWYgZWVuIGxlZWcgYW50d29vcmQgdGVydWcgb2YgZGUgJ3BhZCcgZWlnZW5zY2hhcCBpcyBuaWV0IGNvcnJlY3RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEZSBncm9vdHRlIHZhbiBoZXQgYmVzdGFuZCBtYWcgbmlldCBncm90ZXIgemlqbiBkYW4gezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWdWwgaGV0IHZlbGQgJ0FuZGVycywgbmwuJyBpblwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgICAgXCJVdyBiZXN0YW5kIHdvcmR0IG9wZ2VsYWRlbi4gR2VsaWV2ZSBlbmtlbGUgc2Vjb25kZW4gdGUgd2FjaHRlbiBlbiBvcG5pZXV3IHRlIHByb2JlcmVuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJPcGxhZGVuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiS2llcyB1dyBiZXN0YW5kKGVuKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiR2VlbiBiZXN0YW5kIGdla296ZW5cIixcbiAgY29uZmlybURlbGV0ZTogXCJXaWwgamUgZGV6ZSBnZWdldmVucyB2ZXJ3aWpkZXJlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZXplIHdhYXJkZSBtb2V0IHVuaWVrIHppam4uXCIsXG4gIGFkZENvbHVtbjogXCJWb2VnIGtvbG9tIHRvZVwiLFxuICBhZGRSb3c6IFwiVm9lZyByaWogdG9lXCIsXG4gIHJlbW92ZVJvdzogXCJWZXJ3aWpkZXJcIixcbiAgYWRkUGFuZWw6IFwiTmlldXdlIHRvZXZvZWdlblwiLFxuICByZW1vdmVQYW5lbDogXCJWZXJ3aWpkZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIm9uZGVyd2VycFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9tXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlqXCIsXG4gIHNhdmluZ0RhdGE6IFwiRGUgcmVzdWx0YXRlbiB3b3JkZW4gYmV3YWFyZCBvcCBkZSBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVyIHdhcyBlZW4gcHJvYmxlZW0gZW4gd2Uga29uZGVuIGRlIHJlc3VsdGF0ZW4gbmlldCBiZXdhcmVuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJEZSByZXN1bHRhdGVuIHdlcmRlbiBzdWNjZXN2b2wgYmV3YWFyZCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByb2JlZXIgb3BuaWV1d1wiLFxuICB0aW1lck1pbjogXCJtaW5pbXVtXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlUgaGVlZnQgezB9IGdlc3BlbmRlZXJkIG9wIGRlemUgcGFnaW5hIGVuIHsxfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlUgaGVlZnQgezB9IG9wIGRlemUgcGFnaW5hIGdlc3BlbmRlZXJkLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlUgaGVlZnQgaW4gdG90YWFsIHswfSBnZXNwZW5kZWVyZC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICAgIFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBvcCBkZXplIHBhZ2luYSBnZXNwZW5kZWVyZCBlbiB7Mn0gdmFuIHszfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlUgaGVlZnQgezB9IHZhbiB7MX0gZ2VzcGVuZGVlcmQgb3AgZGV6ZSBwYWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBpbiBoZXQgdG90YWFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjbGVhckNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJHZWtvemVuIGJlc3RhbmRcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVmVyd2lqZGVyIGRlemUgZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWVuXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkJlbnQgdSB6ZWtlciBkYXQgdSBkZXplIGZpbGUgd2lsdCB2ZXJ3aWpkZXJlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQmVudCB1IHpla2VyIGRhdCB1IGFsIGRlemUgZmlsZXMgd2lsdCB2ZXJ3aWpkZXJlbj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdGVsIHZhbiBkZSB2cmFhZ1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJubFwiXSA9IGR1dGNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm5sXCJdID0gXCJuZWRlcmxhbmRzXCI7XG4iLCIvL1VuY29tbWVudCB0aGlzIGxpbmUgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlXG4vL2ltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZW5nbGlzaFN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJQcmV2aW91c1wiLFxuICBwYWdlTmV4dFRleHQ6IFwiTmV4dFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGVcIixcbiAgcHJldmlld1RleHQ6IFwiUHJldmlld1wiLFxuICBlZGl0VGV4dDogXCJFZGl0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk90aGVyIChkZXNjcmliZSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWN0IEFsbFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnZSB7MH0gb2YgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQW5zd2VyZWQgezB9L3sxfSBxdWVzdGlvbnNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGhlcmUgaXMgbm8gdmlzaWJsZSBwYWdlIG9yIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGhhbmsgeW91IGZvciBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJPdXIgcmVjb3JkcyBzaG93IHRoYXQgeW91IGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBzdXJ2ZXkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTG9hZGluZyBTdXJ2ZXkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQ2hvb3NlLi4uXCIsXG4gIHZhbHVlOiBcInZhbHVlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGFuc3dlciB0aGUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBsZWFzZSBhbnN3ZXIgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBsZWFzZSBhbnN3ZXIgcXVlc3Rpb25zIGluIGFsbCByb3dzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBiZSBudW1lcmljLlwiLFxuICBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIsXG4gIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGNoYXJhY3RlcihzKS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXIocykuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGFuZCBubyBtb3JlIHRoYW4gezF9IGNoYXJhY3RlcnMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUGxlYXNlIGZpbGwgaW4gYXQgbGVhc3QgezB9IHJvdyhzKS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudChzKS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBubyBtb3JlIHRoYW4gezB9IHZhcmlhbnQocykuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBhdCBsZWFzdCB7MX0gYW5kIGF0IG1vc3QgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiVGhlICd7MH0nIHNob3VsZCBiZSBhdCBsZWFzdCB7MX1cIixcbiAgbnVtZXJpY01heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IG1vc3QgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVGhlIGV4cHJlc3Npb246IHswfSBzaG91bGQgcmV0dXJuICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZW1wdHkgZGF0YSBvciB0aGUgJ3BhdGgnIHByb3BlcnR5IGlzIGluY29ycmVjdFwiLFxuICBleGNlZWRNYXhTaXplOiBcIlRoZSBmaWxlIHNpemUgc2hvdWxkIG5vdCBleGNlZWQgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUGxlYXNlIGVudGVyIHRoZSBvdGhlciB2YWx1ZS5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIllvdXIgZmlsZSBpcyB1cGxvYWRpbmcuIFBsZWFzZSB3YWl0IHNldmVyYWwgc2Vjb25kcyBhbmQgdHJ5IGFnYWluLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMb2FkaW5nLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiQ2hvb3NlIGZpbGUocykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5vIGZpbGUgY2hvc2VuXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoZSByZWNvcmQ/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5pcXVlLlwiLFxuICBhZGRDb2x1bW46IFwiQWRkIGNvbHVtblwiLFxuICBhZGRSb3c6IFwiQWRkIHJvd1wiLFxuICByZW1vdmVSb3c6IFwiUmVtb3ZlXCIsXG4gIGVtcHR5Um93c1RleHQ6IFwiVGhlcmUgYXJlIG5vIHJvd3MuXCIsXG4gIGFkZFBhbmVsOiBcIkFkZCBuZXdcIixcbiAgcmVtb3ZlUGFuZWw6IFwiUmVtb3ZlXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW1uXCIsXG4gIG1hdHJpeF9yb3c6IFwiUm93XCIsXG4gIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZXh0XCIsXG4gIHNhdmluZ0RhdGE6IFwiVGhlIHJlc3VsdHMgYXJlIGJlaW5nIHNhdmVkIG9uIHRoZSBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkFuIGVycm9yIG9jY3VycmVkIGFuZCB3ZSBjb3VsZCBub3Qgc2F2ZSB0aGUgcmVzdWx0cy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVGhlIHJlc3VsdHMgd2VyZSBzYXZlZCBzdWNjZXNzZnVsbHkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUcnkgYWdhaW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIllvdSBoYXZlIHNwZW50IHswfSBvbiB0aGlzIHBhZ2UgYW5kIHsxfSBpbiB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gaW4gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZSBhbmQgezJ9IG9mIHszfSBpbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9mIHsxfSBvbiB0aGlzIHBhZ2UuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9mIHsxfSBpbiB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkNsZWFuXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJDbGVhclwiLFxuICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaWduIGhlcmVcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiQ2hvb3NlIGZpbGVcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUmVtb3ZlIHRoaXMgZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlllc1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZmlsZTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBmaWxlcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlF1ZXN0aW9uIFRpdGxlXCIsXG4gIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIixcbiAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiQXBwbHlcIixcbn07XG5cbi8vVW5jb21tZW50IHRoZXNlIHR3byBsaW5lcyBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxuLy9zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImVuXCJdID0gZW5nbGlzaFN0cmluZ3M7XG4vL3N1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImVuXCJdID0gXCJFbmdsaXNoXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGVzdG9uaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlRhZ2FzaVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiRWRhc2lcIixcbiAgY29tcGxldGVUZXh0OiBcIkzDtXBldGFcIixcbiAgcHJldmlld1RleHQ6IFwiRWVsdmFhZGVcIixcbiAgZWRpdFRleHQ6IFwiTXV1ZGFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkFsdXN0YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk11dSAodMOkcHN1c3RhKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTWl0dGUgbWlkYWdpXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZhbGkga8O1aWtcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIkxlaGVrw7xsZyB7MH0vezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJLaXJqZSB7MH0vezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJWYXN0YXR1ZCB7MH0ga8O8c2ltdXN0IHsxfS1zdFwiLFxuICBlbXB0eVN1cnZleTogXCJTZWxsZXMgdXVyaW5ndXMgZWkgb2xlIMO8aHRraSBuw6RodGF2YXQgbGVoZWvDvGxnZSB2w7VpIGvDvHNpbXVzdC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJBaXTDpGgsIGV0IHZhc3Rhc2lkIGFua2VlZGlsZSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk1laWUgYW5kbWV0ZWwgb2xlZCBzYSBzZWxsZWxlIGFua2VlZGlsZSBqdWJhIHZhc3RhbnVkLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkxhZW4gYW5rZWV0aS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWYWxpLi4uXCIsXG4gIHZhbHVlOiBcInbDpMOkcnR1c1wiLFxuICByZXF1aXJlZEVycm9yOiBcIlBhbHVuIHZhc3RhIGvDvHNpbXVzZWxlLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQYWx1biB2YXN0YSB2w6RoZW1hbHQgw7xoZWxlIGvDvHNpbXVzZWxlLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBhbHVuIGFubmEgdmFzdHVzIGlnYWwgcmVhbC5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlNlZSBwZWFrcyBvbGVtYSBudW1icmlsaW5lIHbDpMOkcnR1cy5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQYWx1biBzaXNlc3RhIHbDpGhlbWFsdCB7MH0gdMOkaGVtw6Rya2kuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUGFsdW4gw6RyYSBzaXNlc3RhIHJvaGtlbSBrdWkgezB9IHTDpGhlbcOkcmtpLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlNpc2VzdGEgcGFsdW4gezB9IC0gezF9IHTDpGhlbcOkcmtpLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlNpc2VzdGEgcGxhdW4gdsOkaGVtYWx0IHswfSByaWRhLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQYWx1biB2YWxpIHbDpGhlbWFsdCB7MH0gdmFyaWFudGkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBhbHVuIHZhbGkga8O1aWdlIHJvaGtlbSB7MH0gdmFyaWFudGkuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBwZWFrcyBvbGVtYSB2w7VyZG5lIHbDtWkgc3V1cmVtIGt1aSB7MX0gamEgdsO1cmRuZSB2w7VpIHbDpGlrc2VtIGt1aSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBwZWFrcyBvbGVtYSB2w7VyZG5lIHbDtWkgc3V1cmVtIGt1aSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBwZWFrcyBvbGVtYSB2w7VybmRlIHbDtWkgdsOkaWtzZW0ga3VpIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiU2lzZXN0YSBwYWx1biBrb3JyZWt0bmUgZS1wb3N0aSBhYWRyZXNzLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJBdmFsZGlzOiB7MH0gcGVha3MgdGFnYXN0YW1hIHTDtWVzZS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlRhb3RsdXMgdGFnYXN0YXMgdmVhIOKAnnswfeKAnS4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlRhb3RsdXMgdGFnYXN0YXMgdMO8aGphZCBhbmRtZWQgdsO1aSBhdHJpYnV1dCAncGF0aCcgb24gdmFsZVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZhaWxpIHN1dXJ1cyBlaSB0b2hpIMO8bGV0YWRhIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlNpc2VzdGEgcGFsdW4gbXV1IHZhc3R1cy5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlNpbnUgZmFpbCBsYWViIMO8bGVzLiBQYWx1biBvb3RhIG3DtW5lZCBzZWt1bmRpZCBuaW5nIHByb292aSBzZWVqw6RyZWwgdXVlc3RpLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMYWVuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVmFsaSBmYWlsKGlkKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiRmFpbGkgcG9sZSB2YWxpdHVkXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiS2FzIHRhaGFkIGtpcmplIGt1c3R1dGFkYT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJTZWUgdsOkw6RydHVzIHBlYWIgb2xlbWEgdW5pa2FhbG5lLlwiLFxuICBhZGRDb2x1bW46IFwiTGlzYSB2ZWVyZ1wiLFxuICBhZGRSb3c6IFwiTGlzYSByaWRhXCIsXG4gIHJlbW92ZVJvdzogXCJFZW1hbGRhXCIsXG4gIGFkZFBhbmVsOiBcIkxpc2EgdXVzXCIsXG4gIHJlbW92ZVBhbmVsOiBcIkVlbWFsZGFcIixcbiAgY2hvaWNlc19JdGVtOiBcIsO8a3N1c1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIlZlZXJnXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlkYVwiLFxuICBzYXZpbmdEYXRhOiBcIlNhbHZlc3RhbiBhbmRtZWQgc2VydmVyaXMuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlRla2tpcyB2aWdhIG5pbmcgbWUgZWkgc2FhbnVkIHZhc3R1c2VpZCBzYWx2ZXN0YWRhLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJWYXN0dXN0ZSBzYWx2ZXN0YW1pbmUgw7VubmVzdHVzIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHJvb3ZpIHV1ZXN0aVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiT2xlZCB2ZWV0bnVkIHswfSBzZWxsZWwgbGVoZWwgbmluZyBrb2trdSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIk9sZWQgdmVldG51ZCB7MH0gc2VsbGVsIGxlaGVsLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIk9sZWQgdmVldG51ZCB7MH0ga29ra3UuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBzZWxsZWwgbGVoZWwgbmluZyB7Mn0gdsO1aW1hbGlrdXN0IHszfSBrb2trdS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiT2xlZCBrdWx1dGFudWQgezB9IHbDtWltYWxpa3VzdCB7MX0gc2VsbGVsIGxlaGVsLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIk9sZWQga3VsdXRhbnVkIHswfSB2w7VpbWFsaWt1c3QgezF9IGtvZ3VhamFzdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlB1aGFzdGFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlB1aGFzdGFcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmFsaSBmYWlsXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVlbWFsZGEgc2VlIGZhaWxcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYWhcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkVpXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIk9sZWQgc2Ega2luZGVsLCBldCBzb292aWQgc2VsbGUgZmFpbGkgZWVtYWxkYWRhOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJPbGVkIHNhIGtpbmRlbCwgZXQgc29vdmlkIGVlbWFsZGFkYSBrw7VpayBmYWlsaWQ/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLw7xzaW11c2UgcGVhbGtpcmlcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZXRcIl0gPSBlc3RvbmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJldFwiXSA9IFwiZWVzdGkga2VlbFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBmaW5uaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkVkZWxsaW5lblwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2V1cmFhdmFcIixcbiAgY29tcGxldGVUZXh0OiBcIlZhbG1pc1wiLFxuICBwcmV2aWV3VGV4dDogXCJFc2lrYXRzZWx1XCIsXG4gIGVkaXRUZXh0OiBcIk11b2trYWFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkFsb2l0YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk11dSAodGFya2VubmEpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJFaSBtaXTDpMOkblwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWYWxpdHNlIGthaWtraVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2l2dSB7MH0gLyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIk9zaW8gezB9IC8gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJPbGV0IHZhc3Rhbm51dCB7MH0gLyB7MX0ga3lzeW15a3NlZW4uXCIsXG4gIGVtcHR5U3VydmV5OlxuICAgIFwiVMOkc3PDpCBreXNlbHlzc8OkIGVpIG9sZSB5aHTDpMOkbiBuw6RreXZpbGzDpCBvbGV2YWEgc2l2dWEgdGFpIGt5c3lteXN0w6QuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS2lpdG9zIGt5c2VseXluIHZhc3RhYW1pc2VzdGEhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJUaWV0b2plbW1lIG11a2FhbiBvbGV0IGpvIHN1b3JpdHRhbnV0IHTDpG3DpG4ga3lzZWx5bi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJLeXNlbHnDpCBsYWRhdGFhbiBwYWx2ZWxpbWVsdGEuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVmFsaXRzZS4uLlwiLFxuICB2YWx1ZTogXCJhcnZvXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVmFzdGFhIGt5c3lteWtzZWVuLCBraWl0b3MuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlZhc3RhYSBhaW5ha2luIHlodGVlbiBreXN5bXlrc2Vlbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWYXN0YWEga3lzeW15a3NpaW4ga2Fpa2lsbGEgcml2ZWlsbMOkLlwiLFxuICBudW1lcmljRXJyb3I6IFwiQXJ2b24gdHVsZWUgb2xsYSBudW1lZXJpbmVuLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBtZXJra2nDpC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLDhGzDpCBzecO2dMOkIHlsaSB7MH0gbWVya2tpw6QuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU3nDtnTDpCB2w6RoaW50w6TDpG4gezB9IGphIGVuaW50w6TDpG4gezF9IG1lcmtracOkLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlTDpHl0w6QgdsOkaGludMOkw6RuIHswfSByaXZpw6QuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZhbGl0c2UgdsOkaGludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVmFsaXRzZSBlbmludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIkx1dnVuICd7MH0nIHR1bGVlIG9sbGEgdsOkaGludMOkw6RuIHsxfSBqYSBrb3JrZWludGFhbiB7Mn0uXCIsXG4gIG51bWVyaWNNaW46IFwiTHV2dW4gJ3swfScgdHVsZWUgb2xsYSB2w6RoaW50w6TDpG4gezF9LlwiLFxuICBudW1lcmljTWF4OiBcIkx1dnVuICd7MH0nIHR1bGVlIG9sbGEga29ya2VpbnRhYW4gezF9LlwiLFxuICBpbnZhbGlkRW1haWw6IFwiU3nDtnTDpCB2YWxpZGkgc8OkaGvDtnBvc3Rpb3NvaXRlLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJMYXVzZWtrZWVuOiB7MH0gcGl0w6Rpc2kgcGFsYXV0dGFhICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlB5eW50w7YgcGFsYXV0dGkgdmlyaGVlbiB7MH0uIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJQeXludMO2IHBhbGF1dHRpIHR5aGrDpG4gdGllZG9zdG9uIHRhaSAncGF0aCctYXNldHVzIG9uIHbDpMOkcsOkXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVGllZG9zdG9uIGtva28gZWkgc2FhIG9sbGEgc3V1cmVtcGkga3VpbiB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUYXJrZW5uYSB2YXN0YXVzdGFzaSB0ZWtzdGlrZW50dMOkw6RuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiVGllZG9zdG9hIGzDpGhldGV0w6TDpG4uIE9kb3RhIG11dXRhbWEgc2VrdW50aSBqYSB5cml0w6QgdXVkZWxsZWVuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMYWRhdGFhbi4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlZhbGl0c2UgdGllZG9zdG8odCkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkVpIHRpZWRvc3RvYSB2YWxpdHR1bmFcIixcbiAgY29uZmlybURlbGV0ZTogXCJIYWx1YXRrbyBwb2lzdGFhIG9zaW9uP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlTDpG3DpCBhcnZvIG9uIGpvIGvDpHl0w7Zzc8OkLiBTecO2dMOkIHRvaW5lbiBhcnZvLlwiLFxuICBhZGRDb2x1bW46IFwiTGlzw6TDpCBzYXJha2VcIixcbiAgYWRkUm93OiBcIkxpc8Okw6Qgcml2aVwiLFxuICByZW1vdmVSb3c6IFwiUG9pc3RhXCIsXG4gIGVtcHR5Um93c1RleHQ6IFwiRWkgcml2ZWrDpFwiLFxuICBhZGRQYW5lbDogXCJMaXPDpMOkIHV1c2lcIixcbiAgcmVtb3ZlUGFuZWw6IFwiUG9pc3RhXCIsXG4gIGNob2ljZXNfSXRlbTogXCJrb2hkZVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlNhcmFrZVwiLFxuICBtYXRyaXhfcm93OiBcIlJpdmlcIixcbiAgc2F2aW5nRGF0YTogXCJUaWV0b2phIHRhbGxlbm5ldGFhbiBwYWx2ZWxpbWVsbGUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlRhcGFodHVpIHZpcmhlLCBlbW1la8OkIHZvaW5lZXQgdGFsbGVudGFhIGt5c2VseW4gdGlldG9qYS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVGllZG90IHRhbGxlbm5ldHRpaW4gb25uaXN0dW5lZXN0aSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIllyaXTDpCB1dWRlbGxlZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIk9sZXQga8OkeXR0w6RueXQgezB9IHTDpGxsw6Qgc2l2dWxsYSBqYSB5aHRlZW5zw6QgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJPbGV0IGvDpHl0dMOkbnl0IHswfSB0w6RsbMOkIHNpdnVsbGEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiT2xldCBrw6R5dHTDpG55dCB5aHRlZW5zw6QgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiT2xldCBrw6R5dHTDpG55dCB0w6RsbMOkIHNpdnVsbGEgezB9IC8gezF9IGphIHlodGVlbnPDpCB7Mn0gLyB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIk9sZXQga8OkeXR0w6RueXQgezB9IC8gezF9IHTDpGxsw6Qgc2l2dWxsYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJPbGV0IGvDpHl0dMOkbnl0IHlodGVlbnPDpCB7MH0gLyB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJQeXloaVwiLFxuICBjbGVhckNhcHRpb246IFwiVHloamVubsOkXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZhbGl0c2UgdGllZG9zdG9cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUG9pc3RhIHTDpG3DpCB0aWVkb3N0b1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkt5bGzDpFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiRWlcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiSGFsdWF0a28gdmFybWFzdGkgcG9pc3RhYSB0w6Rtw6RuIHRpZWRvc3RvbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiSGFsdWF0a28gdmFybWFzdGkgcG9pc3RhYSBrYWlra2kgdGllZG9zdG90P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiS3lzeW15a3NlbiBvdHNpa2tvXCIsXG4gIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJQZXJ1dXRhXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkvDpHl0w6RcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZmlcIl0gPSBmaW5uaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImZpXCJdID0gXCJzdW9taVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBmcmVuY2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHLDqWPDqWRlbnRcIixcbiAgcGFnZU5leHRUZXh0OiBcIlN1aXZhbnRcIixcbiAgY29tcGxldGVUZXh0OiBcIlRlcm1pbmVyXCIsXG4gIHByZXZpZXdUZXh0OiBcIkFwZXLDp3VcIixcbiAgZWRpdFRleHQ6IFwiTW9kaWZpZXJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkNvbW1lbmNlclwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkF1dHJlIChwcsOpY2lzZXIpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJBdWN1blwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJUb3V0IHPDqWxlY3Rpb25uZXJcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2UgezB9IHN1ciB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkVucmVnaXN0cmVtZW50IHswfSBzdXIgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9IHF1ZXN0aW9uKHMpIHLDqXBvbmR1ZShzKVwiLFxuICBlbXB0eVN1cnZleTogXCJJbCBuJ3kgYSBuaSBwYWdlIHZpc2libGUgbmkgcXVlc3Rpb24gdmlzaWJsZSBkYW5zIGNlIHF1ZXN0aW9ubmFpcmVcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJNZXJjaSBkJ2F2b2lyIHLDqXBvbmR1IGF1IHF1ZXN0aW9ubmFpcmUgIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk5vcyBkb25uw6llcyBpbmRpcXVlbnQgcXVlIHZvdXMgYXZleiBkw6lqw6AgcmVtcGxpIGNlIHF1ZXN0aW9ubmFpcmUuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTGUgcXVlc3Rpb25uYWlyZSBlc3QgZW4gY291cnMgZGUgY2hhcmdlbWVudC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaG9pc2lzc2V6Li4uXCIsXG4gIHZhbHVlOiBcInZhbGV1clwiLFxuICByZXF1aXJlZEVycm9yOiBcIkxhIHLDqXBvbnNlIMOgIGNldHRlIHF1ZXN0aW9uIGVzdCBvYmxpZ2F0b2lyZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTWVyY2kgZGUgcsOpcG9uZHJlIGF1IG1vaW5zIMOgIHVuZSBxdWVzdGlvbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUb3V0ZXMgbGVzIGxpZ25lcyBzb250IG9ibGlnYXRvaXJlc1wiLFxuICBudW1lcmljRXJyb3I6IFwiTGEgcsOpcG9uc2UgZG9pdCDDqnRyZSB1biBub21icmUuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiTWVyY2kgZGUgc2Fpc2lyIGF1IG1vaW5zIHswfSBjYXJhY3TDqHJlcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJNZXJjaSBkZSBzYWlzaXIgbW9pbnMgZGUgezB9IGNhcmFjdMOocmVzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIk1lcmNpIGRlIHNhaXNpciBlbnRyZSB7MH0gZXQgezF9IGNhcmFjdMOocmVzLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIk1lcmNpIGRlIGNvbXBsw6l0ZXIgYXUgbW9pbnMgezB9IGxpZ25lcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBhdSBtaW5pbXVtIHswfSByw6lwb25zZXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgYXUgbWF4aW11bSB7MH0gcsOpcG9uc2VzLlwiLFxuICBudW1lcmljTWluTWF4OiBcIlZvdHJlIHLDqXBvbnNlICd7MH0nIGRvaXQgw6p0cmUgc3Vww6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsxfSBldCBpbmbDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiVm90cmUgcsOpcG9uc2UgJ3swfScgZG9pdCDDqnRyZSBzdXDDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiVm90cmUgcsOpcG9uc2UgJ3swfScgZG9pdCDDqnRyZSBpbmbDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJNZXJjaSBkJ2VudHJlciB1bmUgYWRyZXNzZSBtYWlsIHZhbGlkZS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiTCdleHByZXNzaW9uOiB7MH0gZG9pdCByZXRvdXJuZXIgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTGEgcmVxdcOqdGUgYSByZW52b3nDqSB1bmUgZXJyZXVyICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkxhIHJlcXXDqnRlIGEgcmVudm95w6kgZGVzIGRvbm7DqWVzIHZpZGVzIG91IGxhIHByb3ByacOpdMOpICdwYXRoJyBlc3QgaW5jb3JyZWN0ZVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkxhIHRhaWxsZSBkdSBmaWNoaWVyIG5lIGRvaXQgcGFzIGV4Y8OpZGVyIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIk1lcmNpIGRlIHByw6ljaXNlciBsZSBjaGFtcCAnQXV0cmUnLlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIlZvdHJlIGZpY2hpZXIgZXN0IGVuIGNvdXJzIGRlIGNoYXJnZW1lbnQuIE1lcmNpIGQnYXR0ZW5kcmUgcXVlbHF1ZXMgc2Vjb25kZXMgZXQgZGUgcsOpZXNzYXllci5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2hhcmdlbWVudC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkFqb3V0ZXIgZGVzIGZpY2hpZXJzLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJBdWN1biBmaWNoaWVyIGFqb3V0w6lcIixcbiAgY29uZmlybURlbGV0ZTogXCJWb3VsZXotdm91cyBzdXBwcmltZXIgY2V0IGVucmVnaXN0cmVtZW50ID9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJDZXR0ZSB2YWxldXIgZG9pdCDDqnRyZSB1bmlxdWUuXCIsXG4gIGFkZENvbHVtbjogXCJBam91dGVyIHVuZSBjb2xvbm5lXCIsXG4gIGFkZFJvdzogXCJBam91dGVyIHVuZSBsaWduZVwiLFxuICByZW1vdmVSb3c6IFwiU3VwcHJpbWVyXCIsXG4gIGFkZFBhbmVsOiBcIkFqb3V0ZXJcIixcbiAgcmVtb3ZlUGFuZWw6IFwiU3VwcHJpbWVyXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb25uZVwiLFxuICBtYXRyaXhfcm93OiBcIkxpZ25lXCIsXG4gIHNhdmluZ0RhdGE6IFwiTGVzIHLDqXN1bHRhdHMgc29udCBlbiBjb3VycyBkZSBzYXV2ZWdhcmRlIHN1ciBsZSBzZXJ2ZXVyLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBldCBhIGVtcMOqY2jDqSBsYSBzYXV2ZWdhcmRlIGRlcyByw6lzdWx0YXRzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJMZXMgcsOpc3VsdGF0cyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqXMgIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUsOpZXNzYXllclwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIGNldHRlIHBhZ2UgZXQgezF9IGF1IHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgY2V0dGUgcGFnZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBhdSB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IHN1ciBjZXR0ZSBwYWdlIGV0IHsyfSBzdXIgezN9IGF1IHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IHN1ciBjZXR0ZSBwYWdlLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciB7MX0gYXUgdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJOZXR0b3llclwiLFxuICBjbGVhckNhcHRpb246IFwiVmlkZXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiQWpvdXRlciB1biBmaWNoaWVyXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVubGV2ZXIgY2UgZmljaGllclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIk91aVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9uXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIsOKdGVzLXZvdXMgY2VydGFpbnMgZGUgdm91bG9pciBzdXBwcmltZXIgY2UgZmljaGllciA6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIsOKdGVzLXZvdXMgY2VydGFpbnMgZGUgdm91bG9pciBzdXBwcmltZXIgdG91cyBsZXMgZmljaGllcnM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUaXRyZSBkZSBsYSBxdWVzdGlvblwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmclwiXSA9IGZyZW5jaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJmclwiXSA9IFwiZnJhbsOnYWlzXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGdlb3JnaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuGDo+GDmeGDkOGDnFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi4YOo4YOU4YOb4YOT4YOU4YOSXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLhg5Phg5Dhg6Hhg6Dhg6Phg5rhg5Thg5Hhg5BcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuGDkuGDleGDlOGDoOGDk+GDmCB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi4YOQ4YOg4YOq4YOU4YOg4YOX4YOYIOGDmeGDmOGDl+GDruGDleGDkCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuGDkuGDm+GDkOGDk+GDmuGDneGDkeGDlyDhg5nhg5jhg5fhg67hg5Xhg5Dhg6Dhg5jhg6Eg4YOo4YOU4YOV4YOh4YOU4YOR4YOY4YOh4YOX4YOV4YOY4YOhIVwiLFxuICBsb2FkaW5nU3VydmV5OiBcIuGDqeGDkOGDouGDleGDmOGDoOGDl+GDleGDkCDhg6Hhg5Thg6Dhg5Xhg5Thg6Dhg5jhg5Phg5Dhg5wuLi5cIixcbiAgb3RoZXJJdGVtVGV4dDogXCLhg6Hhg67hg5Xhg5AgKOGDkuGDl+GDruGDneGDleGDlyDhg5vhg5jhg6Phg5fhg5jhg5fhg5Thg5cpXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuGDkOGDoOGDqeGDlOGDleGDkC4uLlwiLFxuICByZXF1aXJlZEVycm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6Phg57hg5Dhg6Hhg6Phg67hg5Thg5cg4YOZ4YOY4YOX4YOu4YOV4YOQ4YOhLlwiLFxuICBudW1lcmljRXJyb3I6IFwi4YOe4YOQ4YOh4YOj4YOu4YOYIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOg4YOY4YOq4YOu4YOV4YOYLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cg4YOQ4YOg4YOQ4YOc4YOQ4YOZ4YOa4YOU4YORIHswfSDhg6Hhg5jhg5vhg5Hhg53hg5rhg50uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOQ4YOg4YOQ4YOc4YOQ4YOZ4YOa4YOU4YORIHswfSDhg5Xhg5Dhg6Dhg5jhg5Dhg5zhg6Lhg5guXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOQ4YOg4YOQ4YOj4YOb4YOU4YOi4YOU4YOhIHswfSDhg5Xhg5Dhg6Dhg5jhg5Dhg5zhg6Lhg5guXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDm+GDlOGDouGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYLCDhg5Xhg5jhg5Phg6Dhg5QgezF9LCDhg5Phg5Ag4YOc4YOQ4YOZ4YOa4YOU4YOR4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gg4YOV4YOY4YOT4YOg4YOUIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOb4YOU4YOi4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gg4YOV4YOY4YOT4YOg4YOUIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOc4YOQ4YOZ4YOa4YOU4YOR4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gg4YOV4YOY4YOT4YOg4YOUIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDneGDlyDhg5Thg5ouIOGDpOGDneGDoeGDouGDmOGDoSDhg6Dhg5Thg5Dhg5rhg6Phg6Dhg5gg4YOb4YOY4YOh4YOQ4YOb4YOQ4YOg4YOX4YOYLlwiLFxuICBvdGhlclJlcXVpcmVkRXJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOQ4YOV4YOh4YOU4YOXIOGDleGDlOGDmuGDmCAn4YOh4YOu4YOV4YOQJ1wiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImthXCJdID0gZ2VvcmdpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wia2FcIl0gPSBcIuGDpeGDkOGDoOGDl+GDo+GDmuGDmFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBnZXJtYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiWnVyw7xja1wiLFxuICBwYWdlTmV4dFRleHQ6IFwiV2VpdGVyXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJBYnNjaGxpZcOfZW5cIixcbiAgcHJldmlld1RleHQ6IFwiVm9yc2NoYXVcIixcbiAgZWRpdFRleHQ6IFwiQmVhcmJlaXRlblwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJTb25zdGlnZXMgKEJpdHRlIGFuZ2ViZW4pXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOaWNodHMgdHJpZmZ0IHp1XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkFsbGVzIGF1c3fDpGhsZW5cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNlaXRlIHswfSB2b24gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJFaW50cmFnIHswfSB2b24gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9IEZyYWdlbiBiZWFudHdvcnRldFwiLFxuICBlbXB0eVN1cnZleTogXCJFcyBzaW5kIGtlaW5lIEZyYWdlbiB2b3JoYW5kZW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVmllbGVuIERhbmssIGRhc3MgU2llIGRpZSBVbWZyYWdlIGFiZ2VzY2hsb3NzZW4gaGFiZW4hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJXaXIgaGFiZW4gZmVzdGdlc3RlbGx0LCBkYXNzIFNpZSBkaWVzZSBVbWZyYWdlIGJlcmVpdHMgYWJnZXNjaGxvc3NlbiBoYWJlbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJVbWZyYWdlIHdpcmQgZ2VsYWRlbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJCaXR0ZSBhdXN3w6RobGVuLi4uXCIsXG4gIHZhbHVlOiBcIldlcnRcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBiZWFudHdvcnRlbiBTaWUgZGllc2UgRnJhZ2UuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkJpdHRlIGJlYW50d29ydGVuIFNpZSBtaW5kZXN0ZW5zIGVpbmUgRnJhZ2UuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQml0dGUgYmVhbnR3b3J0ZW4gU2llIGFsbGUgRnJhZ2VuLlwiLFxuICBudW1lcmljRXJyb3I6IFwiRGVyIFdlcnQgbXVzcyBlaW5lIFphaGwgc2Vpbi5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbWluZGVzdGVucyB7MH0gWmVpY2hlbiBlaW4uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG5pY2h0IG1laHIgYWxzIHswfSBaZWljaGVuIGVpbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbWluZGVzdGVucyB7MH0gdW5kIG1heGltYWwgezF9IFplaWNoZW4gZWluLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkJpdHRlIG1hY2hlbiBTaWUgaW4gbWluZGVzdGVucyB7MH0gWmVpbGVuIGVpbmUgRWluZ2FiZS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbWluZGVzdGVucyB7MH0gQW50d29ydChlbikgYXVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBuaWNodCBtZWhyIGFscyB7MH0gQW50d29ydChlbikgYXVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgbXVzcyBncsO2w59lciBvZGVyIGdsZWljaCB7MX0gdW5kIGtsZWluZXIgb2RlciBnbGVpY2ggezJ9IHNlaW5cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBtdXNzIGdyw7bDn2VyIG9kZXIgZ2xlaWNoIHsxfSBzZWluXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgbXVzcyBrbGVpbmVyIG9kZXIgZ2xlaWNoIHsxfSBzZWluXCIsXG4gIGludmFsaWRFbWFpbDogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZSBnw7xsdGlnZSBFLU1haWwtQWRyZXNzZSBlaW4uXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkRlciBBdXNkcnVjazogezB9IG11c3MgZGVuIFdlcnQgJ3dhaHInIHp1csO8Y2tnZWJlbi5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkVpbiBOZXR6d2Vya2RpZW5zdCBoYXQgZm9sZ2VuZGVuIEZlaGxlciB6dXLDvGNrZ2VnZWJlbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkVpbmUgTmV0endlcmtkaWVuc3QgaGF0IHVuZ8O8bHRpZ2UgRGF0ZW4genVyw7xja2dlZ2ViZW5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEaWUgRGF0ZWkgZGFyZiBuaWNodCBncsO2w59lciBhbHMgezB9IHNlaW4uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gV2VydCBhbi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkJpdHRlIHdhcnRlbiBTaWUgYmlzIGRlciBVcGxvYWQgSWhyZXIgRGF0ZWllbiBhYmdlc2NobG9zc2VuIGlzdC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiV2lyZCBob2NoZ2VsYWRlbi4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkRhdGVpKGVuKSBhdXN3w6RobGVuLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJLZWluZSBEYXRlaSBhdXNnZXfDpGhsdFwiLFxuICBjb25maXJtRGVsZXRlOiBcIldvbGxlbiBTaWUgZGVuIEVpbnRyYWcgbMO2c2NoZW4/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRGllc2VyIFdlcnQgbXVzcyBlaW5tYWxpZyBzZWluLlwiLFxuICBhZGRDb2x1bW46IFwiU3BhbHRlIGhpbnp1ZsO8Z2VuXCIsXG4gIGFkZFJvdzogXCJaZWlsZSBoaW56dWbDvGdlblwiLFxuICByZW1vdmVSb3c6IFwiRW50ZmVybmVuXCIsXG4gIGFkZFBhbmVsOiBcIk5ldSBoaW56dWbDvGdlblwiLFxuICByZW1vdmVQYW5lbDogXCJFbnRmZXJuZW5cIixcbiAgY2hvaWNlc19JdGVtOiBcIkVsZW1lbnRcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTcGFsdGVcIixcbiAgbWF0cml4X3JvdzogXCJaZWlsZVwiLFxuICBzYXZpbmdEYXRhOiBcIkRpZSBFcmdlYm5pc3NlIHdlcmRlbiBhdWYgZGVtIFNlcnZlciBnZXNwZWljaGVydC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRXMgaXN0IGVpbiBGZWhsZXIgYXVmZ2V0cmV0ZW4uIERpZSBFcmdlYm5pc3NlIGtvbm50ZW4gbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJEaWUgRXJnZWJuaXNzZSB3dXJkZW4gZ2VzcGVpY2hlcnQhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJFcm5ldXQgYWJzZW5kZW5cIixcbiAgdGltZXJNaW46IFwiTWluLlwiLFxuICB0aW1lclNlYzogXCJTZWsuXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiU2llIHdhcmVuIHswfSBhdWYgZGllc2VyIFNlaXRlIHVuZCBicmF1Y2h0ZW4gaW5zZ2VzYW10IHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiU2llIHdhcmVuIHswfSBhdWYgZGllc2VyIFNlaXRlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlNpZSBoYWJlbiBpbnNnZXNhbXQgezB9IGdlYnJhdWNodC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIlNpZSB3YXJlbiB7MH0gdm9uIHsxfSBhdWYgZGllc2VyIFNlaXRlIHVuZCBicmF1Y2h0ZW4gaW5zZ2VzYW10IHsyfSB2b24gezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJTaWUgd2FyZW4gezB9IHZvbiB7MX0gYXVmIGRpZXNlciBTZWl0ZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJTaWUgaGFiZW4gaW5zZ2VzYW10IHswfSB2b24gezF9IGdlYnJhdWNodC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkFsbGVzIGzDtnNjaGVuXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJBdXN3YWhsIGVudGZlcm5lblwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEYXRlaSBhdXN3w6RobGVuXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkRhdGVpIGzDtnNjaGVuXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5laW5cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZSBEYXRlaSBsw7ZzY2hlbiBtw7ZjaHRlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBhbGxlIERhdGVpZW4gbMO2c2NoZW4gbcO2Y2h0ZW4/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJGcmFnZW50aXRlbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkZVwiXSA9IGdlcm1hblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJkZVwiXSA9IFwiZGV1dHNjaFwiO1xuIiwiLy9DcmVhdGVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9hZ2Vsb3NwYW5hZ2lvdGFraXNcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZ3JlZWtTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ov1wiLFxuICBwYWdlTmV4dFRleHQ6IFwizpXPgM+MzrzOtc69zr9cIixcbiAgY29tcGxldGVUZXh0OiBcIs6fzrvOv866zrvOrs+Bz4nPg863XCIsXG4gIHByZXZpZXdUZXh0OiBcIs6gz4HOv861z4DOuc+DzrrPjM+AzrfPg863XCIsXG4gIGVkaXRUZXh0OiBcIs6Vz4DOtc6+zrXPgc6zzrHPg86vzrFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIs6Rz4HPh86uXCIsXG4gIG90aGVySXRlbVRleHQ6IFwizobOu867zr8gKM+AzrHPgc6xzrrOsc67z44gzrTOuc61z4XOus+BzrnOvc6vz4PPhM61KVwiLFxuICBub25lSXRlbVRleHQ6IFwizprOsc69zq3Ovc6xz4JcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwizpXPgM65zrvOv86zzq4gz4zOu8+Jzr1cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIs6jzrXOu86vzrTOsSB7MH0gzrHPgM+MIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwizpXOs86zz4HOsc+Gzq4gezB9IM6xz4DPjCB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIs6Rz4DOsc69z4TOrs64zrfOus6xzr0gezB9IC8gezF9IM61z4HPic+Ezq7Pg861zrnPglwiLFxuICBlbXB0eVN1cnZleTpcbiAgICBcIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDOus6xzrzOr86xIM6/z4HOsc+Ezq4gz4POtc67zq/OtM6xIM6uIM6/z4HOsc+Ezq4gzrXPgc+Oz4TOt8+Dzrcgz4POtSDOsc+Fz4TPjCDPhM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6XG4gICAgXCLOlc+Fz4fOsc+BzrnPg8+Ezr/Pjc68zrUgzrPOuc6xIM+EzrfOvSDPg8+FzrzPgM67zq7Pgc+Jz4POtyDOsc+Fz4TOv8+NIM+Ezr/PhSDOtc+Bz4nPhM63zrzOsc+Ezr/Ou86/zrPOr86/z4UhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLOpM6xIM6xz4HPh861zq/OsSDOvM6xz4IgzrTOtc6vz4fOvc6/z4XOvSDPjM+Ezrkgzq3Ph861z4TOtSDOrs60zrcgzr/Ou86/zrrOu863z4HPjs+DzrXOuSDOsc+Fz4TOrs69IM+EzrfOvSDOrc+BzrXPhc69zrEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwizqTOvyDOtc+Bz4nPhM63zrzOsc+Ezr/Ou8+MzrPOuc6/IM+Gzr/Pgc+Ez47Ovc61z4TOsc65IM6xz4DOvyDPhM6/IM60zrnOsc66zr/OvM65z4PPhM6uLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIs6Vz4DOuc67zq3Ovs+EzrUuLi5cIixcbiAgdmFsdWU6IFwizrHOvs6vzrFcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrfOvSDOtc+Bz47PhM63z4POty5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwizpHPgM6xzr3PhM6uz4PPhM61IM+DzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSDOvM6vzrEgzrXPgc+Oz4TOt8+DzrcuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6XG4gICAgXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrnPgiDOtc+Bz4nPhM6uz4POtc65z4Igz4POtSDPjM67zrXPgiDPhM65z4IgzrPPgc6xzrzOvM6tz4IuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLOlyDPhM65zrzOriDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6xz4HOuc64zrzOt8+EzrnOus6uLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPg8+NzrzOss6/zrvOsS5cIixcbiAgdGV4dE1heExlbmd0aDogXCLOlc65z4POsc6zzqzOs861z4TOtSDOu865zrPPjM+EzrXPgc6/z4XPgiDOsc+Az4wgezB9IM+HzrHPgc6xzrrPhM6uz4HOtc+CLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIs6VzrnPg86xzrPOrM6zzrXPhM61IM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr/Phc+CIM6xz4DPjCB7MH0gzrrOsc65IM67zrnOs8+Mz4TOtc+Bzr/Phc+CIM6xz4DPjCB7MX0gz4fOsc+BzrHOus+Ezq7Pgc61z4IuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM6zz4HOsc68zrzOrc+CLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gz4DOsc+BzrHOu867zrHOs86tz4IuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPjM+Hzrkgz4DOsc+BzrHPgM6szr3PiSDOsc+Azr8gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwizqTOvyAnezB9JyDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzq/Pg86/IM6uIM68zrXOs86xzrvPjc+EzrXPgc6/IM6xz4DOvyDPhM6/IHsxfSDOus6xzrkgzq/Pg86/IM6uIM68zrnOus+Bz4zPhM61z4HOvyDOsc+Azr8gz4TOvyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzq4gzrnPg86/IM68zrUgz4TOvyB7MX1cIixcbiAgbnVtZXJpY01heDogXCLOpM6/ICd7MH0nIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOuc66z4HPjM+EzrXPgc6/IM6uIM6vz4POvyDOsc+Azr8gz4TOvyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIs6gzrHPgc6xzrrOsc67z44gzrTPjs+Dz4TOtSDOvM65zrEgzrHPgM6/zrTOtc66z4TOriDOtM65zrXPjc64z4XOvc+DzrcgZS1tYWlsLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLOlyDOrc66z4bPgc6xz4POtzogezB9IM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXPgM65z4PPhM+Bzq3PiM61zrkgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDPg8+GzqzOu868zrEgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLOlyDOsc6vz4TOt8+DzrcgzrXPgM6tz4PPhM+BzrXPiM61IM66zrXOvc6sIM60zrXOtM6/zrzOrc69zrEgzq4gzrcgzrnOtM65z4zPhM63z4TOsSAnzrzOv869zr/PgM6sz4TOuS9wYXRoJyDOtc6vzr3Osc65IM61z4PPhs6xzrvOvM6tzr3Ot1wiLFxuICBleGNlZWRNYXhTaXplOiBcIs6kzr8gzrzOrc6zzrXOuM6/z4IgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM+Fz4DOtc+BzrLOsc6vzr3Otc65IM+EzrEgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+EzrfOvSDPhM65zrzOriDOs865zrEgz4TOvyDPgM61zrTOr86/ICfOrM67zrvOvycuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLOpM6/IM6xz4HPh861zq/OvyDPg86xz4IgzrHOvc61zrLOsc6vzr3Otc65LiDOoM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61IM66zrHPgM6/zrnOsSDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEgzrrOsc65IM60zr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwizqbPjM+Bz4TPic+DzrcuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLOlc+AzrnOu86/zrPOriDOsc+Bz4fOtc6vz4nOvSAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIs6UzrXOvSDOrc+HzrXOuSDOtc+AzrnOu861zrPOtc6vIM6xz4HPh861zq/Ov1wiLFxuICBjb25maXJtRGVsZXRlOiBcIs6Yzq3Ou861z4TOtSDOvc6xIM60zrnOsc6zz4HOrM+IzrXPhM61IM+EzrfOvSDOtc6zzrPPgc6xz4bOrjtcIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLOkc+Fz4TOriDOtyDPhM65zrzOriDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zr/Ovc6xzrTOuc66zq4uXCIsXG4gIGFkZENvbHVtbjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOrs67zrfPglwiLFxuICBhZGRSb3c6IFwizqDPgc6/z4POuM6uzrrOtyDOs8+BzrHOvM68zq7PglwiLFxuICByZW1vdmVSb3c6IFwizpHPhs6xzq/Pgc61z4POt1wiLFxuICBhZGRQYW5lbDogXCLOoM+Bzr/Pg864zrXPg861IM69zrXOv1wiLFxuICByZW1vdmVQYW5lbDogXCLOkc+GzrHOuc+Bz45cIixcbiAgY2hvaWNlc19JdGVtOiBcIs61zq/OtM6/z4JcIixcbiAgbWF0cml4X2NvbHVtbjogXCLOo8+Ezq7Ou863XCIsXG4gIG1hdHJpeF9yb3c6IFwizqPOtc65z4HOrFwiLFxuICBzYXZpbmdEYXRhOiBcIs6kzrEgzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xIM6xz4DOv864zrfOus61z43Ov869z4TOsc65IM+Dz4TOv869IM60zrnOsc66zr/OvM65z4PPhM6uIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwizqDOsc+Bzr/Phc+DzrnOrM+Dz4TOt866zrUgz4PPhs6szrvOvM6xIM66zrHOuSDOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xz4DOv864zq7Ous61z4XPg863IM+Ez4nOvSDOsc+Azr/PhM61zrvOtc+DzrzOrM+Ez4nOvS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwizqTOsSDOsc+Azr/PhM61zrvOrc+DzrzOsc+EzrEgzrHPgM6/zrjOt866zrXPjc+EzrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwizqDPgc6/z4PPgM6szrjOt8+DzrUgzr7Osc69zqxcIixcbiAgdGltZXJNaW46IFwizrXOu86sz4dcIixcbiAgdGltZXJTZWM6IFwizrTOtc+Fz4RcIixcbiAgdGltZXJTcGVudEFsbDogXCLOiM+HzrXPhM61IM60zrHPgM6xzr3Ors+DzrXOuSB7MH0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xIM66zrHOuSB7MX0gz4PPhc69zr/Ou865zrrOrC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwizojPh861z4TOtSDOvs6/zrTOrc+IzrXOuSB7MH0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgz4PPhc69zr/Ou865zrrOrCB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLOiM+HzrXPhM61IM60zrHPgM6xzr3Ors+DzrXOuSB7MH0gzrHPgM+MIHsxfSDPg861IM6xz4XPhM6uzr0gz4TOtyDPg861zrvOr860zrEgzrrOsc65IHsyfSDOsc+Az4wgezN9IM+Dz4XOvc6/zrvOuc66zqwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgezB9IM6xz4DPjCB7MX0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgezB9IM6xz4DPjCB7MX0gz4PPhc69zr/Ou865zrrOrC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIs6azpHOmM6RzqHOl1wiLFxuICBjbGVhckNhcHRpb246IFwizqPOsc+Gzq5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwizpXPgM65zrvOrc6+z4TOtSDPhM6/IM6xz4HPh861zq/Ov1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLOms6xz4TOsc+BzrPOrs+Dz4TOtSDOsc+Fz4TPjCDPhM6/IM6xz4HPh861zq/Ov1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIs6dzrHOr1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwizp/Ph865XCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIs6Vzq/Pg8+EzrUgzrLOrc6yzrHOuc6/zrkgz4zPhM65IM64zq3Ou861z4TOtSDOvc6xIM66zrHPhM6xz4HOs86uz4POtc+EzrUgzrHPhc+Ez4wgz4TOvyDOsc+Bz4fOtc6vzr86IHswfTtcIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIs6Vzq/Pg8+EzrUgzrLOrc6yzrHOuc6/zrkgz4zPhM65IM64zq3Ou861z4TOtSDOvc6xIM66zrHPhM6xz4HOs86uz4POtc+EzrUgz4zOu86xIM+EzrEgzrHPgc+HzrXOr86xO1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwizqTOr8+EzrvOv8+CIM61z4HPjs+EzrfPg863z4JcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZ3JcIl0gPSBncmVla1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJnclwiXSA9IFwizrXOu867zrfOvc65zrrOrFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBoZWJyZXdTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi15DXl9eV16jXlFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi16fXk9eZ157XlFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi16HXmdeV151cIixcbiAgcHJldmlld1RleHQ6IFwi16rXpteV15LXlCDXnten15PXmdee15RcIixcbiAgZWRpdFRleHQ6IFwi15zWt9ei1rLXqNeV1rnXmlwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi15TWt9eq15fWuNec1rjXlFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIteQ15fXqCAo16DXkCDXnNeq15DXqClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIteQ16Mg15DXl9eTXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIteR15fXqCDXlNeb15xcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIteT16MgezF9INee16rXldeaIHswfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi15TXp9ec15jXlCB7MH0g157XqteV15ogezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLXoteg15Qg16LXnCDXqdeQ15zXldeqXCIsXG4gIGVtcHR5U3VydmV5OiBcIteQ15nXnyDXqdeQ15zXldeqXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi16rXldeT15Qg16LXnCDXnteZ15zXldeZINeU16nXkNec15XXnyFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIteU16jXqdeV157XldeqINep15zXoNeVINee16jXkNeV16og16nXm9eR16gg16HXmdeZ157XqiDXkNeqINeU16HXp9eoINeU15bXlC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLXmNei15nXoNeUINee15TXqdeo16ouLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi15HXl9eoLi4uXCIsXG4gIHZhbHVlOiBcItei16jXmlwiLFxuICByZXF1aXJlZEVycm9yOiBcIteQ16DXkCDXlNep15Eg16LXnCDXlNep15DXnNeUXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIteQ16DXkCDXoteg15Qg15zXpNeX15XXqiDXotecINep15DXnNeUINeQ15fXqi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLXkNeg15Ag16LXoNeUINei15wg16nXkNec15XXqiDXkdeb15wg15TXqdeV16jXldeqLlwiLFxuICBudW1lcmljRXJyb3I6IFwi15TXqtep15XXkdeUINem16jXmdeb15Qg15zXlNeZ15XXqiDXnteh16TXqC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLXlNeW158g15zXpNeX15XXqiB7MH0g16rXldeV15nXnS5cIixcbiAgdGV4dE1heExlbmd0aDogXCLXlNeW158g16TXl9eV16og154tIHswfSDXqteV15XXmdedLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIteU15bXnyDXmdeV16rXqCDXni0gezB9INeV16TXl9eV16og154tIHsxfSDXqteV15XXmdedLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIteQ16DXkCDXntec15Ag15zXpNeX15XXqiB7MH0g16nXldeo15XXqi5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi15HXl9eoINec16TXl9eV16ogezB9INeQ16TXqdeo15XXmdeV16ouXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIteR15fXqCDXoteTIHswfSDXkNek16nXqNeV15nXldeqLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg15fXmdeZ15Eg15zXlNeZ15XXqiDXqdeV15XXlCDXkNeVINeS15PXldecINeeIHsxfSwg15XXqdeV15XXlCDXnC0gezJ9INeQ15Ug16TXl9eV16og154tIHt9fVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINeX15nXmdeRINec15TXmdeV16og16nXldeV15Qg15DXlSDXkteT15XXnCDXniB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug16fXmNefINeeIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6ICfXlNeW158g15vXqteV15HXqiDXk9eV15BcItecINeX15XXp9eZ16ouJyxcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi15TXkdeZ15jXldeZOiB7MH0g16bXqNeZ15og15zXlNeX15bXmdeoICfXkNee16onLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi15TXkden16nXlCDXlNeX15bXmdeo15Qg15DXqiDXlNep15LXmdeQ15QgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLXlNeR16fXqdeUINeU15fXlteZ16jXlCDXoNeq15XXoNeZ150g16jXmden15nXnSDXkNeVINep15TXnteQ16TXmdeZ158gJ9eg16rXmdeRJyDXqdeS15XXmVwiLFxuICBleGNlZWRNYXhTaXplOiBcIteS15XXk9ecINeU16fXldeR16Ug15zXkCDXmdei15zXlCDXotecIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiAn16DXkCDXnNeU15bXmdefINeg16rXldeg15nXnSDXkdep15PXlCBcIteQ15fXqFwiJyxcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIteU16fXldeR16Ug16nXnNeaINeg15jXotefLiDXlNee16rXnyDXnteh16TXqCDXqdeg15nXldeqINeV16DXodeUINep15XXkS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi15jXldei158uLi5cIixcbiAgY2hvb3NlRmlsZTogXCLXnNeR15fXldeoINen15HXpteZ150uLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItec15Ag16DXkdeX16gg16fXldeR16VcIixcbiAgY29uZmlybURlbGV0ZTogXCLXlNeQ150g15DXqteUINeo15XXpteUINec157Xl9eV16cg15DXqiDXlNeo16nXldee15Q/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi16LXqNeaINeW15Qg16bXqNeZ15og15zXlNeZ15XXqiDXmdeZ15fXldeT15kuXCIsXG4gIGFkZENvbHVtbjogXCLXlNeV16HXoyDXotee15XXk9eUXCIsXG4gIGFkZFJvdzogXCLXnNeU15XXodeZ16Mg16nXldeo15RcIixcbiAgcmVtb3ZlUm93OiBcItec1rDXlNa316HWtNeZ16hcIixcbiAgYWRkUGFuZWw6IFwi15TXldeh16Mg15fXk9epXCIsXG4gIHJlbW92ZVBhbmVsOiBcItec1rDXlNa316HWtNeZ16hcIixcbiAgY2hvaWNlc19JdGVtOiBcItek16jXmdeYXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi15jXldeoXCIsXG4gIG1hdHJpeF9yb3c6IFwi16nXgdeV1rzXqNa415RcIixcbiAgc2F2aW5nRGF0YTogXCLXlNeq15XXpteQ15XXqiDXoNep157XqNeV16og15HXqdeo16ogLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLXkNeZ16jXoteUINep15LXmdeQ15Qg15XXnNeQINeU16bXnNeX16DXlSDXnNep157XldeoINeQ16og15TXqteV16bXkNeV16ouXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIteU16rXldem15DXldeqINeg16nXnteo15Ug15HXlNem15zXl9eUIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi16DXodeUINep15XXkVwiLFxuICB0aW1lck1pbjogXCLXk9en15RcIixcbiAgdGltZXJTZWM6IFwi16nXoNeZ15XXqlwiLFxuICB0aW1lclNwZW50QWxsOiBcIteU15XXpteQ16ogezB9INeR15PXoyDXlteUINeV15HXodeaINeU15vXnCB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIteU15XXpteQ16ogezB9INeR15PXoyDXlteULlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIteU15XXpteQ16og16HXm9eV150g15vXldec15wg16nXnCB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLXlNeV16bXkNeqIHswfSDXnteq15XXmiB7MX0g15HXk9ejINeW15Qg15UtIHsyfSDXnteq15XXmiB7M30g15HXodeaINeU15vXnC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi15TXldem15DXqiB7MH0g157XqteV15ogezF9INeR15PXoyDXlteULlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIteU15XXpteQ16og16HXm9eV150g15vXldec15wg16nXnCB7MH0g157XqteV15ogezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi15zWsNeg1rfXp9eV1rnXqlwiLFxuICBjbGVhckNhcHRpb246IFwi15HXqNeV16hcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi15HXl9eoINen15XXkdelXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIteU16HXqCDXp9eV15HXpSDXlteUXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi15vXn1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi15zXkFwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLXlNeQ150g15DXqteUINeR15jXldeXINep15HXqNem15XXoNeaINec15TXodeZ16gg16fXldeR16Ug15bXlDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi15TXkNedINeQ16rXlCDXkdeY15XXlyDXqdeR16jXpteV16DXmiDXnNeU16HXmdeoINeQ16og15vXnCDXlNen15HXpteZ150/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLXm9eV16rXqNeqINep15DXnNeUXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImhlXCJdID0gaGVicmV3U3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImhlXCJdID0gXCLXoteR16jXmdeqXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGhpbmRpU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuCkquCkv+Ckm+CksuCkvlwiLFxuICBwYWdlTmV4dFRleHQ6IFwi4KSF4KSX4KSy4KS+XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLgpKrgpYLgpLDgpL5cIixcbiAgcHJldmlld1RleHQ6IFwi4KSq4KWC4KSw4KWN4KS14KS44KSu4KWA4KSV4KWN4KS34KS+XCIsXG4gIGVkaXRUZXh0OiBcIuCkuOCkguCkquCkvuCkpuCkv+CkpFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi4KS24KWB4KSw4KWCXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi4KSm4KWC4KS44KSw4KS+ICjgpLXgpLDgpY3gpKPgpKgg4KSV4KSw4KWH4KSCKVwiLFxuICBub25lSXRlbVRleDogXCLgpJXgpYvgpIgg4KSo4KS54KWA4KSCXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuCkuOCkreClgCDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkglwiLFxuICBwcm9ncmVzc1RleHQ6IFwi4KSq4KWD4KS34KWN4KSgIDEg4KSu4KWH4KSCIOCkuOClhyAwXCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCIg4KSm4KS44KWN4KSk4KS+4KS14KWH4KScIHsxfSDgpJXgpYcgezB9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MX0g4KS44KS14KS+4KSy4KWL4KSCIOCkruClh+CkgiDgpLjgpYcgezB9IOCkleClhyDgpJzgpLXgpL7gpKwg4KSm4KS/4KSPXCIsXG4gIGVtcHR5U3VydmV5OiBcIuCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpK7gpYfgpIIg4KSV4KWL4KSIIOCkpuClg+CktuCljeCkr+CkruCkvuCkqCDgpKrgpYPgpLfgpY3gpKAg4KSv4KS+IOCkquCljeCksOCktuCljeCkqCDgpKjgpLngpYDgpIIg4KS54KWIXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi4KS44KSw4KWN4KS14KWH4KSV4KWN4KS34KSjIOCkleCliyDgpKrgpYLgpLDgpL4g4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSn4KSo4KWN4KSv4KS14KS+4KSmXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiIOCkueCkruCkvuCksOClhyDgpLDgpL/gpJXgpYngpLDgpY3gpKEg4KSs4KSk4KS+4KSk4KWHIOCkueCliOCkgiDgpJXgpL8g4KSG4KSqIOCkquCkueCksuClhyDgpLngpYAg4KSH4KS4IOCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpJXgpYsg4KSq4KWC4KSw4KS+IOCkleCksCDgpJrgpYHgpJXgpYcg4KS54KWI4KSCXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi4KS44KSw4KWN4KS14KWH4KSV4KWN4KS34KSjIOCkluClgeCksiDgpLDgpLngpL4g4KS54KWILuKAplwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLgpJrgpYHgpKjgpYfgpIJcIixcbiAgdmFsdWU6IFwi4KSu4KWC4KSy4KWN4KSvXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkquCljeCksOCktuCljeCkqCDgpJXgpL4g4KSJ4KSk4KWN4KSk4KSwIOCkpuClh+CkglwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLgpJXgpYPgpKrgpK/gpL4g4KSV4KSuIOCkuOClhyDgpJXgpK4g4KSP4KSVIOCkquCljeCksOCktuCljeCkqCDgpJXgpL4g4KSJ4KSk4KWN4KSk4KSwIOCkpuClh+CkglwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuCkleClg+CkquCkr+CkviDgpLjgpK3gpYAg4KSq4KSC4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkruClh+CkgiDgpLjgpLXgpL7gpLLgpYvgpIIg4KSV4KWHIOCknOCkteCkvuCkrCDgpKbgpYfgpIJcIixcbiAgbnVtZXJpY0Vycm9yOiBcIuCkruClguCksuCljeCkryDgpLjgpILgpJbgpY3gpK/gpL7gpKTgpY3gpK7gpJUg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuCkleClg+CkquCkr+CkviDgpJXgpK4g4KS44KWHIOCkleCkriB7MH0g4KS14KSw4KWN4KSjIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgdGV4dE1heExlbmd0aDogXCLgpJXgpYPgpKrgpK/gpL4gezB9IOCkuOClhyDgpJXgpK4g4KS14KSw4KWN4KSjIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLgpJXgpYPgpKrgpK/gpL4gezB9IOCkuOClhyDgpIXgpKfgpL/gpJUg4KSU4KSwIHsxfSDgpLjgpYcg4KSV4KSuIOCkquCkvuCkpOCljeCksOCli+CkgiDgpK7gpYfgpIIg4KSq4KWN4KSw4KS14KWH4KS2IOCkleCksOClh+CkglwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuCkleClg+CkquCkr+CkviDgpJXgpK4g4KS44KWHIOCkleCkriB7MH0g4KSq4KSC4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpK3gpLDgpYfgpIJcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkleCkriDgpLjgpYcg4KSV4KSuIHswfSDgpLXgpL/gpJXgpLLgpY3gpKog4KSV4KS+IOCkmuCkr+CkqCDgpJXgpLDgpYfgpIJcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IHswfSDgpLXgpL/gpJXgpLLgpY3gpKrgpYvgpIIg4KS44KWHIOCkheCkp+Ckv+CklSDgpKjgpLngpYDgpIIg4KSa4KWB4KSo4KWH4KSCXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgezF9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkheCkp+Ckv+CklSDgpJTgpLAgezJ9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkleCkriDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgezF9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkheCkp+Ckv+CklSDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgezF9IOCkuOClhyDgpKzgpLDgpL7gpKzgpLAg4KSv4KS+IOCkleCkriDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIGludmFsaWRFbWFpbDogXCLgpJXgpYPgpKrgpK/gpL4g4KSP4KSVIOCkteCliOCkpyDgpIjgpK7gpYfgpLIg4KSq4KSk4KS+IOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi4KSF4KSt4KS/4KS14KWN4KSv4KSV4KWN4KSk4KS/OiB7MH0g4KSV4KWLICcg4KS44KSaICcg4KSy4KWM4KSf4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi4KSF4KSo4KWB4KSw4KWL4KSnIOCksuCljOCkn+CkvuCkr+CkviDgpKTgpY3gpLDgpYHgpJ/gpL8gJ3swfScgLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuCkheCkqOClgeCksOCli+CkpyDgpKjgpYcg4KSW4KS+4KSy4KWAIOCkoeClh+Ckn+CkviDgpLXgpL7gpKrgpLgg4KSV4KSwIOCkpuCkv+Ckr+CkviDgpLngpYggXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi4KSr4KS84KS+4KSH4KSyIOCkleCkviDgpIbgpJXgpL7gpLAgezB9IOCkuOClhyDgpIXgpKfgpL/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8gIOCkr+CkviDgpKvgpL/gpLAgJ+CkquCkvuCkpScg4KSq4KWN4KSw4KWJ4KSq4KSw4KWN4KSf4KWAIOCkl+CksuCkpCDgpLngpYhcIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuCkleClg+CkquCkr+CkviDgpKbgpYLgpLjgpLDgpL4g4KSu4KWC4KSy4KWN4KSvIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIJcIixcbiAgdXBsb2FkaW5nRmlsZTogXCLgpIbgpKrgpJXgpYAg4KSr4KS+4KSH4KSyIOCkheCkquCksuCli+CkoSDgpLngpYsg4KSw4KS54KWAIOCkueCliOClpCDgpJXgpYPgpKrgpK/gpL4g4KSV4KSIIOCkuOClh+CkleCkguCkoSDgpIfgpILgpKTgpJzgpL7gpLAg4KSV4KSw4KWH4KSCIOCklOCksCDgpKvgpL/gpLAg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpILgpaRcIixcbiAgbG9hZGluZ0ZpbGU6IFwi4KSy4KWL4KSh4KS/4KSC4KSXXCIsXG4gIGNob29zZUZpbGU6IFwi4KSr4KS84KS+4KSH4KSyIOCkmuClgeCkqOClh+CkglwiLFxuICBub0ZpbGVDaG9zZW46IFwi4KSV4KWL4KSIIOCkq+CkvuCkh+CksiDgpKjgpLngpYDgpIIg4KSa4KWB4KSo4KWAIOCkl+CkiFwiLFxuICBjb25maXJtRGVsZXRlOiBcIuCkleCljeCkr+CkviDgpIbgpKog4KSw4KS/4KSV4KWJ4KSw4KWN4KShIOCkueCkn+CkvuCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCXCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi4KSv4KS5IOCkruCkvuCkqCDgpIXgpKjgpYvgpJbgpL4g4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICBhZGRDb2x1bW46IFwi4KSV4KWJ4KSy4KSuIOCknOCli+CkoeCkvOClh+CkglwiLFxuICBhZGRSb3c6IFwi4KSq4KSC4KSV4KWN4KSk4KS/IOCknOCli+CkoeCkvOClh+CkglwiLFxuICByZW1vdmVSb3c6IFwi4KS54KSf4KS+4KSPXCIsXG4gIGFkZFBhbmVsOiBcIuCkqOCkr+CkviDgpJzgpYvgpKHgpLzgpYfgpIJcIixcbiAgcmVtb3ZlUGFuZWw6IFwi4KS54KSf4KS+4KSPXCIsXG4gIGNob2ljZXNfSXRlbTogXCLgpK7gpKZcIixcbiAgbWF0cml4X2NvbHVtbjogXCLgpJXgpYngpLLgpK5cIixcbiAgbWF0cml4X3JvdzogXCLgpKrgpILgpJXgpY3gpKTgpL9cIixcbiAgc2F2aW5nRGF0YTogXCLgpKrgpLDgpL/gpKPgpL7gpK4g4KS44KSw4KWN4KS14KSwIOCkquCksCDgpLjgpYfgpLUg4KS54KWLIOCksOCkueClhyDgpLngpYjgpIJcIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuCkj+CklSDgpKTgpY3gpLDgpYHgpJ/gpL8g4KS54KWB4KSIIOCklOCksCDgpLngpK4g4KSq4KSw4KS/4KSj4KS+4KSu4KWL4KSCIOCkleCliyDgpKjgpLngpYDgpIIg4KS44KWH4KS1IOCkleCksCDgpLjgpJXgpYdcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi4KSq4KSw4KS/4KSj4KS+4KSuIOCkuOCkq+CksuCkpOCkvuCkquClguCksOCljeCkteCklSDgpLjgpYfgpLUg4KS54KWLIOCkl+Ckj1wiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi4KSr4KS/4KSwIOCkleCli+CktuCkv+CktiDgpJXgpLDgpYtcIixcbiAgdGltZXJNaW46IFwi4KSu4KS/4KSo4KSfXCIsXG4gIHRpbWVyU2VjOiBcIuCkuOClh+CkleCkguCkoVwiLFxuICB0aW1lclNwZW50QWxsOiBcIuCkhuCkquCkqOClhyDgpIfgpLgg4KSq4KWD4KS34KWN4KSgIOCkquCksCB7MH0g4KSW4KSw4KWN4KSaIOCkleCkv+CkjyDgpLngpYjgpIIg4KSU4KSwIOCkleClgeCksiB7MX1cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHswfSDgpJbgpLDgpY3gpJog4KSV4KS/4KSv4KS+IOCkueCliFwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIuCkhuCkquCkqOClhyDgpJXgpYHgpLIgezB9IOCkluCksOCljeCkmiDgpJXgpL/gpK/gpL4g4KS54KWIXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHsxfSDgpJXgpYAgezB9IOCklOCksCDgpJXgpYHgpLIgezN9IOCkleClgCB7Mn0g4KSW4KSw4KWN4KSaIOCkleClgCDgpLngpYjgpaRcIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHsxfSDgpJXgpL4gezB9IOCkluCksOCljeCkmiDgpJXgpL/gpK/gpL4g4KS54KWIXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi4KSG4KSq4KSo4KWHIOCkleClgeCksiB7MX0g4KSV4KWAIHswfSDgpJbgpLDgpY3gpJog4KSV4KWAIOCkueCliFwiLFxuICBjbGVhbkNhcHRpb246IFwi4KS44KS+4KSrXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLgpLjgpY3gpKrgpLfgpY3gpJ9cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi4KSr4KS84KS+4KSH4KSyIOCkmuClgeCkqOClh+CkglwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLgpIfgpLgg4KSr4KS+4KSH4KSyIOCkleCliyDgpKjgpL/gpJXgpL7gpLLgpYfgpIJcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLgpLngpL7gpIFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuCkqOCkueClgOCkglwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLgpJXgpY3gpK/gpL4g4KSG4KSqIOCkuOClgeCkqOCkv+CktuCljeCkmuCkv+CkpCDgpLngpYjgpIIg4KSV4KS/IOCkhuCkqiDgpIfgpLgg4KSr4KS84KS+4KSH4KSyIOCkleCliyDgpLngpJ/gpL7gpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgjogezB9XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLgpJXgpY3gpK/gpL4g4KSG4KSqIOCkuOClgeCkqOCkv+CktuCljeCkmuCkv+CkpCDgpLngpYjgpIIg4KSV4KS/IOCkhuCkqiDgpLjgpK3gpYAg4KSr4KS84KS+4KSH4KSy4KWL4KSCIOCkleCliyDgpLngpJ/gpL7gpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkglwiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi4KSq4KWN4KSw4KS24KWN4KSoIOCkleCkviDgpLbgpYDgpLDgpY3gpLfgpJVcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaGlcIl0gPSBoaW5kaVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJoaVwiXSA9IFwiaGluZGlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaHVuZ2FyaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlZpc3N6YVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVG92w6FiYlwiLFxuICBjb21wbGV0ZVRleHQ6IFwiS8Opc3pcIixcbiAgcHJldmlld1RleHQ6IFwiRWzFkW7DqXpldFwiLFxuICBlZGl0VGV4dDogXCJTemVya2VzenTDqXNcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlJhanRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJFZ3nDqWIgKGFkamEgbWVnKVwiLFxuICBub25lSXRlbVRleHQ6IFwiRWd5aWsgc2VtXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIk1pbmRldCBraXbDoWxhc3p0XCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MH0uL3sxfSBvbGRhbFwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IC8gezF9IHJla29yZFwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiVsOhbGFzem9sdCBrw6lyZMOpc2VrOiB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGhlcmUgaXMgbm8gdmlzaWJsZSBwYWdlIG9yIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS8O2c3rDtm5qw7xrLCBob2d5IGtpdMO2bHTDtnR0ZSBmZWxtw6lyw6lzw7xua2V0IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk3DoXIga2l0w7ZsdMO2dHRlIGEgZmVsbcOpcsOpc3QuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiRmVsbcOpcsOpcyBiZXTDtmx0w6lzZS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWw6FsYXNzem9uLi4uXCIsXG4gIHZhbHVlOiBcIsOpcnTDqWtcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJLw6lyasO8aywgdsOhbGFzem9samEgbWVnIGV6dCBhIGvDqXJkw6lzdCFcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiS8OpcmrDvGssIHbDoWxhc3pvbGpvbiBsZWdhbMOhYmIgZWd5IGvDqXJkw6lzcmUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiS8OpcmrDvGsgYWRqb24gdsOhbGFzenQgbWluZGVuIHNvcmJhbiFcIixcbiAgbnVtZXJpY0Vycm9yOiBcIkF6IMOpcnTDqWsgc3rDoW0ga2VsbCwgaG9neSBsZWd5ZW4hXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiQWRqb24gbWVnIGxlZ2Fsw6FiYiB7MH0ga2FyYWt0ZXJ0IVwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkxlZ2ZlbGplYmIgezB9IGthcmFrdGVydCBhZGpvbiBtZWchXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiQWRqb24gbWVnIGxlZ2Fsw6FiYiB7MH0sIGRlIGxlZ2ZlbGplYmIgezF9IGthcmFrdGVydCFcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJUw7ZsdHPDtm4ga2kgbWluaW11bSB7MH0gc29ydCFcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVsOhbGFzc3pvbiBraSBsZWdhbMOhYmIgezB9IGxlaGV0xZFzw6lnZXQhXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk5lIHbDoWxhc3N6b24gdMO2YmJldCwgbWludCB7MH0gbGVoZXTFkXPDqWchXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBsZWd5ZW4gbmFneW9iYiwgdmFneSBlZ3llbmzFkSwgbWludCB7MX0gw6lzIGtpc2ViYiwgdmFneSBlZ3llbmzFkSwgbWludCB7Mn0hXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgbGVneWVuIGxlZ2Fsw6FiYiB7MX0hXCIsXG4gIG51bWVyaWNNYXg6IFwiVGhlICd7MH0nIG5lIGxlZ3llbiBuYWd5b2JiLCBtaW50IHsxfSFcIixcbiAgaW52YWxpZEVtYWlsOiBcIkFkam9uIG1lZyBlZ3kgdmFsw7NzIGVtYWlsIGPDrW1ldCFcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiQSBrw7Z2ZXRrZXrFkSBraWZlamV6w6lzOiB7MH0gdmlzc3phIGtlbGwgYWRuaWEgYXog4oCeaWdheuKAnSDDqXJ0w6lrZXQuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJBIGxla8OpcmRlesOpcyBoaWLDoXZhbCB0w6lydCB2aXNzemE6ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiQSBsZWvDqXJkZXrDqXMgw7xyZXMgYWRhdHRhbCB0w6lydCB2aXNzemEsIHZhZ3kgYSAncGF0aCcgcGFyYW3DqXRlciBoZWx5dGVsZW4uXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiQSBtw6lyZXQgbmVtIGxlaGV0IG5hZ3lvYmIsIG1pbnQgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQWRqYSBtZWcgYXogZWd5w6liIMOpcnTDqWtldCFcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZlbHTDtmx0w6lzIGZvbHlhbWF0YmFuLiBWw6Fyam9uIHDDoXIgbcOhc29kcGVyY2V0LCBtYWpkIHByw7Niw6FsamEgw7pqcmEuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkJldMO2bHTDqXMuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJGw6FqbG9rIGtpdsOhbGFzenTDoXNhIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmluY3Mga2l2w6FsYXN6dHZhIGbDoWpsXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVMO2cmxpIGV6dCBhIHJla29yZG90P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkF6IMOpcnTDqWtuZWsgZWd5ZWRpbmVrIGtlbGwgbGVubmllLlwiLFxuICBhZGRDb2x1bW46IFwiT3N6bG9wIGhvenrDoWFkw6FzYVwiLFxuICBhZGRSb3c6IFwiU29yIGhvenrDoWFkw6FzYVwiLFxuICByZW1vdmVSb3c6IFwiRWx0w6F2b2zDrXTDoXNcIixcbiAgYWRkUGFuZWw6IFwiw5pqIGhvenrDoWFkw6FzYVwiLFxuICByZW1vdmVQYW5lbDogXCJFbHTDoXZvbMOtdMOhc1wiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWxlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIk9zemxvcFwiLFxuICBtYXRyaXhfcm93OiBcIlNvclwiLFxuICBzYXZpbmdEYXRhOiBcIkVyZWRtw6lueSBtZW50w6lzZSBhIHN6ZXJ2ZXJyZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRWd5IGhpYmEgZm9seXTDoW4gbmVtIHR1ZHR1ayBlbG1lbnRlbmkgYXogZXJlZG3DqW55dC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiRXJlZG3DqW55IHNpa2VyZXNlbiBtZW50dmUhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcsOzYsOhbGphIMO6anJhXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCLDlm4gezB9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZXplbiBheiBvbGRhbG9uLCDDqXMgw7Zzc3plc2VuIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiezB9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZXplbiBheiBvbGRhbG9uLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIsOWc3N6ZXNlbiB7MH0ga8O2bHTDtnR0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiw5ZuIHswfSAvIHsxfSDDtnNzemVnZXQga8O2bHTDtnR0IGV6ZW4gYXogb2xkYWxvbiwgw6lzIMO2c3N6ZXNlbiB7Mn0gLyB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIsOWbiB7MH0gLyB7MX0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiw5Zzc3plc2VuIHswfSAvIHsxfSDDtnNzemVnZXQga8O2bHTDtnR0IGVsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiVGlzenRhXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJFZ3nDqXJ0ZWxtxbFcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVsOhbGFzc3ogZsOhamx0XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlTDoXZvbMOtdHNhIGVsIGV6dCBhIGbDoWpsdFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIklnZW5cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lbVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJCaXp0b3NhbiBlbHTDoXZvbMOtdGphIGV6dCBhIGbDoWpsdDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQml6dG9zYW4gZWwgYWthcmphIHTDoXZvbMOtdGFuaSBheiDDtnNzemVzIGbDoWpsdD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkvDqXJkw6lzIGPDrW1lXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImh1XCJdID0gaHVuZ2FyaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImh1XCJdID0gXCJtYWd5YXJcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaWNlbGFuZGljU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlRpbGJha2FcIixcbiAgcGFnZU5leHRUZXh0OiBcIsOBZnJhbVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiTG9racOwXCIsXG4gIHByZXZpZXdUZXh0OiBcIkZvcnNrb8OwYVwiLFxuICBlZGl0VGV4dDogXCJCcmV5dGFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkJ5cmphw7B1XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiSGlubiAoc2vDvXJpbmcpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJFbmdpbm5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVmVsamEgYWxsdFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU8Otw7BhIHswfSBvZiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlRha2EgdXBwIHswfSBhZiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlN2YXJhw7AgezB9IC8gezF9IHNwdXJuaW5ndW1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiw55hw7AgZXIgZW5naW5uIHPDrcOwYSBlw7BhIHNwdXJuaW5nYXIgw60gw75lc3Nhcmkga8O2bm51bi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUYWtrIGZ5cmlyIGHDsCBmeWxsamEgw7p0IMO+ZXNzYSBrw7ZubnVuIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiU2tyw6FyIG9ra2FyIHPDvW5hIGHDsCDDvsO6IGhlZnVyIMO+ZWdhciBsb2tpw7Agw75lc3Nhcmkga8O2bm51bi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJLw7ZubnVuaW4gZXIgYcOwIGhsYcOwYS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWZWxkdS4uLlwiLFxuICB2YWx1ZTogXCJnaWxkaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlZpbnNhbWxlZ2FzdCBzdmFyacOwIHNwdXJuaW5ndW5uaS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVmluc2FtbGVnYXN0IHN2YXJhw7B1IGHDsCBtaW5uc3RhIGtvc3RpIGVpbm5pIHNwdXJuaW5ndS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWaW5zYW1sZWdhc3Qgc3ZhcmnDsCBzcHVybmluZ3VtIMOtIMO2bGx1bSByw7bDsHVtLlwiLFxuICBudW1lcmljRXJyb3I6IFwiw55ldHRhIGdpbGRpIHZlcsOwdXIgYcOwIHZlcmEgdGFsYS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLDnmHDsCDDpnR0aSBhw7AgdmVyYSBtaW5uc3QgezB9IHTDoWtuLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIsOeYcOwIMOmdHRpIGHDsCB2ZXJhIG1lc3QgezB9IHTDoWtuLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIsOeYcOwIMOmdHRpIGHDsCB2ZXJhIGZsZWlyaSBlbiB7MH0gb2cgZsOmcnJpIGVuIHsxfSB0w6Frbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJWaW5zYW1sZWdhc3QgZnlsbGnDsCDDunIgYcOwIG1pbm5zdGEga29zdGkgezB9IHJhw7Bpci5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVmluc2FtbGVnYXN0IHZlbGppw7AgYcOwIG1pbm5zdGEga29zdGkgezB9IG3Dtmd1bGVpa2EuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZpbnNhbWxlZ2FzdCB2ZWxqacOwIGVra2kgZmxlaXJpIGVuIHswfSBtw7ZndWxlaWthLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgw6Z0dGkgYcOwIHZlcmEgbWVpcmEgZW4gZcOwYSBqYWZudCBvZyB7MX0gbWlubmEgZW4gZcOwYSBqYWZudCBvZyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJ7MH0nIMOmdHRpIGHDsCB2ZXJhIG1laXJhIGVuIGXDsGEgamFmbnQgb2cgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgw6Z0dGkgYcOwIHZlcmEgbWlubmEgZW4gZcOwYSBqYWZudCBvZyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlZpbnNhbWxlZ2FzdCBzbMOhacOwIGlubiBnaWx0IG5ldGZhbmcuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlRqw6FuaW5naW46IHswfSDDpnR0aSBhw7Agc2tpbGEgJ3NhdHQnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiQmVpw7BuaW5uIHNraWxhw7BpIGVmdGlyZmFyYW5hZGkgdmlsbHUgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiQmVpw7BuaW5uZyBza2lsYcOwaSBlbmd1bSBnw7ZnbnVtIGXDsGEgc2zDs8OwaW5uIHZhciByw7ZuZ1wiLFxuICBleGNlZWRNYXhTaXplOiBcIlNrcsOhaW5uIHNrYWwgZWtraSB2ZXJhIHN0w6ZycmkgZW4gezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmluYW1sZWdhc3QgZnlsbGnDsCDDunQgaGl0dCBnaWxkacOwLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU2tyw6Fpbm4gw77DrW4gdmFyIHNlbmQuIFZpbnNhbWxlZ2FzdCBiw63DsGnDsCDDrSBub2trcmFyIHNla8O6bmR1ciBvZyByZXluacOwIGFmdHVyLlwiLFxuICBsb2FkaW5nRmlsZTogXCJIbGXDsHVyIC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlZlbGR1IHNrcsOhciAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkVuZ2luIHNrcsOhIHZhbGluXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVmlsdHUgZXnDsGEgc2tyw6Fubmk/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiw55ldHRhIGdpbGRpIMOmdHRpIGHDsCB2ZXJhIGVpbnN0YWt0LlwiLFxuICBhZGRDb2x1bW46IFwiQsOmdGEgdmnDsCBkw6Fsa2lcIixcbiAgYWRkUm93OiBcIkLDpnRhIHZpw7AgcsO2w7BcIixcbiAgcmVtb3ZlUm93OiBcIkZqYXJsw6ZnamFcIixcbiAgYWRkUGFuZWw6IFwiQsOmdGEgdmnDsCBuw71qdVwiLFxuICByZW1vdmVQYW5lbDogXCJGamFybMOmZ8OwdVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaGx1dHVyXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiRMOhbGt1clwiLFxuICBtYXRyaXhfcm93OiBcIlLDtsOwXCIsXG5cbiAgc2F2aW5nRGF0YTogXCJOacOwdXJzdMO2w7B1cm5hciBlcnUgYcOwIHNwYXJhIMOhIG5ldMO+asOzbmludW0gLi4uIFwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiVmlsbGEga29tIHVwcCBvZyB2acOwIGfDoXR1bSBla2tpIHZpc3Rhw7AgbmnDsHVyc3TDtsOwdXJuYXIuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIsOBcmFuZ3VyaW5uIHZhciB2aXN0YcOwdXIgbWXDsCBnw7PDsHVtIMOhcmFuZ3JpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUmV5bmR1IGFmdHVyXCIsXG4gIHRpbWVyTWluOiBcIm3DrW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiw57DuiBoZWZ1ciBleXR0IHswfSDDoSDDvmVzc2FyaSBzw63DsHUgb2cgezF9IHNhbXRhbHMuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gw6Egw75lc3Nhcmkgc8Otw7B1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gc2FtdGFscy5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIsOew7ogaGVmdXIgZXl0dCB7MH0gYWYgezF9IMOhIMO+ZXNzYXJpIHPDrcOwdSBvZyB7Mn0gYWYgezN9IHNhbXRhbHMuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gYWYgezF9IMOhIMO+ZXNzYXJpIHPDrcOwdS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLDnsO6IGhlZnVyIGV5dHQgezB9IGFmIHsxfSBzYW10YWxzLlwiLFxuICBjbGVhbkNhcHRpb246IFwiSHJlaW50XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJIcmVpbnNhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZlbGR1IHNrcsOhXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZqYXJsw6Znw7B1IMO+ZXNzYSBza3LDoVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkrDoVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVpXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkVydHUgdmlzcyB1bSBhw7Agw77DuiB2aWxqaXIgZmphcmzDpmdqYSDDvmVzc2Egc2tyw6E6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVydHUgdmlzcyB1bSBhw7Agw77DuiB2aWxqaXIgZmphcmzDpmdqYSBhbGxhciBza3LDoXI/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTcHVybmluZ2FydGl0aWxsXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImlzXCJdID0gaWNlbGFuZGljU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImlzXCJdID0gXCLDrXNsZW5za2FcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaW5kb25lc2lhblN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJTZWJlbHVtbnlhXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZWxhbmp1dG55YVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiU2VsZXNhaVwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmF0aW5qYXVcIixcbiAgZWRpdFRleHQ6IFwiU3VudGluZ1wiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiTXVsYWlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJMYWlubnlhIChqZWxhc2thbilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIlRpZGFrIEFkYVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJQaWxpaCBTZW11YVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiSGFsYW1hbiB7MH0gZGFyaSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJla2FtIHswfSBkYXJpIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiTWVuamF3YWIgcGVydGFueWFhbiB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGlkYWsgYWRhIGhhbGFtYW4gYXRhdSBwZXJ0YW55YWFuIGRhbGFtIHN1cnZlaS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUZXJpbWEga2FzaWggdGVsYWggbWVueWVsZXNhaWthbiBzdXJ2ZWkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJDYXRhdGFuIGthbWkgbWVudW5qdWtrYW4gYmFod2EgQW5kYSB0ZWxhaCBtZW55ZWxlc2Fpa2FuIHN1cnZlaSBpbmkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTWVtdWF0IHN1cnZlaS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJQaWxpaC4uLlwiLFxuICB2YWx1ZTogXCJuaWxhaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlNpbGFoa2FuIGphd2FiIHBlcnRhbnlhYW4gYmVyaWt1dC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiU2lsYWhrYW4gamF3YWIgc2V0aWRha255YSBzYXR1IHBldGFueWFhbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJTaWxhaGthbiBqYXdhYiBwZXJ0YW55YWFuIHBhZGEgc2VtdWEgYmFyaXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJOaWxhaSBoYXJ1cyBiZXJ1cGEgYW5na2EuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiU2lsYWhrYW4gbWFzdWtrYW4gc2V0aWRha255YSB7MH0ga2FyYWt0ZXIuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiU2lsYWhrYW4gbWFzdWtrYW4ga3VyYW5nIHswfSBrYXJha3Rlci5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIlBTaWxhaGthbiBtYXN1a2thbiBsZWJpaCBkYXJpIHswfSBkYW4ga3VyYW5nIGRhcmkgezF9IGthcmFrdGVyLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlNpbGFoa2FuIGlzaSBzZXRpZGFrbnlhIHswfSBiYXJpcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiU2lsYWhrYW4gcGlsaWggc2V0aWRha255YSB7MH0gdmFyaWFuLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTaWxhaGthbiBwaWxpaCB0aWRhayBsZWJpaCBkYXJpIHswfSB2YXJpYW4uXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBoYXJ1cyBzYW1hIGRlbmdhbiBhdGF1IGxlYmloIGRhcmkgezF9IGRhbiBoYXJ1cyBzYW1hIGRlbmdhbiBhdGF1IGt1cmFuZyBkYXJpIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUgbGViaWggZGFyaSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBoYXJ1cyBzYW1hIGRlbmdhbiBhdGF1IGt1cmFuZyBkYXJpIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiU2lsYWhrYW4gbWFzdWtrYW4gZS1tYWlsIHlhbmcgYmVuYXIuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkVrc3ByZXNpOiB7MH0gaGFydXMgbWVuZ2VtYmFsaWthbiAnYmVuYXInLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUGVybWludGFhbiBtZW5nZW1iYWxpa2FuIGtlc2FsYWhhbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlBlcm1pbnRhYW4gbWVuZ2VtYmFsaWthbiBkYXRhIGtvc29uZyBhdGF1IHByb3BlcnRpICdwYXRoJyBzYWxhaC5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJVa3VyYW4gYmVya2FzIHRpZGFrIGJvbGVoIG1lbGViaWhpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlNpbGFoa2FuIG1hc3Vra2FuIG5pbGFpIGxhaW5ubnlhLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiQmVya2FzIEFuZGEgc2VkYW5nIGRpdW5nZ2FoLiBTaWxhaGthbiB0dW5nZ3UgYmViZXJhcGEgc2FhdCBhdGF1IGNvYmEgbGFnaS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTWVtdWF0Li4uXCIsXG4gIGNob29zZUZpbGU6IFwiUGlsaWggYmVya2FzLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJUaWRhayBhZGEgZmlsZSB5YW5nIGRpcGlsaWhcIixcbiAgY29uZmlybURlbGV0ZTogXCJBcGFrYWggQW5kYSBpbmdpbiBtZW5naGFwdXMgY2F0YXRhbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJOaWxhaSBoYXJ1cyB1bmlrLlwiLFxuICBhZGRDb2x1bW46IFwiVGFtYmFoIGtvbG9tXCIsXG4gIGFkZFJvdzogXCJUYW1iYWggYmFyaXNcIixcbiAgcmVtb3ZlUm93OiBcIkhhcHVzXCIsXG4gIGFkZFBhbmVsOiBcIlRhbWJhaCBiYXJ1XCIsXG4gIHJlbW92ZVBhbmVsOiBcIkhhcHVzXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb21cIixcbiAgbWF0cml4X3JvdzogXCJCYXJpc1wiLFxuICBzYXZpbmdEYXRhOiBcIkhhc2lsIHNlZGFuZyBkaXNpbXBhbiBwYWRhIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiS2VzYWxhaGFuIHRlcmphZGkgZGFuIGthbWkgdGlkYWsgZGFwYXQgbWVueWltcGFuIGhhc2lsLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJIYXNpbCB0ZWxhaCBzdWtzZXMgZGlzaW1wYW4hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJDb2JhIGxhZ2lcIixcbiAgdGltZXJNaW46IFwibWVuaXRcIixcbiAgdGltZXJTZWM6IFwiZGV0aWtcIixcbiAgdGltZXJTcGVudEFsbDpcbiAgICBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBwYWRhIGhhbGFtYW4gaW5pIGRhbiB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHBhZGEgaGFsYW1hbiBpbmkuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBkYXJpIHsxfSBwYWRhIGhhbGFtYW4gaW5pIGRhbiB7Mn0gZGFyaSB7M30gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gcGFkYSBoYWxhbWFuIGluaS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQmVyc2loa2FuXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJCZXJzaWhrYW5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiUGlsaWggRmlsZVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJIYXB1cyBiZXJrYXMgaW5pXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSXlhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJUaWRha1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJBbmRhIHlha2luIGluZ2luIG1lbmdoYXB1cyBmaWxlIGluaTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQW5kYSB5YWtpbiBpbmdpbiBtZW5naGFwdXMgc2VtdWEgZmlsZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkp1ZHVsIHBlcnRhbnlhYW5cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaWRcIl0gPSBpbmRvbmVzaWFuU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImlkXCJdID0gXCJiYWhhc2EgSW5kb25lc2lhXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGl0YWxpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50ZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU3VjY2Vzc2l2b1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiU2FsdmFcIixcbiAgcHJldmlld1RleHQ6IFwiQW50ZXByaW1hXCIsXG4gIGVkaXRUZXh0OiBcIk1vZGlmaWNhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJJbml6aW9cIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbHRybyAoZGVzY3JpdmkpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOZXNzdW5vXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGV6aW9uYSB0dXR0aVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlY29yZCBkaSB7MH0gZGkgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSaXNwb3N0ZSBhIHswfS97MX0gZG9tYW5kZVwiLFxuICBlbXB0eVN1cnZleTogXCJOb24gY2kgc29ubyBwYWdpbmUgbyBkb21hbmRlIHZpc2liaWxpIG5lbCBxdWVzdGlvbmFyaW8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiR3JhemllIHBlciBhdmVyIGNvbXBsZXRhdG8gaWwgcXVlc3Rpb25hcmlvIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiSSBub3N0cmkgcmVjb3JkcyBtb3N0cmFubyBjaGUgaGFpIGdpw6AgY29tcGxldGF0byBxdWVzdG8gcXVlc3Rpb25hcmlvLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkNhcmljYW1lbnRvIGRlbCBxdWVzdGlvbmFyaW8gaW4gY29yc28uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2NlZ2xpLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9yZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIkNhbXBvIG9iYmxpZ2F0b3Jpb1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQZXIgRmF2b3JlLCByaXNwb25kaSBhZCBhbG1lbm8gdW5hIGRvbWFuZGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQ29tcGxldGFyZSB0dXR0ZSBsZSByaWdoZVwiLFxuICBudW1lcmljRXJyb3I6IFwiSWwgdmFsb3JlIGRldmUgZXNzZXJlIG51bWVyaWNvXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiSW5zZXJpcmUgYWxtZW5vIHswfSBjYXJhdHRlcmlcIixcbiAgdGV4dE1heExlbmd0aDogXCJMdW5naGV6emEgbWFzc2ltYSBjb25zZW50aXRhIHswfSBjYXJhdHRlcmlcIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIkluc2VyaXJlIHVuYSBzdHJpbmdhIGNvbiBtaW5pbW8gezB9IGUgbWFzc2ltbyB7MX0gY2FyYXR0ZXJpXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiQ29tcGxldGFyZSBhbG1lbm8gezB9IHJpZ2hlLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlemlvbmFyZSBhbG1lbm8gezB9IHZhcmlhbnRpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTZWxlemlvbmFyZSBtYXNzaW1vIHswfSB2YXJpYW50aS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIHN1cGVyaW9yZSBhIHsxfSBlIHVndWFsZSBvIGluZmVyaW9yZSBhIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIHN1cGVyaW9yZSBhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIGluZmVyaW9yZSBhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiSW5zZXJpcmUgaW5kaXJpenpvIG1haWwgdmFsaWRvXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkwnZXNwcmVzc2lvbmU6IHswfSBkb3ZyZWJiZSB0b3JuYXJlICd2ZXJvJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkxhIHJpY2hpZXN0YSBoYSByaXNwb3N0byBjb24gdW4gZXJyb3JlICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgcmljaGllc3RhIGhhIHJpc3Bvc3RvIG51bGwgb3BwdXJlIGlsIHBlcmNvcnNvIG5vbiDDqCBjb3JyZXR0b1wiLFxuICBleGNlZWRNYXhTaXplOiBcIklsIGZpbGUgbm9uIHB1w7IgZWNjZWRlcmUgezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJJbnNlcmlyZSBpbCB2YWxvcmUgJ2FsdHJvJ1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmlsZSBpbiBjYXJpY2FtZW50by4gQXR0ZW5kaSBhbGN1bmkgc2Vjb25kaSBlIHJpcHJvdmFcIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2FyaWNhbWVudG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJTZWxlemlvbmFyZSBmaWxlKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOZXNzdW4gZmlsZSBzZWxlemlvbmF0b1wiLFxuICBjb25maXJtRGVsZXRlOiBcIlNlaSBzaWN1cm8gZGkgdm9sZXIgZWxtaW5hcmUgaWwgcmVjb3JkP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlF1ZXN0byB2YWxvcmUgZGV2ZSBlc3NlcmUgdW5pdm9jby5cIixcbiAgYWRkQ29sdW1uOiBcIkFnZ2l1bmdpIGNvbG9ubmFcIixcbiAgYWRkUm93OiBcIkFnZ2l1bmdpIHJpZ2FcIixcbiAgcmVtb3ZlUm93OiBcIlJpbXVvdmkgcmlnYVwiLFxuICBhZGRQYW5lbDogXCJBZ2dpdW5naSByaWdhXCIsXG4gIHJlbW92ZVBhbmVsOiBcIkVsaW1pbmFcIixcbiAgY2hvaWNlc19JdGVtOiBcIkVsZW1lbnRvXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb25uYVwiLFxuICBtYXRyaXhfcm93OiBcIlJpZ2FcIixcbiAgc2F2aW5nRGF0YTogXCJTYWx2YXRhZ2dpbyBkYXRpIHN1bCBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlNpIMOoIHZlcmlmaWNhdG8gdW4gZXJyb3JlIGUgbm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBzYWx2YXJlIGkgcmlzdWx0YXRpLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJJIHJpc3VsdGF0aSBzb25vIHN0YXRpIHNhbHZhdGkgY29uIHN1Y2Nlc3NvIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUmlwcm92YVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiSGFpIGltcGllZ2F0byB7MH0gc3UgcXVlc3RhIHBhZ2luYSBlIHsxfSBpbiB0b3RhbGUuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkhhaSBpbXBpZWdhdG8gezB9IHN1IHF1ZXN0YSBwYWdpbmEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiSGFpIGltcGllZ2F0byB7MH0gaW4gdG90YWxlLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiSGFpIGltcGllZ2F0byB7MH0gZGkgezF9IHN1IHF1ZXN0YSBwYWdpbmEgZSB7Mn0gZGkgezN9IGluIHRvdGFsZS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiSGFpIGltcGllZ2F0byB7MH0gZGkgezF9IHN1IHF1ZXN0YSBwYWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiSGFpIGltcGllZ2F0byB7MH0gZGkgezF9IGluIHRvdGFsZS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlB1bGlzY2lcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNhbmNlbGxhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlNjZWdsaWVyZSBpbCBmaWxlXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJpbXVvdmVyZSBxdWVzdG8gZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlPDrFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTm9cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2VpIHNpY3VybyBkaSB2b2xlciBlbG1pbmFyZSBxdWVzdG8gZmlsZTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiU2VpIHNpY3VybyBkaSB2b2xlciBlbG1pbmFyZSB0dXR0aSBpIGZpbGVzP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0b2xvIGRlbGxhIGRvbWFuZGFcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaXRcIl0gPSBpdGFsaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIml0XCJdID0gXCJpdGFsaWFub1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgamFwYW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gIHBhZ2VQcmV2VGV4dDogXCLliY3jgbhcIixcclxuICBwYWdlTmV4dFRleHQ6IFwi5qyh44G4XCIsXHJcbiAgY29tcGxldGVUZXh0OiBcIuWujOS6hlwiLFxyXG4gIHByZXZpZXdUZXh0OiBcIuODl+ODrOODk+ODpeODvFwiLFxyXG4gIGVkaXRUZXh0OiBcIue3qOmbhlwiLFxyXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLjgrnjgr/jg7zjg4hcIixcclxuICBvdGhlckl0ZW1UZXh0OiBcIuOBneOBruS7lu+8iOiqrOaYju+8iVwiLFxyXG4gIG5vbmVJdGVtVGV4dDogXCLjgarjgZdcIixcclxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLjgZnjgbnjgabpgbjmip5cIixcclxuICBwcm9ncmVzc1RleHQ6IFwiezB9L3sxfemggVwiLFxyXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MX3jga57MH3jgpLoqJjpjLLjgZnjgotcIixcclxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfeOBruizquWVj+OBq+WbnuetlOOBl+OBvuOBl+OBn+OAglwiLFxyXG4gIGVtcHR5U3VydmV5OiBcIuOBk+OBruiqv+afu+OBq+ihqOekuuOBp+OBjeOCi+ODmuODvOOCuOOChOizquWVj+OBr+OBguOCiuOBvuOBm+OCk1wiLFxyXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi6Kq/5p+744KS5a6M5LqG44GX44Gm44GP44KM44Gm44GC44KK44GM44Go44GG44GU44GW44GE44G+44GX44GfXCIsXHJcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcclxuICAgIFwi5b2T56S+44Gu6KiY6Yyy44Gr44KI44KL44Go44CB44GT44Gu6Kq/5p+744Gv44GZ44Gn44Gr5a6M5LqG44GX44Gm44GE44G+44GZ44CCXCIsXHJcbiAgbG9hZGluZ1N1cnZleTogXCLoqr/mn7vjgpLjg4Djgqbjg7Pjg63jg7zjg4nkuK1cIixcclxuICBvcHRpb25zQ2FwdGlvbjogXCLpgbjmip5cIixcclxuICB2YWx1ZTogXCLlgKTmiZPjgaFcIixcclxuICByZXF1aXJlZEVycm9yOiBcIuizquWVj+OBq+OBiuetlOOBiOS4i+OBleOBhFwiLFxyXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIuacgOS9juOBp+OCgjHjgaTjga7os6rllY/jgavnrZTjgYjjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuizquWVj+OBq+OBr+WFqOWIl+OBp+WbnuetlOOBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIG51bWVyaWNFcnJvcjogXCLmlbDlrZfjgafjgZToqJjlhaXkuIvjgZXjgYRcIixcclxuICB0ZXh0TWluTGVuZ3RoOiBcInswfSDmloflrZfku6XkuIrjgaflhaXlipvjgZfjgabkuIvjgZXjgYRcIixcclxuICB0ZXh0TWF4TGVuZ3RoOiBcInswfeaWh+Wtl+S7peS4i+OBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiezB95Lul5LiKezF95pyq5rqA44Gu5paH5a2X44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcbiAgbWluUm93Q291bnRFcnJvcjogXCJ7MH3ooYzku6XkuIrjgaflhaXlipvjgZfjgabkuIvjgZXjgYRcIixcclxuICBtaW5TZWxlY3RFcnJvcjogXCJ7MH3nqK7poZ7ku6XkuIrjgpLpgbjmip7jgZfjgabkuIvjgZXjgYRcIixcclxuICBtYXhTZWxlY3RFcnJvcjogXCJ7MH3ku6XkuIrjga7jg5Djg6rjgqLjg7Pjg4jjgpLpgbjmip7jgZfjgarjgYTjgafjgY/jgaDjgZXjgYTjgIJcIixcclxuICBudW1lcmljTWluTWF4OlxyXG4gICAgXCJ7MH3jga97MX3ku6XkuIrjgafjgYLjgorjgIF7Mn3ku6XkuIvjgafjgYLjgovjgZPjgajjgYzmnJvjgb7jgZfjgYTjgIJcIixcclxuICBudW1lcmljTWluOiBcIid7MH0nIOOBr+WQjOetieOBi3sxfeOCiOOCiuWkp+OBjeOBj+OBquOBkeOCjOOBsOOBquOCiuOBvuOBm+OCk1wiLFxyXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg44Gv5ZCM562J44GLezF944KI44KK5bCP44GV44GP44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KTXCIsXHJcbiAgaW52YWxpZEVtYWlsOiBcIuacieWKueOBquODoeODvOODq+OCouODieODrOOCueOCkuOBlOiomOWFpeS4i+OBleOBhFwiLFxyXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIuW8j+OBryB7MH3jga8ndHJ1ZSfjgpLov5TjgZnjgbnjgY3jgafjgZnjgIJcIixcclxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi44Oq44Kv44Ko44K544OI44Gv44Ko44Op44O8ICd7MH0nIOOCkui/lOOBl+OBvuOBl+OBn+OAgnsxfVwiLFxyXG4gIHVybEdldENob2ljZXNFcnJvcjpcclxuICAgIFwi44Oq44Kv44Ko44K544OI44GM56m644Gu44OH44O844K/44KS6L+U44GX44Gf44GL44CBJ3BhdGgnIOODl+ODreODkeODhuOCo+OBjOato+OBl+OBj+OBguOCiuOBvuOBm+OCk+OAglwiLFxyXG4gIGV4Y2VlZE1heFNpemU6IFwi44OV44Kh44Kk44Or44Gu44K144Kk44K644GvezB944KS6LaF44GI44Gm44Gv44GE44GR44G+44Gb44KTXCIsXHJcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuOBneOBruS7luOBruWApOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIHVwbG9hZGluZ0ZpbGU6XHJcbiAgICBcIuODleOCoeOCpOODq+OCkuOCouODg+ODl+ODreODvOODieS4reOBp+OBmeOAguOBl+OBsOOCieOBj+OBl+OBpuOBi+OCieWGjeW6puOBiuippuOBl+S4i+OBleOBhFwiLFxyXG4gIGxvYWRpbmdGaWxlOiBcIuiqreOBv+i+vOOBv+S4rVwiLFxyXG4gIGNob29zZUZpbGU6IFwi44OV44Kh44Kk44Or44KS6YG45oqeXCIsXHJcbiAgbm9GaWxlQ2hvc2VuOiBcIumBuOaKnuOBleOCjOOBn+ODleOCoeOCpOODq+OBr+OBguOCiuOBvuOBm+OCk1wiLFxyXG4gIGNvbmZpcm1EZWxldGU6IFwi44Os44Kz44O844OJ44KS5YmK6Zmk44GX44G+44GZ44GL77yfXCIsXHJcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLjgZPjga7lgKTjga/kuIDmhI/jgafjgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpPjgIJcIixcclxuICBhZGRDb2x1bW46IFwi5YiX44Gu6L+95YqgXCIsXHJcbiAgYWRkUm93OiBcIui/veWKoOihjFwiLFxyXG4gIHJlbW92ZVJvdzogXCLpmaTljrtcIixcclxuICBhZGRQYW5lbDogXCLmlrDopo/ov73liqBcIixcclxuICByZW1vdmVQYW5lbDogXCLpmaTljrtcIixcclxuICBjaG9pY2VzX0l0ZW06IFwi5ZOB55uuXCIsXHJcbiAgbWF0cml4X2NvbHVtbjogXCLjgrPjg6njg6BcIixcclxuICBtYXRyaXhfcm93OiBcIuihjFwiLFxyXG4gIHNhdmluZ0RhdGE6IFwi57WQ5p6c44Gv44K144O844OQ44O844Gr5L+d5a2Y44GV44KM44Gm44GE44G+44GZLi4u44CCXCIsXHJcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuOCqOODqeODvOOBjOeZuueUn+OBl+OAgee1kOaenOOCkuS/neWtmOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAglwiLFxyXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIue1kOaenOOBr+eEoeS6i+OBq+S/neWtmOOBleOCjOOBvuOBl+OBn1wiLFxyXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLjgoLjgYbkuIDluqboqabjgZfjgabjgb/jgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICB0aW1lck1pbjogXCLlg4XlsJFcIixcclxuICB0aW1lclNlYzogXCLjgrvjg4Pjgq9cIixcclxuICB0aW1lclNwZW50QWxsOiBcIuOBguOBquOBn+OBr+OBk+OBruODmuODvOOCuOOBq3swfeOCkuiyu+OChOOBl+OAgeWQiOioiOOBp3sxfeOCkuiyu+OChOOBl+OBvuOBl+OBn+OAglwiLFxyXG4gIHRpbWVyU3BlbnRQYWdlOiBcIuOBguOBquOBn+OBr+OBk+OBruODmuODvOOCuOOBq3swfeOCkuiyu+OChOOBl+OBvuOBl+OBn+OAglwiLFxyXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi5ZCI6KiI44GnezB944KS5L2/44Gj44Gf44GT44Go44Gr44Gq44KK44G+44GZ44CCXCIsXHJcbiAgdGltZXJMaW1pdEFsbDpcclxuICAgIFwi44GT44Gu44Oa44O844K444GrezF944Gu44GG44GhezB944KS6LK744KE44GX44CBezN944Gu44GG44GhezJ944KS5ZCI6KiI44Gn6LK744KE44GX44G+44GX44Gf44CCXCIsXHJcbiAgdGltZXJMaW1pdFBhZ2U6IFwi44GT44Gu44Oa44O844K444GnezF944GuezB944KS5L2/44Gj44Gf44GT44Go44GM44GC44KK44G+44GZ44CCXCIsXHJcbiAgdGltZXJMaW1pdFN1cnZleTogXCLlkIjoqIjjgad7MX3jga57MH3jgpLkvb/jgaPjgZ/jgZPjgajjgYzjgYLjgorjgb7jgZnjgIJcIixcclxuICBjbGVhbkNhcHRpb246IFwi5YmK6ZmkXCIsXHJcbiAgY2xlYXJDYXB0aW9uOiBcIuepuueZvVwiLFxyXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIuODleOCoeOCpOODq+OCkumBuOaKnlwiLFxyXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuOBk+OBruODleOCoeOCpOODq+OCkuWJiumZpFwiLFxyXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi5ZmrXCIsXHJcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuWQplwiLFxyXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuOBk+OBruODleOCoeOCpOODq+OCkuWJiumZpOOBl+OBpuOCguOCiOOCjeOBl+OBhOOBp+OBmeOBi++8n3swfT9cIixcclxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi44GZ44G544Gm44Gu44OV44Kh44Kk44Or44KS5YmK6Zmk44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfXCIsXHJcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuizquWVj+WQjVwiLFxyXG59O1xyXG5cclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJqYVwiXSA9IGphcGFuZXNlU3VydmV5U3RyaW5ncztcclxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiamFcIl0gPSBcIuaXpeacrOiqnlwiO1xyXG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGthemFraFN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQkNGA0YLSm9CwXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQmtC10LvQtdGB0ZZcIixcbiAgY29tcGxldGVUZXh0OiBcItCU0LDQudGL0L1cIixcbiAgcHJldmlld1RleHQ6IFwi0JDQu9C00YvQvSDQsNC70LAg0pvQsNGA0LDRg1wiLFxuICBlZGl0VGV4dDogXCLQoNC10LTQsNC60YbQuNGP0LvQsNGDXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLQkdCw0YHRgtCw0YNcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQkdCw0YHSm9CwICjTqdGC0ZbQvdC10LzRltC3LCDQttCw0LfRi9Kj0YvQtylcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItCW0L7Sm1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQkdCw0YDQu9GL0pPRi9C9INGC0LDSo9C00LDRg1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiezB9INC00LXQvSB7MX0g0LHQtdGCIFwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9INC00LXQvSB7MX0g0LbQsNC30LHQsFwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfSDRgdKx0YDQsNKb0YLQsNGA0pPQsCDQttCw0YPQsNC/XCIsXG4gIGVtcHR5U3VydmV5OiBcItCR0ZbRgCDQtNC1INCx0ZbRgCDRgdKx0YDQsNKbINC20L7Smy5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQodCw0YPQsNC70L3QsNC80LDQvdGLINGC0L7Qu9GC0YvRgNKT0LDQvdGL0qPRi9C3INKv0YjRltC9INGA0LDRhdC80LXRgiFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLQodGW0Lcg0LHSsdC7INGB0LDRg9Cw0LvQvdCw0LzQsNC90Ysg06nRgtGW0L8g0pvQvtC50LTRi9Kj0YvQty5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQodC10YDQstC10YDQtNC10L0g0LbSr9C60YLQtdGDLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCi0LDSo9C00LDRgy4uLlwiLFxuICB2YWx1ZTogXCLQvNOZ0L3RllwiLFxuICByZXF1aXJlZEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsINGB0rHRgNCw0pvSm9CwINC20LDRg9Cw0L8g0LHQtdGA0ZbSo9GW0LcuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItOo0YLRltC90LXQvNGW0LcsINC60LXQvCDQtNC10LPQtdC90LTQtSDQsdGW0YAg0YHSsdGA0LDSm9Kb0LAg0LbQsNGD0LDQvyDQsdC10YDRltKj0ZbQty5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLTqNGC0ZbQvdC10LzRltC3LCDTmdGA0LHRltGAINC20L7Qu9C00YvSoyDRgdKx0YDQsNKT0LDQvdGLINC20LDRg9Cw0L8g0LHQtdGA0ZbSo9GW0LcuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQltCw0YPQsNC/INGB0LDQvSDRgtKv0YDRltC90LTQtSDQsdC+0LvRg9GLINC60LXRgNC10LouXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQutOp0L8g0YLQsNKj0LHQsCDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQsNC3INGC0LDSo9Cx0LAg0LXQvdCz0ZbQt9GW0qPRltC3LlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItOo0YLRltC90LXQvNGW0LcsIHswfSDQsNC3INC205nQvdC1IHsxfSDQutOp0L8g0YLQsNKj0LHQsCDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC00LXQvSDQutC10Lwg0LXQvNC10YEg0LbQvtC7INGC0L7Qu9GC0YvRgNGL0qPRi9C3LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLTqNGC0ZbQvdC10LzRltC3LCDRgtGL0Lwg0LHQvtC70LzQsNGB0LAgezB9INC90rHRgdKb0LAg0YLQsNKj0LTQsNKj0YvQty5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INC90rHRgdKb0LDQtNCw0L0g0LrTqdC/INGC0LDSo9C00LDQvNCw0qPRi9C3LlwiLFxuICBudW1lcmljTWluTWF4OiAgIFwiJ3swfScgezF9INC00LXQvSDQutC10Lwg0LXQvNC10YEg0LbTmdC90LUgezJ9INC00LXQvSDQutOp0L8g0LXQvNC10YEg0LHQvtC70YMg0LrQtdGA0LXQulwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHsxfSDQtNC10L0g0LrQtdC8INC10LzQtdGBINCx0L7Qu9GDINC60LXRgNC10LpcIixcbiAgbnVtZXJpY01heDogXCInezB9JyB7MX0g0LTQtdC9INC606nQvyDQtdC80LXRgSDQsdC+0LvRgyDQutC10YDQtdC6XCIsXG4gIGludmFsaWRFbWFpbDogXCLTqNGC0ZbQvdC10LzRltC3LCDQttCw0YDQsNC80LTRiyDRjdC70LXQutGC0YDQvtC90LTRi9KbINC/0L7RiNGC0LDSo9GL0LfQtNGLINC10L3Qs9GW0LfRltKj0ZbQty5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9INOp0YDQvdC10LPRliAgJ3RydWUnINKb0LDQudGC0LDRgNGDINC60LXRgNC10LouXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQodKx0YDQsNGC0YvQvCDSm9Cw0YLQtdC70ZbQutGC0ZYg0pvQsNC50YLQsNGA0LTRiyd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiAgXCLQodKx0YDQsNGC0YvQvNKT0LAg0LbQsNGD0LDQvyDQsdC+0YEg0LrQtdC70LTRliDQvdC10LzQtdGB0LUgJ3BhdGgnINKb0LDRgdC40LXRgtGWINKb0LDRgtC1INC606nRgNGB0LXRgtGW0LvQs9C10L0gXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KTQsNC50LvQtNGL0qMg0LzTqdC70YjQtdGA0ZYgezB9INCw0YHQv9Cw0YMg0LrQtdGA0LXQui5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsIOKAnNCR0LDRgdKb0LDigJ0g0LbQvtC70YvQvdCwINC00LXRgNC10LrRgtGWINC10L3Qs9GW0LfRltKj0ZbQt1wiLFxuICB1cGxvYWRpbmdGaWxlOiAgXCLQodGW0LfQtNGW0qMg0YTQsNC50LvRi9Kj0YvQtyDQttKv0LrRgtC10LvRltC/INC20LDRgtGL0YAuINCR0ZbRgNC90LXRiNC1INGB0LXQutGD0L3QtCDRgtC+0YHRi9C/LCDSm9Cw0LnRgtCw0LTQsNC9INCx0LDQudKb0LDQvyDQutOp0YDRltKj0ZbQty5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0JbSr9C60YLQtdGDLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0KTQsNC50LvQtNCw0YDQtNGLINGC0LDSo9C00LDSo9GL0LcuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCk0LDQudC7INGC0LDSo9C00LDQu9GL0L3QsdCw0LTRi1wiLFxuICBjb25maXJtRGVsZXRlOiBcItCh0ZbQtyDQttCw0LfQsdCw0L3RiyDQttC+0Y/RgtGL0L3Ri9Kj0YvQt9KT0LAg0YHQtdC90ZbQvNC00ZbRgdGW0Lcg0LHQtT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQkdKx0Lsg0LzTmdC9INCx0ZbRgNC10LPQtdC5INCx0L7Qu9GDINC60LXRgNC10LouXCIsXG4gIGFkZENvbHVtbjogXCLQkdCw0pPQsNC90LAg0pvQvtGB0YNcIixcbiAgYWRkUm93OiBcItCW0L7Qu9C00Ysg0pvQvtGB0YNcIixcbiAgcmVtb3ZlUm93OiBcItOo0YjRltGA0YNcIixcbiAgYWRkUGFuZWw6IFwi0JbQsNKj0LAg0pvQvtGB0YNcIixcbiAgcmVtb3ZlUGFuZWw6IFwi06jRiNGW0YDRg1wiLFxuICBjaG9pY2VzX0l0ZW06IFwi0J3SsdGB0pvQsFwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCR0LDSk9Cw0L3QsFwiLFxuICBtYXRyaXhfcm93OiBcItCW0L7Qu1wiLFxuICBzYXZpbmdEYXRhOiBcItCd05nRgtC40LbQtdC70LXRgCDRgdC10YDQstC10YDQtNC1INGB0LDSm9GC0LDQu9Cw0LTRiy4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0prQsNGC0LXQu9GW0Log0YLRg9GL0L3QtNCw0LTRiywg0L3TmdGC0LjQttC1INGB0LDSm9GC0LDQu9GL0L3QsdCw0LTRiy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0J3TmdGC0LjQttC1INC+0LnQtNCw0pPRi9C00LDQuSDRgdCw0pvRgtCw0LvQtNGLIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0prQsNC50YLQsNC00LDQvSDQsdCw0LnSm9Cw0L8g0LrTqdGA0YNcIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCh0ZbQtyDQsdKx0Lsg0LHQtdGC0YLQtSB7MH0g0LrQtdGC0ZbRgNC00ZbSo9GW0Lcg0LbTmdC90LUg0LHQsNGA0LvRi9KT0YsgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQodGW0Lcg0LHSsdC7INCx0LXRgtGC0LUgezB9INC60LXRgtGW0YDQtNGW0qPRltC3LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCh0ZbQtyDRgdCw0YPQsNC70L3QsNC80LAg0LrQtdC30ZbQvdC00LUgezB9INC60LXRgtGW0YDQtNGW0qPRltC3LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcItCh0ZbQtyDQsdKx0Lsg0LHQtdGC0YLQtSB7MH0g0LTQtdC9IHsxfSDQutC10YLRltGA0LTRltKj0ZbQtyDQttOZ0L3QtSB7Mn0g0LTQtdC9IHszfSDQsdKv0LrRltC7INGB0LDRg9Cw0LvQvdCw0LzQsCDSr9GI0ZbQvS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0KHRltC3INCx0rHQuyDQsdC10YLRgtC1IHswfSDQtNC10L0gezF9INC60LXRgtGW0YDQtNGW0qPRltC3LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCh0ZbQtyDQsdKv0LrRltC7INGB0LDRg9Cw0LvQvdCw0LzQsCDSr9GI0ZbQvSB7MH0g0LTQtdC9IHsxfSDQutC10YLRltGA0LTRltKj0ZbQtyBcIixcbiAgY2xlYW5DYXB0aW9uOiBcItCi0LDQt9Cw0LvQsNGDXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQotCw0LfQsNC70LDRg1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLQpNCw0LnQuyDRgtCw0qPQtNCw0qPRi9C3XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCk0LDQudC70LTRiyDQttC+0LnRi9Kj0YvQt1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItCY05lcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCW0L7Sm1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQodGW0Lcg0LHSsdC7INGE0LDQudC70LTRiyDQttC+0Y/RgtGL0L3Ri9Kj0YvQt9KT0LAg0YHQtdC90ZbQvNC00ZbRgdGW0Lcg0LHQtTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0KHRltC3INCx0LDRgNC70YvSmyDRhNCw0LnQu9C00LDRgNC00Ysg0LbQvtGP0YLRi9C90YvSo9GL0LfSk9CwINGB0LXQvdGW0LzQtNGW0YHRltC3INCx0LU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQodKx0YDQsNKb0YLRi9KjINCw0YLQsNGD0YtcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wia2tcIl0gPSBrYXpha2hTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wia2tcIl0gPSBcIkthemFraFwiOyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIga29yZWFuU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuydtOyghFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi64uk7J2MXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLsmYTro4xcIixcbiAgcHJldmlld1RleHQ6IFwi7Iuc7IKsXCIsXG4gIGVkaXRUZXh0OiBcIu2OuOynke2VmOuLpFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi7Iuc7J6RXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi6riw7YOAKOyEpOuqhSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIuyXhuydjFwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLrqqjrkZAg7ISg7YOdXCIsXG4gIHByb2dyZXNzVGV4dDogXCLtjpjsnbTsp4AgezF9IOykkSB7MH1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSAvIHsxfSDquLDroZ1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfSAvIHsxfSDqsJzsnZgg7KeI66y47JeQIOuLteuzgCDtlahcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi7ISk66y47KeA7JeQIOuztOyXrOyngOuKlCDtjpjsnbTsp4Drgpgg7KeI66y47J20IOyXhuyKteuLiOuLpFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuyEpOusuCDsobDsgqzrpbwg7JmE66OM7ZW0IOyjvOyFlOyEnCDqsJDsgqztlanri4jri6QhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi6riw66Gd7JeQIOuUsOultOuptCDsnbTrr7gg7ISk66y4IOyhsOyCrOulvCDrp4jsuZjshajsirXri4jri6QuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi7ISk66y47KGw7IKs6rCAIOuhnOuTnOykkeyeheuLiOuLpC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLshKDtg53tlZjsi63si5zsmKQuLi5cIixcbiAgdmFsdWU6IFwi6rCSXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi7KeI66y47JeQIOuLte2VmOyLnOyYpC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi7ZWY64KYIOydtOyDgeydmCDsp4jrrLjsl5Ag64u17ZWY7Iut7Iuc7JikLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuuqqOuToCDtlonsl5Ag7J6I64qUIOyniOusuOyXkCDri7XtlZjsi63si5zsmKQuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLqsJLsnYAg7Iir7J6Q7Jes7JW8IO2VqeuLiOuLpC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIOy1nOyGjCB7MH3snpDsl6zslbwg7J6F64uI64ukLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIuuLteuzgOydmCDquLjsnbTripQgezB97J6Q66W8IOy0iOqzvCDtlaAg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIHswfSAtIHsxfeyekCDsgqzsnbTsl6zslbwg7ZWp64uI64ukLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuy1nOyGjCB7MH3qsJzsnZgg7ZaJ7J2EIOyxhOyasOyLreyLnOyYpFwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLstZzshowgezB96rCc7J2YIOuzgOyImOulvCDshKDtg53tlZjsi63si5zsmKQuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuy1nOuMgCB7MH3qsJzsnZgg67OA7IiY66W8IOyEoO2Dne2VmOyLreyLnOyYpC5cIixcbiAgbnVtZXJpY01pbk1heDogXCInezB9J+ydgCB7MX3rs7Tri6Qg7YGs6rGw64KYIOqwmeqzoCB7Mn3rs7Tri6Qg7J6R6rGw64KYIOqwmeyVhOyVvO2VqeuLiOuLpC5cIixcbiAgbnVtZXJpY01pbjogXCInezB9J+ydgCB7MX3rs7Tri6Qg7YGs6rGw64KYIOqwmeyVhOyVvO2VqeuLiOuLpC5cIixcbiAgbnVtZXJpY01heDogXCInezB9J+ydgCB7MX3rs7Tri6Qg7J6R6rGw64KYIOqwmeyVhOyVvO2VqeuLiOuLpC5cIixcbiAgaW52YWxpZEVtYWlsOiBcIuyYrOuwlOuluCDsnbTrqZTsnbwg7KO87IaM66W8IOyeheugpe2VmOyLreyLnOyYpC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi7ZGc7ZiE7IudOiB7MH3snYAgJ+ywuCfsnbTslrTslbwg7ZWp64uI64ukLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiJ3swfSfsnLzroZwg7J6Y66q765CcIOyalOyyreyeheuLiOuLpC4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCLruYTslrTsnojripQg642w7J207YSw66W8IOyalOyyre2WiOqxsOuCmCDsnpjrqrvrkJwg7IaN7ISx7J2YIOqyveuhnOyeheuLiOuLpC5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLtjIzsnbwg7YGs6riw6rCAIHswfeydhCDstIjqs7wg7ZWgIOyImCDsl4bsirXri4jri6QuXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLri6Trpbgg7KeI66y47J2EIOyekeyEse2VmOyLreyLnOyYpC5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCLtjIzsnbwg7JeF66Gc65OcIOykkeyeheuLiOuLpC4g7J6g7IucIO2bhCDri6Tsi5wg7Iuc64+E7ZWY7Iut7Iuc7JikLlwiLFxuICBsb2FkaW5nRmlsZTogXCLroZzrk5wg7KSRLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi7YyM7J28IOyEoO2DnS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi7ISg7YOd65CcIO2MjOydvOydtCDsl4bsirXri4jri6RcIixcbiAgY29uZmlybURlbGV0ZTogXCLquLDroZ3snYQg7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIiDsnbQg6rCS7J2AIOqzoOycoO2VtOyVvO2VqeuLiOuLpC5cIixcbiAgYWRkQ29sdW1uOiBcIuyXtCDstpTqsIBcIixcbiAgYWRkUm93OiBcIu2WiSDstpTqsIBcIixcbiAgcmVtb3ZlUm93OiBcIuygnOqxsFwiLFxuICBhZGRQYW5lbDogXCLsg4jroa3qsowg7LaU6rCAXCIsXG4gIHJlbW92ZVBhbmVsOiBcIuygnOqxsFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi7ZWt66qpXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi7Je0XCIsXG4gIG1hdHJpeF9yb3c6IFwi7ZaJXCIsXG4gIHNhdmluZ0RhdGE6IFwi6rKw6rO86rCAIOyEnOuyhOyXkCDsoIDsnqUg7KSR7J6F64uI64ukLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLsmKTrpZjqsIAg67Cc7IOd7ZWY7JesIOqysOqzvOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi6rKw6rO86rCAIOyEseqzteyggeycvOuhnCDsoIDsnqXrkJjsl4jsirXri4jri6QhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLri6Tsi5wg7Iuc64+E7ZWY7Iut7Iuc7JikXCIsXG4gIHRpbWVyTWluOiBcIuu2hFwiLFxuICB0aW1lclNlYzogXCLstIhcIixcbiAgdGltZXJTcGVudEFsbDogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfeydhCDshozsmpTtlbQg7LSdIHsxfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezBd7J20IOqxuOuguOyKteuLiOuLpFwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIuy0nSB7MH3snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB9L3sxfeydhCDshozsmpTtlbQg7LSdIHsyfS97M33snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfS97MX3snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIuy0nSB7MH0vezF97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIuuLpuq4sFwiLFxuICBjbGVhckNhcHRpb246IFwi7KeA7Jqw6riwXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIu2MjOydvOydhCDshKDtg51cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi7J20IO2MjOydvCDsoJzqsbBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLsmIhcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuyVhOuLiFwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJ7MH0g7YyM7J287J2EIOygnOqxsCDtlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLrqqjrk6Ag7YyM7J287J2EIOygnOqxsCDtlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLsp4jrrLgg7KCc66qpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImtvXCJdID0ga29yZWFuU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImtvXCJdID0gXCLtlZzqta3slrRcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgbGF0dmlhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBdHBha2HEvFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVMSBbMSBa1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiUGFiZWlndFwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmlla8Whc2thdMSranVtc1wiLFxuICBlZGl0VGV4dDogXCJSZWRpxKPEk3RcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlPEgWt0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQ2l0cyAobMWrZHp1LCBhcHJha3N0aWV0ISlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5hdlwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJJenbEk2zEk3RpZXMgdmlzdXNcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIkxhcHB1c2UgezB9IG5vIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiSWVyYWtzdMSrdCB7MH0gbm8gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBdGJpbGTEk2phIHV6IGphdXTEgWp1bWllbSB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTmF2IG5ldmllbmEgamF1dMSBanVtYS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJQYXRlaWNhbWllcyBKdW1zIHBhciBhbmtldGFzIGFpenBpbGTEq8WhYW51IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTcWrc3UgaWVyYWtzdGkgbGllY2luYSwga2EgasWrcyBqYXUgZXNhdCBhaXpwaWxkxKtqaXMgxaFvIGFwdGF1anUuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiSWVsxIFkZSBubyBzZXJ2ZXJhLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkl6dsSTbMSTdGllcy4uLlwiLFxuICB2YWx1ZTogXCJ2YWx1ZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIkzFq2R6dSwgYXRiaWxkaWV0IHV6IGphdXTEgWp1bXUhXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkzFq2R6dSwgYXRiaWxkaWV0IHV6IHZpc21heiB2aWVudSBqYXV0xIFqdW11LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkzFq2R6dSwgYXRiaWxkaWV0IHV6IGphdXTEgWp1bWllbSB2aXPEgXMgcmluZMSBcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkF0YmlsZGVpIGlyIGrEgWLFq3Qgc2thaXRsaW0uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiTMWrZHp1LCBpZXZhZGlldCB2aXNtYXogezB9IHNpbWJvbHVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkzFq2R6dSwgaWV2YWRpZXQgbWF6xIFrIG5la8SBIHswfSByYWtzdHrEq21lcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJMxatkenUsIGlldmFkaWV0IHZhaXLEgWsgbmVrxIEgezB9IHJha3N0esSrbWVzIHVuIG1hesSBayBuZWvEgSB7MX0gcmFrc3R6xKttZXMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTMWrZHp1LCBhaXpwaWxkaWV0IHZpc21heiB7MH0gcmluZGFzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJMxatkenUsIGl6dsSTbGlldGllcyB2aXNtYXogezB9IHZhcmlhbnR1LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJMxatkenUsIGl6dsSTbGlldGllcyBuZSB2YWlyYWsgcGFyIHswfSB2YXJpYW50aWVtLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSBuZWvEgSB7MX0sIHVuIHZpZW7EgWRhbSB2YWkgbWF6xIFrYW0sIG5la8SBIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGrEgWLFq3QgdmllbsSBZGFtIHZhaSBsaWVsxIFrYW0gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIkzFq2R6dSwgaWV2YWRpZXQgcGF0aWVzdSBlLXBhc3RhIGFkcmVzaSFcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiSXp0ZWljaWVuYW06IHswfSBqxIFhdGdyaWXFviDigJx0cnVl4oCdLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUGllcHJhc8SranVtxIEgdGlrYSBhdGdyaWV6dGEga8S8xatkYSDigJx7MH3igJ0uIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJQaWVwcmFzxKtqdW1zIGF0Z3JpZXphIHR1a8WhdXMgZGF0dXMgdmFpIHJla3ZpesSrdHMg4oCccGF0aOKAnSBpciBuZXBhcmVpenNcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGYWlsYSBsaWVsdW1zIG5lZHLEq2tzdCBwxIFyc25pZWd0IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkzFq2R6dSwgaWV2YWRpZXQgZGF0dXMgbGF1a8SBICdDaXRzJ1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiSsWrc3UgZmFpbHMgdGllayBhdWfFoXVwaWVsxIFkxJN0cy4gTMWrZHp1LCB1emdhaWRpZXQgdmFpcsSBa2FzIHNla3VuZGVzIHVuIG3Ek8SjaW5pZXQgdsSTbHJlaXouXCIsXG4gIGxvYWRpbmdGaWxlOiBcIk5vdGllayBpZWzEgWRlIC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkl6dsSTbGlldGllcyBmYWlsdXMgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOYXYgaXp2xJNsxJN0cyBuZXZpZW5zIGZhaWxzXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVmFpIHbEk2xhdGllcyBpemR6xJNzdCBpZXJha3N0dT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLFoGFpIHbEk3J0xKtiYWkgasSBYsWrdCB1bmlrxIFsYWkuXCIsXG4gIGFkZENvbHVtbjogXCJQaWV2aWVub3Qga29sb25udVwiLFxuICBhZGRSb3c6IFwiUGlldmllbm90IHJpbmR1XCIsXG4gIHJlbW92ZVJvdzogXCJOb8WGZW10XCIsXG4gIGFkZFBhbmVsOiBcIlBpZXZpZW5vIGphdW51XCIsXG4gIHJlbW92ZVBhbmVsOiBcIk5vxYZlbXRcIixcbiAgY2hvaWNlc19JdGVtOiBcImxpZXRhXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiU2xlamFcIixcbiAgbWF0cml4X3JvdzogXCJSaW5kYVwiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdMSBdGkgdGllayBzYWdsYWLEgXRpIHNlcnZlcsSrIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiUmFkxIFzIGvEvMWrZGEsIHVuIG3Ek3MgbmV2YXLEk2rEgW0gc2FnbGFixIF0IHJlenVsdMSBdHVzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHTEgXRpIHRpa2EgdmVpa3NtxKtnaSBzYWdsYWLEgXRpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiTcSTxKNpbmkgdsSTbHJlaXpcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfSB1biBrb3DEgSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJLb3DEgSBlc2F0IGl6dMSTcsSTamlzIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfSBubyB7MX0gdW4ga29wxIEgezJ9IG5vIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwixaBhasSBIGxhcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9IG5vIHsxfS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJLb3DEgSBlc2F0IGl6dMSTcsSTamlzIHswfSBubyB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJUxKtyc1wiLFxuICBjbGVhckNhcHRpb246IFwiU2thaWRyc1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJJenbEk2zEk3RpZXMgZmFpbHVcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiTm/FhmVtaWV0IMWhbyBmYWlsdVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkrEgVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTsSTXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlZhaSB0aWXFocSBbSB2xJNsYXRpZXMgbm/FhmVtdCDFoW8gZmFpbHU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlZhaSB0aWXFocSBbSB2xJNsYXRpZXMgbm/FhmVtdCB2aXN1cyBmYWlsdXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJKYXV0xIFqdW1hIG5vc2F1a3Vtc1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJsdlwiXSA9IGxhdHZpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wibHZcIl0gPSBcImxhdHZpZcWhdVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBsaXRodWFuaWFTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQXRnYWxcIixcbiAgcGFnZU5leHRUZXh0OiBcIlRvbGlhdVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQmFpZ3RpXCIsXG4gIHByZXZpZXdUZXh0OiBcIlBlcsW+acWrcmFcIixcbiAgZWRpdFRleHQ6IFwiUmVkYWd1b3RpXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJQcmFkxJd0aVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIktpdGEgKMSvdmVzdGkpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOxJdyYVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJQYXNpcmlua3RpIHZpc3VzXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQdXNsYXBpcyB7MH0gacWhIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwixK5yYcWheXRpIHswfSBpxaEgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBdHNha8SXIMSvIHswfSAvIHsxfSBrbGF1c2ltdXNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiQXBrbGF1c29qZSBuxJdyYSBtYXRvbW8gcHVzbGFwaW8gYXIga2xhdXNpbW8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRMSXa29qYW1lIHXFviBkYWx5dmF2aW3EhSBhcGtsYXVzb2plIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk3Fq3PFsyDEr3JhxaFhaSByb2RvLCBrYWQgamF1IGF0bGlrb3RlIMWhacSFIGFwa2xhdXPEhS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJQcmHFoW9tZSBwYWxhdWt0aS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJQYXNpcmlua3RpLi4uXCIsXG4gIHZhbHVlOiBcInJlaWvFoW3El1wiLFxuICByZXF1aXJlZEVycm9yOiBcIkLFq3RpbmEgYXRzYWt5dGkgxK8gxaHEryBrbGF1c2ltxIUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkLFq3RpbmEgYXRzYWt5dGkgYmVudCDEryB2aWVuxIUga2xhdXNpbcSFLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlByYcWhb21lIGF0c2FreXRpIMSvIGtsYXVzaW11cyB2aXNvc2UgZWlsdXTEl3NlLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVHVyaSBixat0aSBza2FpxI1pYWkuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBiZW50IHswfSBzaW1ib2xpdXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBtYcW+aWF1IG5laSB7MH0gc2ltYm9sacWzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwiUHJhxaFvbWUgc3V2ZXN0aSBkYXVnaWF1IG5laSB7MH0gaXIgbWHFvmlhdSBuZWkgezF9IHNpbWJvbGnFsy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQcmHFoW9tZSBzdXZlc3RpIG5lIG1hxb5pYXUgbmVpIHswfSBlaWx1xI1pxbMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlByYcWhb21lIHBhc2lyaW5rdGkgYmVudCB7MH0gdmFyaWFudMWzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQYXNpcmlua2l0ZSBuZSBkYXVnaWF1IGthaXAgezB9IHZhcmlhbnR1cy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHR1cmkgYsWrdGkgbHlndXMgYXJiYSBkaWRlc25pcyBuZWkgezF9IGlyIGx5Z3VzIGFyYmEgbWHFvmVzbmlzIG5laSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyB0dXLEl3TFsyBixat0aSBseWd1cyBhcmJhIGRpZGVzbmlzIG5laSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyB0dXLEl3TFsyBixat0aSBseWd1cyBhciBtYcW+ZXNuaXMgdcW+IHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUHJhxaFvbWUgxK92ZXN0aSBnYWxpb2phbnTEryBlbGVrdHJvbmluaW8gcGHFoXRvIGFkcmVzxIUuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlJlaWvFoW3ElzogezB9IHR1cmkgZ3LEhcW+aW50aSAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJVxb5rbGF1c2EgZ3LEhcW+aW5vIGtsYWlkxIUnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlXFvmtsYXVzYSBncsSFxb5pbm8gdHXFocSNaXVzIGR1b21lbmlzIGFyYmEgJ3BhdGgnIHNhdnlixJcgeXJhIG5ldGVpc2luZ2FcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGYWlsbyBkeWRpcyBuZXR1cmkgdmlyxaF5dGkgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwixK52ZXNraXRlIGtpdMSFIHJlaWvFoW3EmS5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkrFq3PFsyBmYWlsYXMgeXJhIGtlbGlhbWFzLiBQYWxhdWtpdGUga2VsZXTEhSBzZWt1bmTFvmnFsyBpciBiYW5keWtpdGUgZGFyIGthcnTEhS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiUHJhxaFvbWUgcGFsYXVrdGkuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJQYXNpcmlua3RpIGZhaWzEhSh1cykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5lcGFzaXJpbmt0YXMgam9rcyBmYWlsYXNcIixcbiAgY29uZmlybURlbGV0ZTogXCJBciBub3JpdGUgacWhdHJpbnRpIMSvcmHFocSFP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIsWgaSByZWlrxaFtxJcgdHVyxJd0xbMgYsWrdGkgdW5pa2FsaS5cIixcbiAgYWRkQ29sdW1uOiBcIlByaWTEl3RpIHN0dWxwZWzEr1wiLFxuICBhZGRSb3c6IFwiUHJpZMSXdGkgZWlsdXTEmVwiLFxuICByZW1vdmVSb3c6IFwiScWhdHJpbnRpXCIsXG4gIGFkZFBhbmVsOiBcIlByaWTEl3RpIG5hdWrEhVwiLFxuICByZW1vdmVQYW5lbDogXCJJxaF0cmludGlcIixcbiAgY2hvaWNlc19JdGVtOiBcImVsZW1lbnRhc1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIlN0dWxwZWxpc1wiLFxuICBtYXRyaXhfcm93OiBcIkVpbHV0xJdcIixcbiAgc2F2aW5nRGF0YTogXCJSZXp1bHRhdGFpIHNhdWdvbWkgc2VydmVyeWplLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLErnZ5a28ga2xhaWRhIGlyIG1lcyBuZWdhbMSXam9tZSBpxaFzYXVnb3RpIHJlenVsdGF0xbMuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0YWkgYnV2byBpxaFzYXVnb3RpIHPEl2ttaW5nYWkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJCYW5keXRpIGRhciBrYXJ0xIVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlByYWxlaWRvdGUgezB9IMWhaWFtZSBwdXNsYXB5amUgaXIgezF9IGnFoSB2aXNvLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJQcmFsZWlkb3RlIHswfSDFoWlhbWUgcHVzbGFweWplLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlByYWxlaWRvdGUgezB9IGnFoSB2aXNvLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gxaFpYW1lIHB1c2xhcHlqZSBpciB7Mn0gacWhIHszfSBpxaEgdmlzby5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiUHJhbGVpZG90ZSB7MH0gacWhIHsxfSDFoWlhbWUgcHVzbGFweWplLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gacWhIHZpc28uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJJxaF2YWx5dGlcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlZhbHl0aVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJQYXNpcmlua3RpIGZhaWzEhVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJJxaF0cmludGkgxaHEryBmYWlsxIVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJUYWlwXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJBciB0aWtyYWkgbm9yaXRlIHBhxaFhbGludGkgxaHEryBmYWlsxIU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFyIHRpa3JhaSBub3JpdGUgcGHFoWFsaW50aSB2aXN1cyBmYWlsdXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLbGF1c2ltbyBwYXZhZGluaW1hc1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJsdFwiXSA9IGxpdGh1YW5pYVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJsdFwiXSA9IFwibGlldHV2acWzXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIG1hY2Vkb25pYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J/RgNC10YLRhdC+0LTQvdCwXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQodC70LXQtNC90L5cIixcbiAgY29tcGxldGVUZXh0OiBcItCX0LDQstGA0YjQuFwiLFxuICBwcmV2aWV3VGV4dDogXCLQn9GA0LXQs9C70LXQtFwiLFxuICBlZGl0VGV4dDogXCLQo9GA0LXQtNGD0LLQsNGa0LVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCX0LDQv9C+0YfQvdC10YLQtVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L4gKNC+0L/QuNGI0LgpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC40YjRgtC+XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCh0LXQu9C10LrRgtC40YDQsNGYINGB0LVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLRgNCw0L3QuNGG0LAgezB9INC+0LQgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQodC90LjQvNC4IHswfSDQvtC0IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0J7QtNCz0L7QstC+0YDQtdC90Lgg0L3QsCB7MH0gLyB7MX0g0L/RgNCw0YjQsNGa0LBcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdC80LAg0LLQuNC00LvQuNCy0LAg0YHRgtGA0LDQvdC40YbQsCDQuNC70Lgg0L/RgNCw0YjQsNGa0LUg0LLQviDQuNGB0YLRgNCw0LbRg9Cy0LDRmtC10YLQvi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQktC4INCx0LvQsNCz0L7QtNCw0YDQuNC80LUg0YjRgtC+INCz0L4g0LfQsNCy0YDRiNC40LLRgtC1INC40YHRgtGA0LDQttGD0LLQsNGa0LXRgtC+IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi0J3QsNGI0LjRgtC1INC30LDQv9C40YHQuCDQv9C+0LrQsNC20YPQstCw0LDRgiDQtNC10LrQsCDQstC10ZzQtSDRgdGC0LUg0LPQviDQt9Cw0LLRgNGI0LjQu9C1INC+0LLQsCDQuNGB0YLRgNCw0LbRg9Cy0LDRmtC1LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCQ0L3QutC10YLQsNGC0LAg0YHQtSDQstGH0LjRgtGD0LLQsCAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JjQt9Cx0LXRgNC10YLQtSAuLi5cIixcbiAgdmFsdWU6IFwi0LLRgNC10LTQvdC+0YHRglwiLFxuICByZXF1aXJlZEVycm9yOiBcItCS0LUg0LzQvtC70LDQvCwg0L7QtNCz0L7QstC+0YDQtdGC0LUg0L3QsCDQv9GA0LDRiNCw0ZrQtdGC0L4uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCS0LUg0LzQvtC70LDQvCwg0L7QtNCz0L7QstC+0YDQtdGC0LUg0LHQsNGA0LXQvCDQvdCwINC10LTQvdC+INC/0YDQsNGI0LDRmtC1LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCS0LUg0LzQvtC70LjQvNC1LCDQvtC00LPQvtCy0L7RgNC10YLQtSDQvdCwINC/0YDQsNGI0LDRmtCwINCy0L4g0YHQuNGC0LUg0YDQtdC00L7QstC4LlwiLFxuICBudW1lcmljRXJyb3I6IFwi0JLRgNC10LTQvdC+0YHRgtCwINGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQvdGD0LzQtdGA0LjRh9C60LAuXCIsXG4gIG1pbkVycm9yOiBcItCS0YDQtdC00L3QvtGB0YLQsCDQvdC1INGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQv9C+0LzQsNC70LAg0L7QtCB7MH1cIixcbiAgbWF4RXJyb3I6IFwi0JLRgNC10LTQvdC+0YHRgtCwINC90LUg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC/0L7Qs9C+0LvQtdC80LAg0L7QtCB7MH1cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQktC90LXRgdC10YLQtSDQvdCw0ZjQvNCw0LvQutGDIHswfSDQt9C90LDQui/RhtC4LlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCS0L3QtdGB0LXRgtC1INC90LUg0L/QvtCy0LXRnNC1INC+0LQgezB9INC30L3QsNC6L9GG0LguXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi0JLQvdC10YHQtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0Lgg0L3QtSDQv9C+0LLQtdGc0LUg0L7QtCB7MX0g0LfQvdCw0YbQuC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQn9C+0L/QvtC70L3QtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0YDQtdC0KNC+0LLQuCkuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCS0LUg0LzQvtC70LjQvNC1INC40LfQsdC10YDQtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0LLQsNGA0LjRmNCw0L3RgtCwKNC4KS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0JjQt9Cx0LXRgNC10YLQtSDQvdC1INC/0L7QstC10ZzQtSDQvtC0IHswfSDQstCw0YDQuNGY0LDQvdGC0LAo0LgpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90LDRmNC80LDQu9C60YMgezF9INC4INC90LDRmNC80L3QvtCz0YMgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90LDRmNC80LDQu9C60YMgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90LDRmNC80L3QvtCz0YMgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLQktC1INC80L7Qu9C40LzQtSDQstC90LXRgdC10YLQtSDQstCw0LvQuNC00L3QsCDQtS3QvNCw0LjQuyDQsNC00YDQtdGB0LAuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcItCY0LfRgNCw0LfQvtGCOiB7MH0g0YLRgNC10LHQsCDQtNCwINGB0LUg0LLRgNCw0YLQuCAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQkdCw0YDQsNGa0LXRgtC+INCy0YDQsNGC0Lgg0LPRgNC10YjQutCwICd7MH0nLiB7MX0gXCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItCR0LDRgNCw0ZrQtdGC0L4g0LLRgNCw0YLQuCDQv9GA0LDQt9C90Lgg0L/QvtC00LDRgtC+0YbQuCDQuNC70Lgg0YHQstC+0ZjRgdGC0LLQvtGC0L4gJ3BhdGgnINC1INC90LXRgtC+0YfQvdC+XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0JPQvtC70LXQvNC40L3QsNGC0LAg0L3QsCDQtNCw0YLQvtGC0LXQutCw0YLQsCDQvdC1INGC0YDQtdCx0LAg0LTQsCDQvdCw0LTQvNC40L3Rg9Cy0LAgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JLQvdC10YHQtdGC0LUg0ZjQsCDQtNGA0YPQs9Cw0YLQsCDQstGA0LXQtNC90L7RgdGCLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGI0LDRgtCwINC00LDRgtC+0YLQtdC60LAg0YHQtSDQv9C+0YHRgtCw0LLRg9Cy0LAuINCS0LUg0LzQvtC70LjQvNC1INC/0L7Rh9C10LrQsNGY0YLQtSDQvdC10LrQvtC70LrRgyDRgdC10LrRg9C90LTQuCDQuCDQvtCx0LjQtNC10YLQtSDRgdC1INC/0L7QstGC0L7RgNC90L4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCh0LUg0LLRh9C40YLRg9Cy0LAgLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0JjQt9Cx0LXRgNC10YLQtSDQtNCw0YLQvtGC0LXQutCwICjQuCkgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLQndC1INGB0LUg0LjQt9Cx0YDQsNC90Lgg0LTQsNGC0L7RgtC10LrQuFwiLFxuICBjb25maXJtRGVsZXRlOiBcItCU0LDQu9C4INGB0LDQutCw0YLQtSDQtNCwINCz0L4g0LjQt9Cx0YDQuNGI0LXRgtC1INC30LDQv9C40YHQvtGCP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCe0LLQsNCwINCy0YDQtdC00L3QvtGB0YIg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC10LTQuNC90YHRgtCy0LXQvdCwLlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtC00LDRmCDQutC+0LvQvtC90LBcIixcbiAgYWRkUm93OiBcItCU0L7QtNCw0LTQuCDRgNC10LRcIixcbiAgcmVtb3ZlUm93OiBcItCe0YLRgdGC0YDQsNC90LhcIixcbiAgZW1wdHlSb3dzVGV4dDogXCLQndC10LzQsCDRgNC10LTQvtCy0LguXCIsXG4gIGFkZFBhbmVsOiBcItCU0L7QtNCw0LTQuCDQvdC+0LLQvlwiLFxuICByZW1vdmVQYW5lbDogXCLQntGC0YHRgtGA0LDQvdC4XCIsXG4gIGNob2ljZXNfSXRlbTogXCLRgdGC0LDQstC60LBcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LBcIixcbiAgbWF0cml4X3JvdzogXCLQoNC10LRcIixcbiAgc2F2aW5nRGF0YTogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INGB0LUg0LfQsNGH0YPQstGD0LLQsNCw0YIg0L3QsCDRgdC10YDQstC10YDQvtGCIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0J3QsNGB0YLQsNC90LAg0LPRgNC10YjQutCwINC4INC90LUg0LzQvtC20LXQstC80LUg0LTQsCDQs9C4INC30LDRh9GD0LLQsNC80LUg0YDQtdC30YPQu9GC0LDRgtC40YLQtS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0KDQtdC30YPQu9GC0LDRgtC40YLQtSDQsdC10LAg0YPRgdC/0LXRiNC90L4g0LfQsNGH0YPQstCw0L3QuCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCe0LHQuNC00Lgg0YHQtSDQv9C+0LLRgtC+0YDQvdC+XCIsXG4gIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICB0aW1lclNlYzogXCLRgdC10LpcIixcbiAgdGltZXJTcGVudEFsbDogXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsCDQuCDQstC60YPQv9C90L4gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQktC40LUg0L/QvtGC0YDQvtGI0LjQstGC0LUg0LLQutGD0L/QvdC+IHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCf0L7QvNC40L3QsNCy0YLQtSB7MH0g0L7QtCB7MX0g0L3QsCDQvtCy0LDQsCDRgdGC0YDQsNC90LjRhtCwINC4IHsyfSDQvtC0IHszfSDQstC60YPQv9C90L4uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCf0L7QvNC40L3QsNCy0YLQtSB7MH0g0L7QtCB7MX0g0L3QsCDQvtCy0LDQsCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCS0LjQtSDQv9C+0YLRgNC+0YjQuNCy0YLQtSDQstC60YPQv9C90L4gezB9INC+0LQgezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi0KfQuNGB0YLQuFwiLFxuICBjbGVhckNhcHRpb246IFwi0JTQsCDRgNCw0YHRh9C40YHRgtC4XCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUg0LTQsNGC0L7RgtC10LrQsFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQntGC0YHRgtGA0LDQvdC10YLQtSDRmNCwINC+0LLQsNCwINC00LDRgtC+0YLQtdC60LBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQlNCwXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndC1XCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCU0LDQu9C4INGB0YLQtSDRgdC40LPRg9GA0L3QuCDQtNC10LrQsCDRgdCw0LrQsNGC0LUg0LTQsCDRmNCwINC+0YLRgdGC0YDQsNC90LjRgtC1INC+0LLQsNCwINC00LDRgtC+0YLQtdC60LA6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCU0LDQu9C4INGB0YLQtSDRgdC40LPRg9GA0L3QuCDQtNC10LrQsCDRgdCw0LrQsNGC0LUg0LTQsCDQs9C4INC+0YLRgdGC0YDQsNC90LjRgtC1INGB0LjRgtC1INC00LDRgtC+0YLQtdC60Lg/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQndCw0YHQu9C+0LIg0L3QsCDQv9GA0LDRiNCw0ZrQtdGC0L5cIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcItCe0YLQutCw0LbQuFwiLFxuICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCLQkNC/0LvQuNGG0LjRgNCw0ZhcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wibWtcIl0gPSBtYWNlZG9uaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm1rXCJdID0gXCLQnNCw0LrQtdC00L7QvdGB0LrQuFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBub3J3ZWdpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiRm9ycmlnZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiTmVzdGVcIixcbiAgY29tcGxldGVUZXh0OiBcIkZ1bGxmw7hyXCIsXG4gIHByZXZpZXdUZXh0OiBcIkZvcmjDpW5kc3Zpc25pbmdcIixcbiAgZWRpdFRleHQ6IFwiUmVkaWdlcmVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQW5uZXQgKGJlc2tyaXYpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJJbmdlblwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWZWxnIGFsbGVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGF2IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiVGEgb3BwIHswfSBhdiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkJlc3ZhcnRlIHswfSAvIHsxfSBzcMO4cnNtw6VsXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRldCBlciBpbmdlbiBzeW5saWcgc2lkZSBlbGxlciBzcMO4cnNtw6VsIGkgdW5kZXJzw7hrZWxzZW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFrayBmb3IgYXQgZHUgZnVsbGbDuHJ0ZSB1bmRlcnPDuGtlbHNlbiFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlbDpXJlIGRhdGEgdmlzZXIgYXQgZHUgYWxsZXJlZGUgaGFyIGdqZW5ub21mw7hydCBkZW5uZSB1bmRlcnPDuGtlbHNlbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJVbmRlcnPDuGtlbHNlbiBsYXN0ZXIuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVmVsZy4uLlwiLFxuICB2YWx1ZTogXCJ2ZXJkaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlZlbm5saWdzdCBzdmFyIHDDpSBzcMO4cnNtw6VsZXQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlZlbm5saWdzdCBzdmFyIHDDpSBtaW5zdCBldHQgc3DDuHJzbcOlbC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWZW5ubGlnc3Qgc3ZhciBww6Ugc3DDuHJzbcOlbCBpIGFsbGUgcmFkZXIuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJWZXJkaWVuIHNrYWwgdsOmcmUgbnVtZXJpc2suXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtaW5zdCB7MH0gdGVnbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIG1pbmRyZSBlbm4gezB9IHRlZ24uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtZXIgZW5uIHswfSBvZyBtaW5kcmUgZW5uIHsxfSB0ZWduLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlZlbm5saWdzdCBmeWxsIGlubiBtaW5zdCB7MH0gcmFkZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZlbm5saWdzdCB2ZWxnIG1pbnN0IHswfSB2YXJpYW50ZXIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZlbm5saWdzdCBpa2tlIHZlbGcgbWVyIGVubiB7MH0gdmFyaWFudGVyLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWVyIGVubiB7MX0gb2cgbGlrIGVsbGVyIG1pbmRyZSBlbm4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWVyIGVubiB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBiw7hyIHbDpnJlIGxpayBlbGxlciBtaW5kcmUgZW5uIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBlbiBneWxkaWcgZS1wb3N0IGFkcmVzc2UuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlV0dHJ5a2tldDogezB9IHNrYWwgcmV0dXJuZXJlICdzYW50Jy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkZvcmVzcMO4cnNlbGVuIHJldHVybmVydGUgZmVpbGVuICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiRm9yZXNww7hyc2VsZW4gcmV0dXJuZXJ0ZSB0b21tZSBkYXRhLCBlbGxlciAnc3RpJyAtZWdlbnNrYXBlbiBlciBmZWlsXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmlsc3TDuHJyZWxzZW4gYsO4ciBpa2tlIG92ZXJzdGlnZSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIGRlbiBhbmRyZSB2ZXJkaWVuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmlsZW4gZGluIGxhc3RlcyBvcHAuIFZlbm5saWdzdCB2ZW50IG5vZW4gc2VrdW5kZXIgb2cgcHLDuHYgaWdqZW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkxhc3RlciBpbm4gLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVmVsZyBmaWwgKGVyKSAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkluZ2VuIGZpbCB2YWxndFwiLFxuICBjb25maXJtRGVsZXRlOiBcIsOYbnNrZXIgZHUgw6Ugc2xldHRlIHBvc3Rlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZW5uZSB2ZXJkaWVuIHNrYWwgdsOmcmUgdW5pay5cIixcbiAgYWRkQ29sdW1uOiBcIkxlZ2cgdGlsIGtvbG9ubmVcIixcbiAgYWRkUm93OiBcIkxlZ2cgdGlsIHJhZFwiLFxuICByZW1vdmVSb3c6IFwiRmplcm5cIixcbiAgYWRkUGFuZWw6IFwiTGVnZyB0aWwgbnlcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRmplcm5lXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlbGVtZW50XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb25uZVwiLFxuICBtYXRyaXhfcm93OiBcIlJhZFwiLFxuICBzYXZpbmdEYXRhOiBcIlJlc3VsdGF0ZW5lIGxhZ3JlcyBww6Ugc2VydmVyZW4gLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEZXQgb3Bwc3RvIGVuIGZlaWwsIG9nIHZpIGt1bm5lIGlra2UgbGFncmUgcmVzdWx0YXRlbmUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlc3VsdGF0ZW5lIGJsZSBsYWdyZXQhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcsO4diBpZ2plblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBww6UgZGVubmUgc2lkZW4gb2cgezF9IHRvdGFsdC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBww6UgZGVubmUgc2lkZW4uXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSB0b3RhbHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJEdSBoYXIgdGlsYnJha3QgezB9IGF2IHsxfSBww6UgZGVubmUgc2lkZW4gb2cgdG90YWx0IHsyfSBhdiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciB0aWxicmFrdCB7MH0gYXYgezF9IHDDpSBkZW5uZSBzaWRlbi5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgdGlsYnJha3QgezB9IGF2IHsxfSB0b3RhbHQuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJSZW5zXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJLbGFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZlbGcgRmlsXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZqZXJuIGRlbm5lIGZpbGVuXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5laVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJFciBkdSBzaWtrZXIgcMOlIGF0IGR1IHZpbCBmamVybmUgZGVubmUgZmlsZW46IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVyIGR1IHNpa2tlciBww6UgYXQgZHUgdmlsIGZqZXJuZSBhbGxlIGZpbGVuZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlNww7hyc23DpWxzdGl0dGVsXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcIm5vXCJdID0gbm9yd2VnaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm5vXCJdID0gXCJub3Jza1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBwZXJzaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItmC2KjZhNuMXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLYqNi52K/bjFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi2KraqdmF24zZhFwiLFxuICBwcmV2aWV3VGV4dDogXCLZvtuM2LQg2YbZhdin24zYtFwiLFxuICBlZGl0VGV4dDogXCLZiNuM2LHYp9uM2LRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIti02LHZiNi5XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi2K/bjNqv2LEo2KrZiNi224zYrSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItmH24zahlwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLYp9mG2KrYrtin2Kgg2YfZhdmHXCIsXG4gIHByb2dyZXNzVGV4dDogXCLYtdmB2K3ZhyB7MH0g2KfYsiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItmF2YjYsdivIHswfSDYp9iyIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi2KrYudiv2KfYryDZvtin2LPYriB7MH0vezF9INiz2YjYp9mEXCIsXG4gIGVtcHR5U3VydmV5OiBcIti12YHYrdmHINin24wg24zYpyDar9iy24zZhtmHINin24wg2KjYsdin24wg2KfbjNmGINm+2LHYs9i02YbYp9mF2Ycg2YXZiNis2YjYryDZhtuM2LPYqi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLYp9iyINi02YXYpyDYqNin2KjYqiDYqtqp2YXbjNmEINin24zZhiDZvtix2LPYtNmG2KfZhdmHINmF2KrYtNqp2LHbjNmFXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLYqNmHINmG2LjYsSDZhduMINix2LPYryDZh9mFINmH2YUg2KfaqdmG2YjZhiDZvtix2LPYtNmG2KfZhdmHINix2Kcg2KraqdmF24zZhCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi2K/Ysdit2KfZhCDYp9uM2KzYp9ivINm+2LHYs9i02YbYp9mF2YdcIixcbiAgb3B0aW9uc0NhcHRpb246IFwi2KfZhtiq2K7Yp9ioINqp2YbbjNivLi4uXCIsXG4gIHZhbHVlOiBcItmF2YLYr9in2LFcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLZhNi32YHYpyDYqNmHINiz2YjYp9mEINm+2KfYs9iuINiv2YfbjNivXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItmE2LfZgdinINit2K/Yp9mC2YQg2KjZhyDbjNqpINiz2YjYp9mEINm+2KfYs9iuINiv2YfbjNivLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItmE2LfZgdinINiz2YjYp9mE2KfYqiDYqtmF2KfZhSDYs9i32LHZh9inINix2Kcg2b7Yp9iz2K4g2K/Zh9uM2K8uXCIsXG4gIG51bWVyaWNFcnJvcjogXCLZhdmC2K/Yp9ixINio2KfbjNivINi52K/Yr9uMINio2KfYtNivXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi2YTYt9mB2Kcg2K3Yr9in2YLZhCAgezB9INit2LHZgSDZiNin2LHYryDaqdmG24zYr1wiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItmE2LfZgdinINqp2YXYqtixINin2LIgIHswfSDYrdix2YEg2YjYp9ix2K8g2qnZhtuM2K8uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi2YTYt9mB2Kcg2KjbjNi02KrYsSDYp9iyICB7MH0g2K3YsdmBINmIINqp2YXYqtixINin2LIgezF9INit2LHZgSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLZhNi32YHYpyDYrdiv2KfZgtmEIHswfSDYs9i32LEg2YjYp9ix2K8g2qnZhtuM2K8uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItit2K/Yp9mC2YQgezB9INin2YbYqtiu2KfYqCDaqdmG24zYry5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi2YTYt9mB2Kcg2KjbjNi02KrYsSDYp9iyICB7MH0g2KfZhtiq2K7Yp9ioINqp2YbbjNivLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgXCInezB9JyDYqNin24zYryDYqNuM2YYgezF9INmIIHsyfSDYqNin2LTYr1wiLFxuICBudW1lcmljTWluOiBcIid7MH0nINio2LLYsdqv2KrYsSDZhdiz2KfZiNuMIHsxfSDYqNin2LTYr1wiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINio2KfbjNivINqp2Yjahtqp2KrYsSDbjNinINmF2LPYp9mI24wgezF9INio2KfYtNivXCIsXG4gIGludmFsaWRFbWFpbDogXCLZhNi32YHYpyDYp9uM2YXbjNmEINi12K3bjNitINiv2LHYrCDaqdmG24zYr1wiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLYudio2KfYsdiqOiB7MH0g2b7Yp9iz2K4g2KjYp9uM2K8gJ3RydWUnINio2KfYtNivLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi2K/Ysdiu2YjYp9iz2Kog2KjYpyDYrti32Kcg2LHZiNio2LHZiCDYtNivOiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgIFwi2K/Ysdiu2YjYp9iz2Kog2YXYs9uM2LHbjCDYrtin2YTbjCDYqNin2LLar9i02Kog2K/Yp9iv2Ycg24zYpyDZhdiz24zYsSDYr9ix2LPYqiDYqtmG2LjbjNmFINmG2LTYr9mHXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi2KjbjNi02KrYsduM2YYg2K3YrNmFINmF2KzYp9iyINmB2KfbjNmEOiB7MH1cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItmF2YLYr9in2LEgJ9iv24zar9ixJyDYsdinINmI2KfYsdivINqp2YbbjNivXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICBcItmB2KfbjNmEINiv2LEg2K3Yp9mEINii24zZhNmI2K8g2KfYs9iqLiDZhNi32YHYpyDYtdio2LEg2qnZhtuM2K8uXCIsXG4gIGxvYWRpbmdGaWxlOiBcItio2KfYsdqv24zYsduMLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi2KfZhtiq2K7Yp9ioINmB2KfbjNmEKNmH2KcpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLZh9uM2oYg2YHYp9uM2YTbjCDYp9mG2KrYrtin2Kgg2YbYtNiv2YdcIixcbiAgY29uZmlybURlbGV0ZTogXCLYotuM2Kcg2YXYp9uM2YQg2KjZhyDYrdiw2YEg2KfbjNmGINix2K/bjNmBINmH2LPYqtuM2K/Yn1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItin24zZhiDZhdmC2K/Yp9ixINio2KfbjNivINi624zYsSDYqtqp2LHYp9ix24wg2KjYp9i02K9cIixcbiAgYWRkQ29sdW1uOiBcItiz2KrZiNmGINis2K/bjNivXCIsXG4gIGFkZFJvdzogXCLYs9i32LEg2KzYr9uM2K9cIixcbiAgcmVtb3ZlUm93OiBcItit2LDZgVwiLFxuICBhZGRQYW5lbDogXCLYrNiv24zYr1wiLFxuICByZW1vdmVQYW5lbDogXCLYrdiw2YFcIixcbiAgY2hvaWNlc19JdGVtOiBcItii24zYqtmFXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi2LPYqtmI2YZcIixcbiAgbWF0cml4X3JvdzogXCLYs9i32LFcIixcbiAgc2F2aW5nRGF0YTogXCLZhtiq2KfbjNisINiv2LEg2K3Yp9mEINiw2K7bjNix2Ycg2LPYp9iy24wg2K/YsSDYs9ix2YjYsSDYp9iz2KpcIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItiu2LfYp9uM24wg2K/YsSDYsNiu24zYsdmHINiz2KfYstuMINmG2KrYp9uM2Kwg2LHYriDYr9in2K/ZhyDYp9iz2KpcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi2YbYqtin24zYrCDYqNinINmF2YjZgdmC24zYqiDYsNiu24zYsdmHINi02K9cIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItmF2KzYr9ivINiq2YTYp9i0INqp2YbbjNivXCIsXG4gIHRpbWVyTWluOiBcItiv2YLbjNmC2YdcIixcbiAgdGltZXJTZWM6IFwi2KvYp9mG24zZh1wiLFxuICB0aW1lclNwZW50QWxsOiBcIti02YXYpyDZhdiv2KogezB9INiv2LEg2KfbjNmGINi12YHYrdmHINmIINmF2K/YqiB7MX0g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYsdinINiv2LEg2KfbjNmGINi12YHYrdmHINiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYsdinINiv2LEg2YXYrNmF2YjYuSDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLYtNmF2Kcg2YXYr9iqIHswfSDYp9iyIHsxfSDYr9ixINin24zZhiDYtdmB2K3ZhyDZiCDZhdiv2KogezJ9INin2LIgezN9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi2LTZhdinINmF2K/YqiB7MH0g2KfYsiB7MX0g2LHYpyDYr9ixINin24zZhiDYtdmB2K3ZhyDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi2LTZhdinINmF2K/YqiB7MH0g2KfYsiB7MX0g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICBjbGVhbkNhcHRpb246IFwi2b7Yp9qp2LPYp9iy24xcIixcbiAgY2xlYXJDYXB0aW9uOiBcItiu2KfZhNuMINqp2LHYr9mGXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItin2YbYqtiu2KfYqCDZgdin24zZhFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLYrdiw2YEg2KfbjNmGINmB2KfbjNmEXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi2KjZhNmHXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLYrtuM2LFcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi2KLbjNinINmF24zYrtmI2KfZh9uM2K8g2KfbjNmGINmB2KfbjNmEINix2Kcg2b7Yp9qpINqp2YbbjNivOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLYotuM2Kcg2YXbjNiu2YjYp9mH24zYryDYqtmF2KfZhSDZgdin24zZhCDZh9inINix2Kcg2b7Yp9qpINqp2YbbjNivP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi2LnZhtmI2KfZhiDYs9mI2KfZhFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmYVwiXSA9IHBlcnNpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZmFcIl0gPSBcItmB2KfYsdmS2LPZkNmJXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHBvbGlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJXc3RlY3pcIixcbiAgcGFnZU5leHRUZXh0OiBcIkRhbGVqXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJHb3Rvd2VcIixcbiAgcHJldmlld1RleHQ6IFwiUHJlbWllcmFcIixcbiAgZWRpdFRleHQ6IFwiRWR5Y2phXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIklubmEgb2Rwb3dpZWTFuiAod3Bpc3opXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJCcmFrXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIld5Ymllcnogd3N6eXN0a2llXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTdHJvbmEgezB9IHogezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJaYXBpcyB7MH0geiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIk9kcG93aWVkemkgbmEgezB9L3sxfSBweXRhbmlhXCIsXG4gIGVtcHR5U3VydmV5OiBcIk5pZSBtYSB3aWRvY3pueWNoIHB5dGHFhC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJEemnEmWt1amVteSB6YSB3eXBlxYJuaWVuaWUgYW5raWV0eSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlogbmFzenljaCB6YXBpc8OzdyB3eW5pa2EsIMW8ZSB3eXBlxYJuacWCZcWbIGp1xbwgdMSZIGFua2lldMSZLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlRyd2Egd2N6eXR5d2FuaWUgYW5raWV0eS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJXeWJpZXJ6Li4uXCIsXG4gIHZhbHVlOiBcIldhcnRvxZvEh1wiLFxuICByZXF1aXJlZEVycm9yOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSB0byBweXRhbmllLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgY28gbmFqbW5pZWogamVkbm8gcHl0YW5pZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgd3N6eXN0a2llIHB5dGFuaWEuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJXIHR5bSBwb2x1IG1vxbxuYSB3cGlzYcSHIHR5bGtvIGxpY3pieS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgY28gbmFqbW5pZWogezB9IHpuYWvDs3cuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIG1uaWVqIG5pxbwgezB9IHpuYWvDs3cuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIHdpxJljZWogbmnFvCB7MH0gaSBtbmllaiBuacW8IHsxfSB6bmFrw7N3LlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlByb3N6xJkgdXp1cGXFgm5pxIcgcHJ6eW5ham1uaWVqIHswfSB3aWVyc3p5LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgY28gbmFqbW5pZWogezB9IHBvenljamkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlByb3N6xJkgd3licmHEhyBuaWUgd2nEmWNlaiBuacW8IHswfSBwb3p5Y2ppLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX0gb3JheiBtbmllanN6YSBsdWIgcsOzd25hIHsyfVwiLFxuICBudW1lcmljTWluOiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIHdpxJlrc3phIGx1YiByw7N3bmEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgbW5pZWpzemEgbHViIHLDs3duYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlByb3N6xJkgcG9kYcSHIHByYXdpZMWCb3d5IGFkcmVzIGVtYWlsLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJXeXJhxbxlbmllOiB7MH0gcG93aW5ubyB3cmFjYcSHICdwcmF3ZHppd2UnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwixbvEhWRhbmllIHp3csOzY2nFgm8gYsWCxIVkICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwixbvEhWRhbmllIG5pZSB6d3LDs2NpxYJvIGRhbnljaCBhbGJvIMWbY2llxbxrYSBqZXN0IG5pZXByYXdpZMWCb3dhXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiUm96bWlhciBwcnplc8WCYW5lZ28gcGxpa3UgbmllIG1vxbxlIHByemVrcmFjemHEhyB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIHBvZGHEhyBpbm7EhSBvZHBvd2llZMW6LlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiVHJ3YSBwcnplbm9zemVuaWUgVHdvamVnbyBwbGlrdSwgcHJvc3rEmSBzcHLDs2Jvd2HEhyBwb25vd25pZSB6YSBraWxrYSBzZWt1bmQuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIsWBYWRvd2FuaWUuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJXeWJpZXJ6IHBsaWsoaSkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5pZSB3eWJyYW5vIMW8YWRuZWdvIHBsaWt1XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQ2hjZXN6IHNrYXNvd2HEhyBuYWdyYW5pZT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUYSB3YXJ0b8WbxIcgcG93aW5uYSBiecSHIHd5asSFdGtvd2EuXCIsXG4gIGFkZENvbHVtbjogXCJEb2RhaiBrb2x1bW7EmVwiLFxuICBhZGRSb3c6IFwiRG9kYWogd2llcnN6XCIsXG4gIHJlbW92ZVJvdzogXCJVc3XFhFwiLFxuICBhZGRQYW5lbDogXCJEb2RhaiBwYW5lbFwiLFxuICByZW1vdmVQYW5lbDogXCJVc3XFhFwiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWxlbWVudFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbHVtbmFcIixcbiAgbWF0cml4X3JvdzogXCJXaWVyc3pcIixcbiAgc2F2aW5nRGF0YTogXCJaYXBpc3VqxJkgd3luaWtpIGFua2lldHkgbmEgc2Vyd2VyemUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIld5c3TEhXBpxYIgYsWCxIVkIGkgd3luaWtpIG5pZSBtb2fFgnkgem9zdGHEhyB6YXBpc2FuZS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiV3luaWtpIHpvc3RhxYJ5IHBvcHJhd25pZSB6YXBpc2FuZSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlNwcsOzYnVqIHBvbm93bmllXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJTcMSZZHppxYJlxZsgezB9IG5hIHRlaiBzdHJvbmllIGEgdyBzdW1pZSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlNwxJlkemnFgmXFmyB7MH0gbmEgdGVqIHN0cm9uaWUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiU3DEmWR6acWCZcWbIHcgc3VtaWUgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlNwxJlkemnFgmXFmyB7MH0geiB7MX0gbmEgdGVqIHN0cm9uaWUgYSB3IHN1bWllIHsyfSB6IHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiU3DEmWR6acWCZcWbIHswfSB6IHsxfSBuYSB0ZWogc3Ryb25pZVwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlNwxJlkemnFgmXFmyB7MH0geiB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJXeWN6ecWbxIdcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkphc25lXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIld5YmllcnogcGxpa1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJVc3XFhCB0ZW4gcGxpa1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlRha1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmllXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkplc3RlxZsgcGV3aWVuLCDFvGUgY2hjZXN6IHVzdW7EhcSHIHRlbiBwbGlrOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJKZXN0ZcWbIHBld2llbiwgxbxlIGNoY2VzeiB1c3VuxIXEhyB3c3p5c3RraWUgcGxpa2k/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUeXR1xYIgcHl0YW5pYVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwbFwiXSA9IHBvbGlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJwbFwiXSA9IFwicG9sc2tpXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHBvcnR1Z3Vlc2VCclN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBbnRlcmlvclwiLFxuICBwYWdlTmV4dFRleHQ6IFwiUHLDs3hpbW9cIixcbiAgY29tcGxldGVUZXh0OiBcIkZpbmFsaXphclwiLFxuICBwcmV2aWV3VGV4dDogXCJQcsOpLXZpc3VhbGl6YcOnw6NvXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhclwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQ29tZcOnYXJcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPdXRyb3MgKGRlc2NyZXZlcilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5lbmh1bVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2lvbmFyIFRvZG9zXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6FnaW5hIHswfSBkZSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlZ2lzdHJvIHswfSBkZSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJlc3Bvc3RhcyB7MH0vezF9IHBlcmd1bnRhc1wiLFxuICBlbXB0eVN1cnZleTogXCJOw6NvIGjDoSBww6FnaW5hIHZpc8OtdmVsIG91IHBlcmd1bnRhIG5hIHBlc3F1aXNhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk9icmlnYWRvIHBvciBmaW5hbGl6YXIgYSBwZXNxdWlzYSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk5vc3NvcyByZWdpc3Ryb3MgbW9zdHJhbSBxdWUgdm9jw6ogasOhIGZpbmFsaXpvdSBhIHBlc3F1aXNhLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkEgcGVzcXVpc2EgZXN0w6EgY2FycmVnYW5kby4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZWxlY2lvbmUuLi5cIixcbiAgdmFsdWU6IFwidmFsb3JcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIGEgcGVyZ3VudGEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgcGVsbyBtZW5vcyB1bWEgcGVyZ3VudGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6XG4gICAgXCJQb3IgZmF2b3IsIHJlc3BvbmRhIGFzIHBlcmd1bnRhcyBlbSB0b2RhcyBhcyBsaW5oYXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJPIHZhbG9yIGRldmUgc2VyIG51bcOpcmljby5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBwZWxvIG1lbm9zIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1lbm9zIGRlIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1haXMgZGUgezB9IGUgbWVub3MgZGUgezF9IGNhcmFjdGVyZXMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUHJlZW5jaGEgcGVsbyBtZW5vcyB7MH0gbGluaGFzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY2lvbmUgcGVsbyBtZW5vcyB7MH0gb3DDp8O1ZXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBvciBmYXZvciwgc2VsZWNpb25lIG7Do28gbWFpcyBkbyBxdWUgezB9IG9ww6fDtWVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBzdXBlcmlvciBhIHsxfSBlIGlndWFsIG91IG1lbm9yIHF1ZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBpbmZlcmlvciBhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUG9yIGZhdm9yLCBpbmZvcm1lIHVtIGUtbWFpbCB2w6FsaWRvLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJBIGV4cHJlc3PDo286IHswfSBkZXZlIHJldG9ybmFyICd2ZXJkYWRlaXJvJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkEgcmVxdWlzacOnw6NvIHJldG9ybm91IG8gZXJybyAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkEgcmVxdWlzacOnw6NvIG7Do28gcmV0b3Jub3UgZGFkb3Mgb3UgbyAnY2FtaW5obycgZGEgcmVxdWlzacOnw6NvIG7Do28gZXN0w6EgY29ycmV0b1wiLFxuICBleGNlZWRNYXhTaXplOiBcIk8gdGFtYW5obyBkbyBhcnF1aXZvIG7Do28gZGV2ZSBleGNlZGVyIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciwgaW5mb3JtZSBvIG91dHJvIHZhbG9yLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU2V1IGFycXVpdm8gZXN0w6Egc2VuZG8gY2FycmVnYWRvLiBQb3IgZmF2b3IsIGFndWFyZGUgYWxndW5zIHNlZ3VuZG9zIGUgdGVudGUgbm92YW1lbnRlLlwiLFxuICBsb2FkaW5nRmlsZTogXCJDYXJyZWdhbmRvLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiU2VsZWNpb25lIG8ocykgYXJxdWl2byhzKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVuaHVtIGFycXVpdm8gZXNjb2xoaWRvXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVGVtIGNlcnRlemEgcXVlIGRlc2VqYSBkZWxldGFyP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkVzc2UgdmFsb3IgZGV2ZSBzZXIgw7puaWNvLlwiLFxuICBhZGRDb2x1bW46IFwiQWRpY2lvbmFyIGNvbHVuYVwiLFxuICBhZGRSb3c6IFwiQWRpY2lvbmFyIGxpbmhhXCIsXG4gIHJlbW92ZVJvdzogXCJSZW1vdmVyIGxpbmhhXCIsXG4gIGFkZFBhbmVsOiBcIkFkaWNpb25hciBub3ZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJlbW92ZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bmFcIixcbiAgbWF0cml4X3JvdzogXCJMaW5oYVwiLFxuICBzYXZpbmdEYXRhOiBcIk9zIHJlc3VsdGFkb3MgZXN0byBzZW5kbyBzYWx2b3Mgbm8gc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIk9jb3JyZXUgdW0gZXJybyBlIG7Do28gZm9pIHBvc3PDrXZlbCBzYWx2YXIgb3MgcmVzdWx0YWRvcy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiT3MgcmVzdWx0YWRvcyBmb3JhbSBzYWx2b3MgY29tIHN1Y2Vzc28hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUZW50ZSBub3ZhbWVudGVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlZ1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYSBlIHsxfSBubyB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBuZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gbm8gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYSBlIHsyfSBkZSB7M30gbm8gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5lc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbm8gdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJMaW1wYXJcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkxpbXBhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJFc2NvbGhlciBhcnF1aXZvXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZXIgZXN0ZSBhcnF1aXZvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU2ltXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOw6NvXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciBlc3RlIGFycXVpdm86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciB0b2RvcyBvcyBhcnF1aXZvcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlTDrXR1bG8gZGEgcXVlc3TDo29cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicHQtYnJcIl0gPSBwb3J0dWd1ZXNlQnJTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wicHQtYnJcIl0gPSBcInBvcnR1Z3XDqnMgYnJhc2lsZWlyb1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJQcsOzeGltb1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyXCIsXG4gIHByZXZpZXdUZXh0OiBcIlByw6ktdmlzdWFsaXphw6fDo29cIixcbiAgZWRpdFRleHQ6IFwiRWRpdGFyXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJDb21lw6dhclwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk91dHJvcyAoZGVzY3JldmVyKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmVuaHVtXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjaW9uYXIgVG9kb3NcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlDDoWdpbmEgezB9IGRlIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVnaXN0byB7MH0gZGUgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSZXNwb3N0YXMgezB9L3sxfSBwZXJndW50YXNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTsOjbyBow6EgcMOhZ2luYSB2aXPDrXZlbCBvdSBwZXJndW50YSBubyBxdWVzdGlvbsOhcmlvLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk9icmlnYWRvIHBvciBmaW5hbGl6YXIgbyBxdWVzdGlvbsOhcmlvIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiT3Mgbm9zc29zIHJlZ2lzdG9zIG1vc3RyYW0gcXVlIGrDoSBmaW5hbGl6b3UgbyBxdWVzdGlvbsOhcmlvLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIk8gcXVlc3Rpb27DoXJpbyBlc3TDoSBhIGNhcnJlZ2FyLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlNlbGVjaW9uZS4uLlwiLFxuICB2YWx1ZTogXCJ2YWxvclwiLFxuICByZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgw6AgcGVyZ3VudGEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgcGVsbyBtZW5vcyBhIHVtYSBwZXJndW50YS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjpcbiAgICBcIlBvciBmYXZvciwgcmVzcG9uZGEgw6BzIHBlcmd1bnRhcyBlbSB0b2RhcyBhcyBsaW5oYXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJPIHZhbG9yIGRldmUgc2VyIG51bcOpcmljby5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBwZWxvIG1lbm9zIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1lbm9zIGRlIHswfSBjYXJhY3RlcmVzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIG1haXMgZGUgezB9IGUgbWVub3MgZGUgezF9IGNhcmFjdGVyZXMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUHJlZW5jaGEgcGVsbyBtZW5vcyB7MH0gbGluaGFzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY2lvbmUgcGVsbyBtZW5vcyB7MH0gb3DDp8O1ZXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBvciBmYXZvciwgc2VsZWNpb25lIG5vIG3DoXhpbW8gezB9IG9ww6fDtWVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBzdXBlcmlvciBhIHsxfSBlIGlndWFsIG91IG1lbm9yIHF1ZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBpbmZlcmlvciBhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUG9yIGZhdm9yLCBpbnNpcmEgdW0gZS1tYWlsIHbDoWxpZG8uXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkEgZXhwcmVzc8OjbzogezB9IGRldmUgcmV0b3JuYXIgJ3ZlcmRhZGVpcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTyBwZWRpZG8gcmV0b3Jub3UgbyBlcnJvICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTyBwZWRpZG8gbsOjbyByZXRvcm5vdSBkYWRvcyBvdSBvICdjYW1pbmhvJyBkbyBwZWRpZG8gbsOjbyBlc3TDoSBjb3JyZXRvXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiTyB0YW1hbmhvIGRvIGFycXVpdm8gbsOjbyBkZXZlIGV4Y2VkZXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbyBvdXRybyB2YWxvci5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIk8gc2V1IGZpY2hlaXJvIGVzdMOhIGEgY2FycmVnYXIuIFBvciBmYXZvciwgYWd1YXJkZSBhbGd1bnMgc2VndW5kb3MgZSB0ZW50ZSBub3ZhbWVudGUuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkEgY2FycmVnYXIuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJTZWxlY2lvbmUgbyhzKSBhcnF1aXZvKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOZW5odW0gZmljaGVpcm8gZXNjb2xoaWRvXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVGVtIGEgY2VydGV6YSBxdWUgZGVzZWphIGFwYWdhcj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJFc3RlIHZhbG9yIGRldmUgc2VyIMO6bmljby5cIixcbiAgYWRkQ29sdW1uOiBcIkFkaWNpb25hciBjb2x1bmFcIixcbiAgYWRkUm93OiBcIkFkaWNpb25hciBsaW5oYVwiLFxuICByZW1vdmVSb3c6IFwiUmVtb3ZlciBsaW5oYVwiLFxuICBhZGRQYW5lbDogXCJBZGljaW9uYXIgbm92b1wiLFxuICByZW1vdmVQYW5lbDogXCJSZW1vdmVyXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiTGluaGFcIixcbiAgc2F2aW5nRGF0YTogXCJPcyByZXN1bHRhZG9zIGVzdMOjbyBhIHNlciBndWFyZGFkb3Mgbm8gc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIk9jb3JyZXUgdW0gZXJybyBlIG7Do28gZm9pIHBvc3PDrXZlbCBndWFyZGFyIG9zIHJlc3VsdGFkb3MuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIk9zIHJlc3VsdGFkb3MgZm9yYW0gZ3VhcmRhZG9zIGNvbSBzdWNlc3NvIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiVGVudGUgbm92YW1lbnRlXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWdcIixcbiAgdGltZXJTcGVudEFsbDogXCJWb2PDqiBnYXN0b3UgezB9IG5lc3RhIHDDoWdpbmEgZSB7MX0gbm8gdG90YWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJWb2PDqiBnYXN0b3UgezB9IG5vIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5lc3RhIHDDoWdpbmEgZSB7Mn0gZGUgezN9IG5vIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5vIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiTGltcGFyXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJMaW1wYXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRXNjb2xoZXIgZmljaGVpcm9cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUmVtb3ZlciBlc3RlIGZpY2hlaXJvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU2ltXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOw6NvXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlRlbSBhIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgZmljaGVpcm86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlRlbSBhIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIHRvZG9zIG9zIGZpY2hlaXJvcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlTDrXR1bG8gZGEgcXVlc3TDo29cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicHRcIl0gPSBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInB0XCJdID0gXCJwb3J0dWd1w6pzXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHJvbWFuaWFuU3VydmV5U3RyaW5nczogYW55ID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJVcm3Eg3RvclwiLFxuICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyZVwiLFxuICBwcmV2aWV3VGV4dDogXCJwcmV2aXp1YWxpemFyZVwiLFxuICBlZGl0VGV4dDogXCJFZGl0YcibaVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwic3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbHR1bChwcmVjaXphxaNpKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmljaSB1bnVsXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdGVhesSDIHRvdFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSBkaW4gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLDjm5yZWdpc3RyYXJlIHswfSBkaW4gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSxINzcHVuc3VyaSBsYSB7MH0gLyB7MX0gw65udHJlYsSDcmlcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTnUgc3VudCDDrm50cmVixINyaSBwZW50cnUgYWNlc3QgY2hlc3Rpb25hclwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlbEgyBtdWzFo3VtaW0gcGVudHJ1IHRpbXB1bCBhY29yZGF0IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiRGluIMOubnJlZ2lzdHLEg3JpbGUgbm9hc3RyZSByZWllc2UgY8SDIGHIm2kgY29tcGxldGF0IGRlamEgYWNlc3QgY2hlc3Rpb25hci5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJDaGVzdGlvbmFydWwgc2Ugw65uY2FyY8SDLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkFsZWdlxaNpLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9hcmVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJSxINzcHVuc3VsIGxhIGFjZWFzdMSDIMOubnRyZWJhcmUgZXN0ZSBvYmxpZ2F0b3JpdS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVsSDIHJ1Z8SDbSBzxIMgcsSDc3B1bmRlyJtpIGxhIGNlbCBwdcibaW4gbyDDrm50cmViYXJlLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRvYXRlIHLEg3NwdW5zdXJpbGUgc3VudCBvYmxpZ2F0b3JpaVwiLFxuICBudW1lcmljRXJyb3I6IFwiUsSDc3B1bnN1bCB0cmVidWllIHPEgyBmaWUgbnVtZXJpYy5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XIm2kgbWluaW0gezB9IGNhcmFjdGVyZS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XIm2kgbWF4aW0gezB9IGNhcmFjdGVyZS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcibaSBtYWkgbXVsdCBkZSB7MH0gyJlpIG1haSBwdcibaW4gZGUgezF9IGNhcmFjdGVyZS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJUcmVidWllIHPEgyBjb21wbGV0YcibaSBtaW5pbSB7MH0gcsOibmR1cmkuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGHIm2kgbWluaW0gezB9IG9wxaNpdW5pLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJUcmVidWllIHPEgyBzZWxlY3RhyJtpIG1heGltIHswfSBvcMWjaXVuaS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfSDFn8OuIG1haSBtaWMgc2F1IGVnYWwgY3UgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1pYyBzYXUgZWdhbCBjYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSBvIGFkcmVzYSBkZSBlbWFpbCB2YWxpZMSDLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJFeHByZXNpYTogezB9IGFyIHRyZWJ1aSBzxIMgcmV0dXJuZXplIOKAnmFkZXbEg3JhdOKAnS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlJlcXVlc3QtdWwgYSByZXR1cm5hdCBlcm9hcmVhICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiUmVxdWVzdC11bCBudSBhIHJldHVybmF0IGRhdGUgc2F1IHByb3ByaWV0YXRlYSAncGF0aCcgZXN0ZSBpbmNvcmVjdMSDXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRGltZW5zaXVuZWEgZmnFn2llcnVsdWkgbnUgdHJlYnVpZSBzxIMgZGVwxIPFn2Vhc2PEgyB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUcmVidWllIHPEgyBjb21wbGV0YcibaSBjw6JtcHVsICdBbHR1bCcuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGaciZaWVydWwgZHVtbmVhdm9hc3RyxIMgZXN0ZSDDrm4gY3VycyBkZSDDrm5jxINyY2FyZS4gVsSDIHJ1Z8SDbSBhyJl0ZXB0YcibaSBjw6J0ZXZhIHNlY3VuZGUgyJlpIHJldmVuacibaSBhcG9pLlwiLFxuICBsb2FkaW5nRmlsZTogXCJTZSDDrm5jYXJjxIMuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJBbGVnZSBmaXNpZXJlbGUuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5pY2l1biBmaciZaWVyIGFsZXNcIixcbiAgY29uZmlybURlbGV0ZTogXCJTdW50ZcibaSBzaWd1ciBjxIMgZG9yacibaSBzxIMgyJl0ZXJnZcibaSDDrm5yZWdpc3RyYXJlYT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJWYWxvYXJlYSB0cmVidWllIHPEgyBmaWUgdW5pY8SDLlwiLFxuICBhZGRDb2x1bW46IFwiQWTEg3VnYcibaSBjb2xvYW7Eg1wiLFxuICBhZGRSb3c6IFwiQWTEg3VnYXJlIHLDom5kXCIsXG4gIHJlbW92ZVJvdzogXCLImHRlcmdlcmVcIixcbiAgYWRkUGFuZWw6IFwiQWTEg3VnYXJlXCIsXG4gIHJlbW92ZVBhbmVsOiBcIsiYdGVyZ2VyZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwib3DIm2l1bmVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2xvYW7Eg1wiLFxuICBtYXRyaXhfcm93OiBcIlLDom5kXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmV6dWx0YXRlbGUgc3VudCDDrm4gY3VycyBkZSBzYWx2YXJlLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJBIGludGVydmVuaXQgbyBlcm9hcmUsIHJlenVsdGF0ZWxlIG51IGF1IHB1dHV0IGZpIHNhbHZhdGUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0ZWxlIGF1IGZvc3Qgc2FsdmF0ZSBjdSBzdWNjZXMhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLDjm5jZXJjYcibaSBkaW4gbm91XCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCJByJtpIHBldHJlY3V0IHswfSBwZSBhY2Vhc3TEgyBwYWdpbsSDIMiZaSB7MX0gw65uIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJByJtpIHBldHJlY3V0IHswfSBwZSBhY2Vhc3TEgyBwYWdpbsSDLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkHIm2kgcGV0cmVjdXQgezB9IMOubiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gcGUgYWNlYXN0xIMgcGFnaW7EgyDImWkgezJ9IGRpbiB7M30gw65uIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJByJtpIHBldHJlY3V0IHswfSBkaW4gezF9IHBlIGFjZWFzdMSDIHBhZ2luxIMuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiQcibaSBwZXRyZWN1dCB7MH0gZGluIHsxfSDDrm4gdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJDdXJhdFwiLFxuICBjbGVhckNhcHRpb246IFwiY2xhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJBbGVnZSBmaciZaWVydWxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRWxpbWluYcibaSBhY2VzdCBmaciZaWVyXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiZGFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk51XCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlNpZ3VyIGRvcmnIm2kgc8SDIGVsaW1pbmHIm2kgYWNlc3QgZmnImWllcjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiU2lndXIgZG9yacibaSBzxIMgZWxpbWluYcibaSB0b2F0ZSBmaciZaWVyZWxlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0bHVsIGludHJlYmFyaWlcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicm9cIl0gPSByb21hbmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJyb1wiXSA9IFwicm9tw6JuxINcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcnVzc2lhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQlNCw0LvQtdC1XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQk9C+0YLQvtCy0L5cIixcbiAgcHJldmlld1RleHQ6IFwi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YBcIixcbiAgZWRpdFRleHQ6IFwi0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J3QsNGH0LDRgtGMXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQvtC1ICjQv9C+0LbQsNC70YPQudGB0YLQsCwg0L7Qv9C40YjQuNGC0LUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC10YJcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi0JLRi9Cx0YDQsNGC0Ywg0LLRgdGRXCIsXG4gIHByb2dyZXNzVGV4dDogXCLQodGC0YDQsNC90LjRhtCwIHswfSDQuNC3IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgdGMIHswfSDQuNC3IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0J7RgtCy0LXRgtGLINC90LAgezB9L3sxfdCy0L7Qv9GA0L7RgdGLXCIsXG4gIGVtcHR5U3VydmV5OiBcItCd0LXRgiDQvdC4INC+0LTQvdC+0LPQviDQstC+0L/RgNC+0YHQsC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQkdC70LDQs9C+0LTQsNGA0LjQvCDQktCw0YEg0LfQsCDQt9Cw0L/QvtC70L3QtdC90LjQtSDQsNC90LrQtdGC0YshXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQktGLINGD0LbQtSDQv9GA0L7RhdC+0LTQuNC70Lgg0Y3RgtC+0YIg0L7Qv9GA0L7RgS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0LPRgNGD0LfQutCwINGBINGB0LXRgNCy0LXRgNCwLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCS0YvQsdGA0LDRgtGMLi4uXCIsXG4gIHZhbHVlOiBcItC30L3QsNGH0LXQvdC40LVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQvdCwINCy0L7Qv9GA0L7RgS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YLQstC10YLRjNGC0LUg0L/QviDQutGA0LDQudC90LXQuSDQvNC10YDQtSDQvdCwINC+0LTQuNC9INCy0L7Qv9GA0L7RgS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQvdCwINCy0L7Qv9GA0L7RgdGLINCyINC60LDQttC00L7QuSDRgdGC0YDQvtC60LUuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQntGC0LLQtdGCINC00L7Qu9C20LXQvSDQsdGL0YLRjCDRh9C40YHQu9C+0LwuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAg0LLQstC10LTQuNGC0LUg0LHQvtC70YzRiNC1IHswfSDRgdC40LzQstC+0LvQvtCyLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INC80LXQvdGM0YjQtSB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCDQstCy0LXQtNC40YLQtSDQsdC+0LvRjNGI0LUgezB9INC4INC80LXQvdGM0YjQtSB7MX0g0YHQuNC80LLQvtC70L7Qsi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LfQsNC/0L7Qu9C90LjRgtC1INC90LUg0LzQtdC90YzRiNC1IHswfSDRgdGC0YDQvtC6LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDRhdC+0YLRjyDQsdGLIHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INC90LUg0LHQvtC70LXQtSB7MH0g0LLQsNGA0LjQsNC90YLQvtCyLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LUg0LzQtdC90YzRiNC1INGH0LXQvCB7MX0sINC4INC90LUg0LHQvtC70YzRiNC1INGH0LXQvCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L3QtSDQvNC10L3RjNGI0LUg0YfQtdC8IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDQvdC1INCx0L7Qu9GM0YjQtSDRh9C10LwgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JLRi9GA0LDQttC10L3QuNC1IHswfSDQtNC+0LvQttC90L4g0LLQvtC30LLRgNCw0YnQsNGC0YwgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JfQsNC/0YDQvtGBINCy0LXRgNC90YPQuyDQvtGI0LjQsdC60YMgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQntGC0LLQtdGCINC90LAg0LfQsNC/0YDQvtGBINC/0YDQuNGI0LXQuyDQv9GD0YHRgtC+0Lkg0LjQu9C4INGB0LLQvtC50YHRgtCy0L4gJ3BhdGgnINGD0LrQsNC30LDQvdC+INC90LXQstC10YDQvdC+XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KDQsNC30LzQtdGAINGE0LDQudC70LAg0L3QtSDQtNC+0LvQttC10L0g0L/RgNC10LLRi9GI0LDRgtGMIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNCw0L3QvdGL0LUg0LIg0L/QvtC70LUgJ9CU0YDRg9Cz0L7QtSdcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCS0LDRiCDRhNCw0LnQuyDQt9Cw0LPRgNGD0LbQsNC10YLRgdGPLiDQn9C+0LTQvtC20LTQuNGC0LUg0L3QtdGB0LrQvtC70YzQutC+INGB0LXQutGD0L3QtCDQuCDQv9C+0L/RgNC+0LHRg9C50YLQtSDRgdC90L7QstCwLlwiLFxuICBsb2FkaW5nRmlsZTogXCLQl9Cw0LPRgNGD0LfQutCwLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0JLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQuyjRiykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCk0LDQudC7INC90LUg0LLRi9Cx0YDQsNC9XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi0JLRiyDRgtC+0YfQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQt9Cw0L/QuNGB0Yw/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0K3RgtC+INC30L3QsNGH0LXQvdC40LUg0LTQvtC70LbQvdC+INCx0YvRgtGMINGD0L3QuNC60LDQu9GM0L3Ri9C8LlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtCx0LDQstC40YLRjCDQutC+0LvQvtC90LrRg1wiLFxuICBhZGRSb3c6IFwi0JTQvtCx0LDQstC40YLRjCDRgdGC0YDQvtC60YNcIixcbiAgcmVtb3ZlUm93OiBcItCj0LTQsNC70LjRgtGMXCIsXG4gIGFkZFBhbmVsOiBcItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjlwiLFxuICByZW1vdmVQYW5lbDogXCLQo9C00LDQu9C40YLRjFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi0JLQsNGA0LjQsNC90YJcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LrQsFwiLFxuICBtYXRyaXhfcm93OiBcItCh0YLRgNC+0LrQsFwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRjNGC0LDRgtGLINGB0L7RhdGA0LDQvdGP0Y7RgtGB0Y8g0L3QsCDRgdC10YDQstC10YAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItCf0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAsINGA0LXQt9GD0LvRjNGC0LDRgiDQvdC1INCx0YvQuyDRgdC+0YXRgNCw0L3RkdC9LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YzRgtCw0YIg0YPRgdC/0LXRiNC90L4g0YHQvtGF0YDQsNC90ZHQvSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCf0L7Qv9GA0L7QsdC+0LLQsNGC0Ywg0YHQvdC+0LLQsFwiLFxuICB0aW1lck1pbjogXCLQvNC40L1cIixcbiAgdGltZXJTZWM6IFwi0YHQtdC6XCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtSDQuCB7MX0g0LLRgdC10LPQvi5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LIg0YLQtdGH0LXQvdC40LUg0YLQtdGB0YLQsC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQuNC3IHsxfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0LggezJ9INC40LcgezN9INC00LvRjyDQstGB0LXQs9C+INGC0LXRgdGC0LAuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQuNC3IHsxfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC40LcgezF9INC00LvRjyDQstGB0LXQs9C+INGC0LXRgdGC0LAuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQntGH0LjRgdGC0LjRgtGMXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQntGH0LjRgdGC0LjRgtGMXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCS0YvQsdC10YDQuNGC0LUg0YTQsNC50LtcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0KPQtNCw0LvQuNGC0Ywg0YTQsNC50LtcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQlNCwXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndC10YJcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0L7RgiDRhNCw0LnQuzogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQstGB0LUg0YTQsNC50LvRiz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcItCd0LDQt9Cy0LDQvdC40LUg0LLQvtC/0YDQvtGB0LBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicnVcIl0gPSBydXNzaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInJ1XCJdID0gXCLRgNGD0YHRgdC60LjQuVwiO1xuIiwiLy9VbmNvbW1lbnQgdGhpcyBsaW5lIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZVxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzZXJiaWFuU3RyaW5ncyA9IHtcbiAgICBwYWdlUHJldlRleHQ6IFwiTmF6YWRcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiRGFsamVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiWmF2csWhaVwiLFxuICAgIHByZXZpZXdUZXh0OiBcIlByZWdsZWRhalwiLFxuICAgIGVkaXRUZXh0OiBcIkl6bWVuaVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJaYXBvxI1uaVwiLFxuICAgIG90aGVySXRlbVRleHQ6IFwiRHJ1Z28gKHVwacWhaSlcIixcbiAgICBub25lSXRlbVRleHQ6IFwiTmnFoXRhXCIsXG4gICAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiSXphYmVyaSBzdmVcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5pY2EgezB9IG9kIHsxfVwiLFxuICAgIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJVcGlzIHswfSBvZCB7MX1cIixcbiAgICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2Rnb3ZvcmVubyBuYSB7MH0vezF9IHBpdGFuamFcIixcbiAgICBlbXB0eVN1cnZleTogXCJOZW1hIHZpZGxqaXZpaCBzdHJhbmljYSBpbGkgcGl0YW5qYSB1IGFua2V0aS5cIixcbiAgICBjb21wbGV0aW5nU3VydmV5OiBcIkh2YWxhIG5hIHBvcHVuamF2YW5qdSBhbmtldGUhXCIsXG4gICAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICAgIFwiUHJlbWEgbmHFoWltIHBvZGFjaW1hLCB2ZcSHIHN0ZSBwb3B1bmlsaSBvdnUgYW5rZXR1LlwiLFxuICAgIGxvYWRpbmdTdXJ2ZXk6IFwiVcSNaXRhdmFtIGFua2V0dS4uLlwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkl6YWJlcmkuLi5cIixcbiAgICB2YWx1ZTogXCJ2cmVkbm9zdFwiLFxuICAgIHJlcXVpcmVkRXJyb3I6IFwiTW9saW1vIG9kZ292b3JpdGUgbmEgb3ZvIHBpdGFuamUuXCIsXG4gICAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTW9saW1vIG9kZ292b3JpdGUgbmEgYmFyIGplZG5vIHBpdGFuamUuXCIsXG4gICAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJNb2xpbW8gb2Rnb3Zvcml0ZSBuYSBwaXRhbmphIHUgc3ZpbSByZWRvdmltYS5cIixcbiAgICBudW1lcmljRXJyb3I6IFwiVnJlZG5vc3QgYmkgdHJlYmFsbyBkYSBidWRlIG51bWVyacSNa2EuXCIsXG4gICAgbWluRXJyb3I6IFwiVnJlZG5vc3QgbmUgYmkgdHJlYmFsbyBkYSBidWRlIG1hbmphIG9kIHswfVwiLFxuICAgIG1heEVycm9yOiBcIlZyZWRub3N0IG5lIGJpIHRyZWJhbG8gZGEgYnVkZSB2ZcSHYSBvZCB7MH1cIixcbiAgICB0ZXh0TWluTGVuZ3RoOiBcIk1vbGltbyB1bmVzaXRlIGJhciB7MH0gem5hayhvdilhLlwiLFxuICAgIHRleHRNYXhMZW5ndGg6IFwiTW9saW1vIHVuZXNpdGUgbmFqdmnFoWUgezB9IHpuYWsob3YpYS5cIixcbiAgICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgICAgXCJNb2xpbW8gdW5lc2l0ZSBuYWptYW5qZSB7MH0gaSBuZSB2acWhZSBvZCB7MX0gem5hayhvdilhLlwiLFxuICAgIG1pblJvd0NvdW50RXJyb3I6IFwiTW9saW1vIHBvcHVuaXRlIG5ham1hbmplIHswfSByZWQob3ZhKS5cIixcbiAgICBtaW5TZWxlY3RFcnJvcjogXCJNb2xpbW8gaXphYmVyaXRlIG5ham1hbmplIHswfSBvcGNpamEvZS5cIixcbiAgICBtYXhTZWxlY3RFcnJvcjogXCJNb2xpbW8gaXphYmVyaXRlIG5hanZpxaFlIHswfSBvcGNpamEvZS5cIixcbiAgICBudW1lcmljTWluTWF4OiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWptYW5qZSB7MX0gaSBuYWp2acWhZSB7Mn1cIixcbiAgICBudW1lcmljTWluOiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWptYW5qZSB7MX1cIixcbiAgICBudW1lcmljTWF4OiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWp2acWhZSB7MX1cIixcbiAgICBpbnZhbGlkRW1haWw6IFwiTW9saW1vIHVuZXNpdGUgaXNwcmF2bnUgZS1tYWlsIGFkcmVzdS5cIixcbiAgICAvLyB2cmF0aXRpIFwidHJ1ZVwiID9cbiAgICBpbnZhbGlkRXhwcmVzc2lvbjogXCJJenJhejogezB9IGJpIHRyZWJhbG8gZGEgYnVkZSB0YcSNYW4uXCIsXG4gICAgdXJsUmVxdWVzdEVycm9yOiBcIlphaHRldiBqZSBuYWnFoWFvIG5hIGdyZcWha3UgJ3swfScuIHsxfVwiLFxuICAgIHVybEdldENob2ljZXNFcnJvcjpcbiAgICAgIFwiWmFodGV2IG5pamUgcHJvbmHFoWFvIHBvZGF0a2UsIGlsaSBqZSBwdXRhbmphIG5ldGHEjW5hXCIsXG4gICAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpxI1pbmEgZmFqbGEgbmUgYmkgdHJlYmFsbyBkYSBwcmVsYXppIHswfS5cIixcbiAgICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTW9saW1vIHVuZXNpdGUgZHJ1Z3UgdnJlZG5vc3QuXCIsXG4gICAgdXBsb2FkaW5nRmlsZTpcbiAgICAgIFwiRmFqbCBzZSDFoWFsamUuIE1vbGltbyBzYcSNZWthanRlIG5la28gdnJlbWUgaSBwb2t1xaFhanRlIHBvbm92by5cIixcbiAgICBsb2FkaW5nRmlsZTogXCJVxI1pdGF2YW5qZS4uLlwiLFxuICAgIGNob29zZUZpbGU6IFwiSXphYmVyaXRlIGZhamxvdmUuLi5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwiTmlqZSBpemFicmFuIG5pamVkYW4gZmFqbFwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiRGEgbGkgxb5lbGl0ZSBkYSBpemJyacWhZXRlIHVub3M/XCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJPdmEgdnJlZG5vc3QgdHJlYmEgZGEgYnVkZSBqZWRpbnN0dmVuYS5cIixcbiAgICBhZGRDb2x1bW46IFwiRG9kYWoga29sb251XCIsXG4gICAgYWRkUm93OiBcIkRvZGFqIHJlZFwiLFxuICAgIHJlbW92ZVJvdzogXCJVa2xvbmlcIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcIk5lbWEgcmVkb3ZhLlwiLFxuICAgIGFkZFBhbmVsOiBcIkRvZGFqIG5vdm9cIixcbiAgICByZW1vdmVQYW5lbDogXCJVa2xvbmlcIixcbiAgICBjaG9pY2VzX0l0ZW06IFwic3RhdmthXCIsXG4gICAgbWF0cml4X2NvbHVtbjogXCJLb2xvbmFcIixcbiAgICBtYXRyaXhfcm93OiBcIlJlZFwiLFxuICAgIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZWtzdFwiLFxuICAgIHNhdmluZ0RhdGE6IFwiVSB0b2t1IGplIMSNdXZhbmplIHBvZGF0YWthIG5hIHNlcnZlcnUuLi5cIixcbiAgICBzYXZpbmdEYXRhRXJyb3I6IFwiRG/FoWxvIGplIGRvIGdyZcWha2UgaSByZXp1bHRhdGkgbmlzdSBzYcSNdXZhbmkuXCIsXG4gICAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmV6dWx0YXRpIHN1IHVzcGXFoW5vIHNhxI11dmFuaSFcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiUG9rdcWhYWp0ZSBwb25vdm9cIixcbiAgICB0aW1lck1pbjogXCJtaW5cIixcbiAgICB0aW1lclNlYzogXCJzZWtcIixcbiAgICB0aW1lclNwZW50QWxsOiBcIlByb3ZlbGkgc3RlIHswfSBuYSBvdm9qIHN0cmFuaWNpIGkgezF9IHVrdXBuby5cIixcbiAgICB0aW1lclNwZW50UGFnZTogXCJQcm92ZWxpIHN0ZSB7MH0gbmEgb3ZvaiBzdHJhbmljaS5cIixcbiAgICB0aW1lclNwZW50U3VydmV5OiBcIlByb3ZlbGkgc3RlIHswfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJMaW1pdEFsbDpcbiAgICAgIFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpIGkgezJ9IG9kIHszfSB1a3Vwbm8uXCIsXG4gICAgdGltZXJMaW1pdFBhZ2U6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICAgIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSB1a3Vwbm8uXCIsXG4gICAgY2xlYW5DYXB0aW9uOiBcIk/EjWlzdGlcIixcbiAgICBjbGVhckNhcHRpb246IFwiUG9uacWhdGlcIixcbiAgICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJJemFiZXJpIGZhamxcIixcbiAgICByZW1vdmVGaWxlQ2FwdGlvbjogXCJVa2xvbmkgb3ZhaiBmYWpsXCIsXG4gICAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJEYVwiLFxuICAgIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICAgIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkRhIGxpIHN0ZSBzaWd1cm5pIGRhIMW+ZWxpdGUgZGEgdWtsb25pdGUgb3ZhaiBmYWpsOiB7MH0/XCIsXG4gICAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkRhIGxpIHN0ZSBzaWd1cm5pIGRhIMW+ZWxpdGUgZGEgdWtsb25pdGUgc3ZlIGZhamxvdmU/XCIsXG4gICAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIk5hc2xvdiBwaXRhbmphXCIsXG4gICAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIk90a2HFvmlcIixcbiAgICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJQcmltZW5pXCIsXG4gIH07XG4gIFxuICAvL1VuY29tbWVudCB0aGVzZSB0d28gbGluZXMgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlLiBZb3Ugc2hvdWxkIHJlcGxhY2UgXCJlblwiIGFuZCBlblN0cmluZ3Mgd2l0aCB5b3VyIGxvY2FsZSAoXCJmclwiLCBcImRlXCIgYW5kIHNvIG9uKSBhbmQgeW91ciB2YXJpYWJsZS5cbiAgc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJyc1wiXSA9IHNlcmJpYW5TdHJpbmdzO1xuICBzdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJyc1wiXSA9IFwiU3Jwc2tpXCI7XG4gICIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc2ltcGxpZmllZENoaW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi5LiK5LiA6aG1XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLkuIvkuIDpobVcIixcbiAgY29tcGxldGVUZXh0OiBcIuaPkOS6pOmXruWNt1wiLFxuICBwcmV2aWV3VGV4dDogXCLpooTop4hcIixcbiAgZWRpdFRleHQ6IFwi57yW6L6RXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLlvIDlp4vpl67ljbdcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLloavlhpnlhbbku5bnrZTmoYhcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIuaXoFwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLpgInmi6nlhajpg6hcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuesrCB7MH0g6aG1LCDlhbEgezF9IOmhtVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi56ysIHswfS97MX0g6aKYXCIsXG4gIGVtcHR5U3VydmV5OiBcIumXruWNt+S4reayoeaciemXrumimOaIlumhtemdolwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuaEn+iwouaCqOeahOWPguS4jiFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLkvaDlt7LlrozmiJDpl67ljbcuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi6Zeu5Y235q2j5Zyo5Yqg6L295LitLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuivt+mAieaLqS4uLlwiLFxuICB2YWx1ZTogXCLlgLxcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLor7floavlhpnmraTpl67pophcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi6Iez5bCR5Zue562U5LiA6aKYLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuivt+Whq+WGmeaJgOacieihjOS4remXrumimFwiLFxuICBudW1lcmljRXJyb3I6IFwi562U5qGI5b+F6aG75piv5Liq5pWw5a2XXCIsXG4gIG1pbkVycm9yOiBcIuivpeWAvOS4jeiDveWwj+S6jiB7MH1cIixcbiAgbWF4RXJyb3I6IFwi6K+l5YC85LiN6IO95aSn5LqOIHswfVwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuetlOahiOmVv+W6puiHs+WwkSB7MH0g5Liq5a2X56ymXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi562U5qGI6ZW/5bqm5LiN6IO96LaF6L+HIHswfSDkuKrlrZfnrKZcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLnrZTmoYjplb/luqblv4XpobvlnKggezB9IC0gezF9IOS4quWtl+espuS5i+mXtFwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuacgOWwkemcgOimgeWhq+WGmSB7MH0g6KGM562U5qGIXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuacgOWwkemcgOimgemAieaLqSB7MH0g6aG5562U5qGIXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuacgOWkmuWPquiDvemAieaLqSB7MH0g6aG5562U5qGIXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwi562U5qGIICd7MH0nIOW/hemhu+Wkp+S6juetieS6jiB7MX0g5LiU5bCP5LqO562J5LqOIHsyfVwiLFxuICBudW1lcmljTWluOiBcIuetlOahiCAnezB9JyDlv4XpobvlpKfkuo7nrYnkuo4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwi562U5qGIICd7MH0nIOW/hemhu+Wwj+S6juetieS6jiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIuivt+i+k+WFpeacieaViOeahCBFbWFpbCDlnLDlnYBcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi5YWs5byPOiB7MH0g5peg5pWILlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi6L295YWl6YCJ6aG55pe25Y+R55Sf6ZSZ6K+vICd7MH0nOiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuacquiDvei9veWFpeacieaViOeahOmAiemhueaIluivt+axguWPguaVsOi3r+W+hOacieivr1wiLFxuICBleGNlZWRNYXhTaXplOiBcIuaWh+S7tuWkp+Wwj+S4jeiDvei2hei/hyB7MH1cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuivt+WujOaIkOWFtuS7lumXrumimFwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIuaWh+S7tuS4iuS8oOS4rS4uLiDor7fogJDlv4PnrYnlvoXlh6Dnp5LlkI7ph43or5VcIixcbiAgbG9hZGluZ0ZpbGU6IFwi5Yqg6L29Li4uXCIsXG4gIGNob29zZUZpbGU6IFwi6YCJ5oup5paH5Lu2Li4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLmnKrpgInmi6nmlofku7ZcIixcbiAgY29uZmlybURlbGV0ZTogXCLliKDpmaTorrDlvZU/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi5Li76ZSu5LiN6IO96YeN5aSNXCIsXG4gIGFkZENvbHVtbjogXCLmt7vliqDliJdcIixcbiAgYWRkUm93OiBcIua3u+WKoOihjFwiLFxuICByZW1vdmVSb3c6IFwi5Yig6Zmk562U5qGIXCIsXG4gIGVtcHR5Um93c1RleHQ6IFwi5peg5YaF5a65XCIsXG4gIGFkZFBhbmVsOiBcIuaWsOa3u1wiLFxuICByZW1vdmVQYW5lbDogXCLliKDpmaRcIixcbiAgY2hvaWNlc19JdGVtOiBcIumAiemhuVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuWIl1wiLFxuICBtYXRyaXhfcm93OiBcIuihjFwiLFxuICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwi5paH5pysXCIsXG4gIHNhdmluZ0RhdGE6IFwi5q2j5Zyo5bCG57uT5p6c5L+d5a2Y5Yiw5pyN5Yqh5ZmoLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLlnKjkv53lrZjnu5Pmnpzov4fnqIvkuK3lj5HnlJ/kuobplJnor6/vvIznu5PmnpzmnKrog73kv53lrZhcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi57uT5p6c5L+d5a2Y5oiQ5YqfIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi6K+36YeN6K+VXCIsXG4gIHRpbWVyTWluOiBcIuWIhlwiLFxuICB0aW1lclNlYzogXCLnp5JcIixcbiAgdGltZXJTcGVudEFsbDogXCLmnKzpobXnlKjml7YgezB9IOaAu+iuoeeUqOaXtnsxfSAuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIuacrOmhteeUqOaXtnswfSAuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi5oC76K6h55So5pe2IHswfSAuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLmnKzpobXnlKjml7YgezB9IOWFsSB7MX3vvIwg5oC76K6h55So5pe2IHsyfSDlhbEgezN9IC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi5pys6aG155So5pe2IHswfSDlhbEgezF9IC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLmgLvorqHnlKjml7YgezB9IOWFsSB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLmuIXnkIZcIixcbiAgY2xlYXJDYXB0aW9uOiBcIua4hemZpFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLpgInmi6nmlofku7ZcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi56e76Zmk5paH5Lu2XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi5pivXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLlkKZcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi5Yig6Zmk5paH5Lu2OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLliKDpmaTmiYDmnInmlofku7Y/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLmoIfpophcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIuWPlua2iFwiLFxuICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCLnoa7lrppcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiemgtY25cIl0gPSBzaW1wbGlmaWVkQ2hpbmVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ6aC1jblwiXSA9IFwi566A5L2T5Lit5paHXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHNwYW5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQW50ZXJpb3JcIixcbiAgcGFnZU5leHRUZXh0OiBcIlNpZ3VpZW50ZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGFyXCIsXG4gIHByZXZpZXdUZXh0OiBcIlZpc3RhIHByZXZpYVwiLFxuICBlZGl0VGV4dDogXCJFZGl0YVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQ29taWVuemFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPdHJvIChkZXNjcmliYSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5pbmd1bm9cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWNjaW9uYXIgdG9kb1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUMOhZ2luYSB7MH0gZGUgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWdpc3RybyB7MH0gZGUgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSZXNwb25kacOzIGEgezB9L3sxfSBwcmVndW50YXNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGF5IHDDoWdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGVuIGxhIGVuY3Vlc3RhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkdyYWNpYXMgcG9yIGNvbXBsZXRhciBsYSBlbmN1ZXN0YSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk51ZXN0cm9zIHJlZ2lzdHJvcyBtdWVzdHJhbiBxdWUgeWEgaGEgY29tcGxldGFkbyBlc3RhIGVuY3Vlc3RhLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkxhIGVuY3Vlc3RhIGVzdMOhIGNhcmdhbmRvLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlNlbGVjY2lvbmUuLi5cIixcbiAgdmFsdWU6IFwidmFsb3JcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IgY29udGVzdGUgbGEgcHJlZ3VudGEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgYWwgbWVub3MgdW5hIHByZWd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBvciBmYXZvciBjb250ZXN0ZSBsYXMgcHJlZ3VudGFzIGVuIGNhZGEgaGlsZXJhLlwiLFxuICBudW1lcmljRXJyb3I6IFwiTGEgZXN0aW1hY2nDs24gZGViZSBzZXIgbnVtw6lyaWNhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBvciBmYXZvciBlbnRyZSBwb3IgbG8gbWVub3MgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbWVub3MgZGUgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbcOhcyBkZSB7MH0geSBtZW5vcyBkZSB7MX0gc8OtbWJvbG9zLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlBvciBmYXZvciBsbGVuZSBwb3IgbG8gbWVub3MgezB9IGhpbGVyYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlBvciBmYXZvciBzZWxlY2Npb25lIHBvciBsbyBtZW5vcyB7MH0gdmFyaWFudGVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQb3IgZmF2b3Igc2VsZWNjaW9uZSBubyBtw6FzIGRlIHswfSB2YXJpYW50ZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJFbCAnezB9JyBkZWJlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiRWwgJ3swfScgZGViZSBzZXIgaWd1YWwgbyBtZW5vcyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlBvciBmYXZvciBhZ3JlZ3VlIHVuIGNvcnJlbyBlbGVjdHLDs25pY28gdsOhbGlkby5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiTGEgZXhwcmVzacOzbjogezB9IGRlYmVyw61hIGRldm9sdmVyICd2ZXJkYWRlcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIHZhY8OtbyBkZSBkYXRhIG8gbGEgcHJvcGllZGFkICd0cmF5ZWN0b3JpYScgbm8gZXMgY29ycmVjdGFcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJFbCB0YW1hw7FvIGRlbCBhcmNoaXZvIG5vIGRlYmUgZGUgZXhjZWRlciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IgYWdyZWd1ZSBsYSBvdHJhIGVzdGltYWNpw7NuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU3UgYXJjaGl2byBzZSBlc3TDoSBzdWJpZW5kby4gUG9yIGZhdm9yIGVzcGVyZSB1bm9zIHNlZ3VuZG9zIGUgaW50ZW50ZSBkZSBudWV2by5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2FyZ2FuZG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJFbGlqYSBhcmNoaXZvKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJObyBzZSBoYSBlbGVnaWRvIG5pbmfDum4gYXJjaGl2b1wiLFxuICBjb25maXJtRGVsZXRlOiBcIsK/UXVpZXJlcyBib3JyYXIgZWwgcmVnaXN0cm8/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRXN0ZSB2YWxvciBkZWJlIHNlciDDum5pY28uXCIsXG4gIGFkZENvbHVtbjogXCJBw7FhZGlyIGNvbHVtbmFcIixcbiAgYWRkUm93OiBcIkFncmVndWUgdW5hIGhpbGVyYVwiLFxuICByZW1vdmVSb3c6IFwiRWxpbWluYXIgdW5hIGhpbGVyYVwiLFxuICBhZGRQYW5lbDogXCJBw7FhZGlyIG51ZXZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJldGlyZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiYXJ0w61jdWxvXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW1uYVwiLFxuICBtYXRyaXhfcm93OiBcIkhpbGVyYVwiLFxuICBzYXZpbmdEYXRhOiBcIkxvcyByZXN1bHRhZG9zIHNlIGVzdMOhbiBndWFyZGFuZG8gZW4gZWwgc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkxvcyByZXN1bHRhZG9zIHNlIGVzdMOhbiBndWFyZGFuZG8gZW4gZWwgc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiwqFMb3MgcmVzdWx0YWRvcyBzZSBndWFyZGFyb24gY29uIMOpeGl0byFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkludMOpbnRhbG8gZGUgbnVldm8uXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCJIYXMgZ2FzdGFkbyB7MH0gZW4gZXN0YSBww6FnaW5hIHkgezF9IGVuIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJVc3RlZCBoYSBwYXNhZG8gezB9IGVuIGVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJIYXMgZ2FzdGFkbyBlbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkhhcyBnYXN0YWRvIHswfSBkZSB7MX0gZW4gZXN0YSBww6FnaW5hIHkgezJ9IGRlIHszfSBlbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiSGFzIGdhc3RhZG8gezB9IGRlIHsxfSBlbiBlc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVXN0ZWQgaGEgZ2FzdGFkbyB7MH0gZGUgezF9IGVuIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiTGltcGlhXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJEZXNwZWplblwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJFbGlqYSBlbCBhcmNoaXZvXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVsaW1pbmEgZXN0ZSBhcmNoaXZvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU8OtXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIHF1aWVyZXMgZWxpbWluYXIgZXN0ZSBhcmNoaXZvOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIHF1aWVyZXMgZWxpbWluYXIgdG9kb3MgbG9zIGFyY2hpdm9zP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdHVsbyBkZSBsYSBwcmVndW50YVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlc1wiXSA9IHNwYW5pc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZXNcIl0gPSBcImVzcGHDsW9sXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHN3YWhpbGlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiSWxpeW90YW5ndWxpYVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiSWZ1YXRheW9cIixcbiAgY29tcGxldGVUZXh0OiBcIkthbWlsaVwiLFxuICBwcmV2aWV3VGV4dDogXCJIYWtpa2lcIixcbiAgZWRpdFRleHQ6IFwiSGFyaXJpXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJBbnphXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiTnlpbmdpbmUgKGVsZXphKVwiLFxuICBub25lSXRlbVRleHQ6IFwiSGFrdW5hXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkNoYWd1YSBab3RlXCIsXG4gIHByb2dyZXNzVGV4dDogXCJVa3VyYXNhIHswfSB3YSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJla29kaSB7MH0geWEgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJZYWxpeW9qaWJpd2EgezB9L3sxfSBtYXN3YWxpXCIsXG4gIGVtcHR5U3VydmV5OiBcIkhha3VuYSB1a3VyYXNhIHVuYW9vbmVrYW5hIGF1IHN3YWxpIGthdGlrYSB1dGFmaXRpLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkFzYW50aSBrd2Ega3VrYW1pbGlzaGEgdXRhZml0aSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlJlY29kaSB6ZXR1IHppbmF0dW9ueWVzaGEgdGF5YXJpIHVtZWthbWlsaXNoYSB1dGFmaXRpLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlR1bmFhbmRhYSB1dGFmaXRpLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkNoYWd1YS4uLlwiLFxuICB2YWx1ZTogXCJ0aGFtYW5pXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVGFmYWRoYWxpIGppYnUgaGlsaSBzd2FsaS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVGFmYWRoYWxpIGppYnUgc3dhbGkgYW5nYWxhdSBtb2phLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRhZmFkaGFsaSBqaWJ1IG1hc3dhbGkga2F0aWthIHNhZnUgem90ZS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlRoYW1hbmkgaW5hcGFzd2Ega3V3YSB5YSBuYW1iYXJpLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlRhZmFkaGFsaSBpbmdpemEgYW5nYWxhdXswfSBodXNpa2EuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiVGFmYWRoYWxpIGluZ2l6YSBpc2lvemlkaSB7MH0gaHVzaWthLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwiVGFmYWRoYWxpIGluZ2l6YSBraXdhbmdvIHphaWRpIHlhIHswfSBuYSBraXNpY2hvcHVuZ3VhIHsxfSBodXNpa2EuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVGFmYWRoYWxpIGphemEgaXNpb3B1bmd1YSB7MH0gc2FmdS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVGFmYWRoYWxpIGNoYWd1YSBhbmdhbGF1IHswfSBsYWhhamEuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlRhZmFkaGFsaSBjaGFuZ3VhIGlzaW96aWRpIHswfSBsYWhhamEuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCIgJ3swfScgaW5hcGFzd2Ega3V3YSBzYXdhIGF1IHphaWRpIHlhIHsxfSBuYSBzYXdhIGF1IGNoaW5pIHlhIHsyfVwiLFxuICBudW1lcmljTWluOiBcIiAnezB9J2luYXBhc3dhIGt1d2Egc2F3YSBhdSB6YWlkaSB5YSB7MX1cIixcbiAgbnVtZXJpY01heDogXCIgJ3swfSdpbmFwYXN3YSBrdXdhIHNhd2EgYXUgY2hpbmkgeWEgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJUYWZhZGhhbGkgaW5naXphIGFud2FuaSBoYWxhbGkgeWEgYmFydWEtcGVwZS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVXNlbWk6ezB9IGluYXBhc3dhIGt1cnVkaSAna3dlbGknLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiT21iaSBsaW5hIGtvc2EgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJPbWJpIGxpbGlydWRpc2hhIGRhdGEgdHVwdSBhdSB0aGUgJ3BhdGgnIG1hbGkgeWEgbmppYSBzaW8gc2FoaWhpXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiU2FpemkgeWEgZmFpbGkgaGFpcGFzd2kga3V6aWRpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlRhZmFkaGFsaSBpbmdpemEgdGhhbWFuaSBueWluZ2luZS5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZhaWxpIHlha28gaW5hcGFraWEuVGFmYWRoYWxpIHN1YmlyaSBzZWt1bmRlIGthZGhhYSBuYSB1amFyaWJ1IHRlbmEuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkluYXBha2lhLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiQ2hhZ3VhIGZhaWxpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJIdWphY2hhZ3VhIGZhaWxpXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiSmUhIFVuYXRha2Ega3VmdXRhIHJla29kaT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUaGFtYW5pIGhpaSBpbmFwYXN3YSBrdXdhIHlhIGtpcGVrZWUuXCIsXG4gIGFkZENvbHVtbjogXCJPbmdlemEgS29sYW11XCIsXG4gIGFkZFJvdzogXCJPbmdlemEgc2FmdVwiLFxuICByZW1vdmVSb3c6IFwiVG9hXCIsXG4gIGFkZFBhbmVsOiBcIk9uZ2V6YSBtcHlhXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlRvYVwiLFxuICBjaG9pY2VzX0l0ZW06IFwia2l0dVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbGFtdVwiLFxuICBtYXRyaXhfcm93OiBcIlNhZnVcIixcbiAgc2F2aW5nRGF0YTogXCJNYXRva2VvIHlhbWVoaWZhZGhpd2Ega3dhIHNldmEuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIktvc2EgbGltZXRva2VhIG5hIGhhdHVrdXdlemEga3VoaWZhZGhpIG1hdG9rZW8uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIk1hdG9rZW8geWFtZWhpZmFkaGl3YSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkphcmlidSB0ZW5hXCIsXG4gIHRpbWVyTWluOiBcImRha2lrYVwiLFxuICB0aW1lclNlYzogXCJzZWt1bmRlXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVW1ldHVtaWEgezB9IGt3ZW55ZSB1a3VyYXNhIGh1dSBuYSB7MX0ga3dhIGp1bWxhLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJVbWV0dW1pYSB7MH0ga3dlbnllIHVrdXJhc2EgaHV1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlVtZXR1bWlhIHswfSBrd2EganVtbGEuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiVW1ldHVtaWEgezB9IHlhIHsxfSBrd2VueWUgdWt1cmFzYSBodXUgezJ9IHdhIHszfSBrd2EganVtbGEuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlVtZXR1bWlhIHswfSB5YSB7MX0ga3dlbnllIHVrdXJhc2EgaHV1LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlVtZXR1bWlhIHswfSB5YSB7MX0ga3dhIGp1bWxhLlwiLFxuICBjbGVhbkNhcHRpb246IFwiU2FmaXNoYVwiLFxuICBjbGVhckNhcHRpb246IFwiT25kb2FcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiQ2hhZ3VhIGZhaWxpXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIk9uZG9hIGZhaWxpXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiTmRpb1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiSGFwYW5hXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkplISBVbmEgdWhha2lrYSBrdXdhIHVuYXRha2Ega3VvbmRvYSBmYWlsaSBoaWk6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkplISBVbmEgdWhha2lrYSBrdXdhIHVuYXRha2Ega3VvbmRvYSBmYWlsaSB6b3RlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiS2ljaHdhIGNoYSBTd2FsaVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJzd1wiXSA9IHN3YWhpbGlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wic3dcIl0gPSBcInN3YWhpbGlcIjtcbiIsIi8vQ3JlYXRlIGJ5IE1hdHRpYXMgQXNwbHVuZFxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzd2VkaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkbDtnJlZ8OlZW5kZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiTsOkc3RhXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGw6RyZGlnXCIsXG4gIHByZXZpZXdUZXh0OiBcIkbDtnJoYW5kc3Zpc25pbmdcIixcbiAgZWRpdFRleHQ6IFwiUmVkaWdlcmFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQW5uYXQgKGJlc2tyaXYpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJJbmdlblwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWw6RsaiBhbGxhXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTaWRhIHswfSBhdiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlNwZWxhIGluIHswfSBhdiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkJlc3ZhcmFkZSB7MH0gLyB7MX0gZnLDpWdvclwiLFxuICBlbXB0eVN1cnZleTogXCJEZXQgZmlubnMgaW5nZW4gc3lubGlnIHNpZGEgZWxsZXIgZnLDpWdhIGkgZW5rw6R0ZW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFjayBmw7ZyIGF0dCBkdSBnZW5vbWbDtnJ0IGVua8OkdGVuISFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlbDpXJhIHJlZ2lzdGVyIHZpc2FyIGF0dCBkdSByZWRhbiBoYXIgc2x1dGbDtnJ0IGRlbm5hIHVuZGVyc8O2a25pbmcuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiRW5rw6R0ZW4gbGFkZGFzLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlbDpGxqLi4uXCIsXG4gIHZhbHVlOiBcInbDpHJkZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlZhciB2w6RubGlnIGJlc3ZhcmEgZnLDpWdhbi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVsOkbmxpZ2VuIHN2YXJhIHDDpSBtaW5zdCBlbiBmcsOlZ2EuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmFyIHbDpG5saWcgYmVzdmFyYSBmcsOlZ29ybmEgcMOlIGFsbGEgcmFkZXIuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJWw6RyZGV0IHNrYSB2YXJhIG51bWVyaXNrdC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJWYXIgdsOkbmxpZyBhbmdlIG1pbnN0IHswfSB0ZWNrZW4uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiQW5nZSBmw6RycmUgw6RuIHswfSB0ZWNrZW4uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiQW5nZSBtZXIgw6RuIHswfSBvY2ggZsOkcnJlIMOkbiB7MX0gdGVja2VuLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlZhciB2w6RubGlnIGZ5bGwgaSBtaW5zdCB7MH0gcmFkZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIMOldG1pbnN0b25lIHswfSB2YXJpYW50ZXIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIGludGUgZmxlciDDpG4gezB9IHZhcmlhbnRlci5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1lciDDpG4gezF9IHNhbXQgbGlrYSBtZWQgZWxsZXIgbWluZHJlIMOkbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJWYXIgdsOkbmxpZyBhbmdlIGVuIGtvcnJla3QgZS1wb3N0YWRyZXNzLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVdHRyeWNrZXQ6IHswfSBza2EgcmV0dXJuZXJhICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkbDtnJmcsOlZ2FuIHJldHVybmVyYWRlIGZlbGV0ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiQW50aW5nZW4gcmV0dXJuZXJhZGUgZsO2cmZyw6VnYW4gaW5nZW4gZGF0YSBlbGxlciBzw6Ugw6RyIGVnZW5za2FwZW4gJ3BhdGgnIGludGUga29ycmVrdFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZpbHN0b3JsZWtlbiBmw6VyIGVqIMO2dmVyc3RpZ2EgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYW5nZSBkZXQgYW5kcmEgdsOkcmRldC5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkRpbiBmaWwgbGFkZGFzIHVwcC4gVmFyIHbDpG5saWcgdsOkbnRhIG7DpWdyYSBzZWt1bmRlciBvY2ggZsO2cnPDtmsgc2VkYW4gaWdlbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTMOkc2VyIGluLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVsOkbGogZmlsIChlcikgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJJbmdlbiBmaWwgdmFsZFwiLFxuICBjb25maXJtRGVsZXRlOiBcIlZpbGwgZHUgcmFkZXJhIHBvc3Rlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZXR0YSB2w6RyZGUgc2thIHZhcmEgdW5pa3QuXCIsXG4gIGFkZENvbHVtbjogXCJMw6RnZyB0aWxsIGtvbHVtblwiLFxuICBhZGRSb3c6IFwiTMOkZ2cgdGlsbCByYWRcIixcbiAgcmVtb3ZlUm93OiBcIlRhIGJvcnRcIixcbiAgYWRkUGFuZWw6IFwiTMOkZ2cgdGlsbCBueVwiLFxuICByZW1vdmVQYW5lbDogXCJUYSBib3J0XCIsXG4gIGNob2ljZXNfSXRlbTogXCJBcnRpa2VsXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sdW1uXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmFkXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmVzdWx0YXRlbiBzcGFyYXMgcMOlIHNlcnZlcm4gLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJFdHQgZmVsIGludHLDpGZmYWRlIG9jaCB2aSBrdW5kZSBpbnRlIHNwYXJhIHJlc3VsdGF0ZW4uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlc3VsdGF0ZW4gc3BhcmFkZXMgZnJhbWfDpW5nc3Jpa3QhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJGw7Zyc8O2ayBpZ2VuXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBww6UgZGVuIGjDpHIgc2lkYW4gb2NoIHsxfSB0b3RhbHQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IHDDpSBkZW4gaMOkciBzaWRhbi5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSB0b3RhbHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBhdiB7MX0gcMOlIGRlbiBow6RyIHNpZGFuIG9jaCB7Mn0gYXYgezN9IHRvdGFsdC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gYXYgezF9IHDDpSBkZW4gaMOkciBzaWRhbi5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBhdiB7MX0gdG90YWx0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUmVuYVwiLFxuICBjbGVhckNhcHRpb246IFwiS2xhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWw6RsaiBGSUxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVGEgYm9ydCBkZW4gaMOkciBmaWxlblwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWpcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBkZW4gaMOkciBmaWxlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBhbGxhIGZpbGVyP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiRnLDpWdldGl0ZWxcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wic3ZcIl0gPSBzd2VkaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInN2XCJdID0gXCJzdmVuc2thXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHRhamlrU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCR0L7Qt9Cz0LDRiNGCXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQntGP0L3QtNCwXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQmNK30YDQviDRiNGD0LRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCe0pPQvtC3XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTQuNCz0LDRgCAo0LvRg9GC0YTQsNC9INGC0LDQstGB0LjRhCDQutGD0L3QtdC0KVwiLFxuICBub25lSXRlbVRleHQ6IFwi0J3QtVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLSstCw0LzQsNGA0L4g0LjQvdGC0LjRhdC+0LEg0LrQsNGA0LTQsNC9XCIsXG4gIHByb2dyZXNzVGV4dDogXCLQodCw0rPQuNGE0LDQuCB7MH0g0LDQtyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0K/Qs9C+0L0g0YHQsNCy0L7QuyDQstGD0rfRg9C0INC90LDQtNC+0YDQsNC0LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItCi0LDRiNCw0LrQutGD0YAg0LHQsNGA0L7QuCDQv9GD0YAg0LrQsNGA0LTQsNC90Lgg0YHQsNCy0L7Qu9C90L7QvNCwIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi0KjRg9C80L4g0LDQu9C70LDQutCw0Lkg0LjQvSDQv9GD0YDRgdC40YjRgNC+INCw0L3St9C+0Lwg0LTQvtC00LDQtdC0LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCR0L7RgNCz0LjRgNOjINCw0Lcg0YHQtdGA0LLQtdGALi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCY0L3RgtC40YXQvtCxINC60LDRgNC00LDQvS4uLlwiLFxuICB2YWx1ZTogXCLSm9C40LzQvNCw0YJcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LHQsCDRgdCw0LLQvtC7INK30LDQstC+0LEg0LTQuNKz0LXQtC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0JjQu9GC0LjQvNC+0YEsINCw0pvQsNC70LDQvSDQsdCwINGP0Log0YHQsNCy0L7QuyDSt9Cw0LLQvtCxINC00LjSs9C10LQuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCx0LAg0rPQsNC80LDQuCDRgdCw0LLQvtC70rPQviDQtNCw0YAg0rPQsNC80LDQuCDRgdCw0YLRgNKz0L4g0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICBudW1lcmljRXJyb3I6IFwi0rbQsNCy0L7QsSDQsdC+0Y/QtCDRgNCw0pvQsNC8INCx0L7RiNCw0LQuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0JjQu9GC0LjQvNC+0YEsINCw0LcgezB9INC30LjRkdC00YLQsNGAINGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQmNC70YLQuNC80L7RgSwg0LDQtyB7MH0g0LrQsNC80YLQsNGAINGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLQmNC70YLQuNC80L7RgSwg0LDQtyB7MH0g0LfQuNGR0LTRgtCw0YAg0LLQsCDQsNC3IHsxfSDQutCw0LzRgtCw0YAg0YDQsNC80Lcg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQvdCwINC60LDQvNGC0LDRgCDQsNC3IHswfSDRgdCw0YLRgCDQv9GD0YAg0LrRg9C90LXQtC5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCw0pvQsNC70LDQvSB7MH0g0LLQsNGA0LjQsNC90YIg0LjQvdGC0LjRhdC+0LEg0LrRg9C90LXQtC5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINC90LAg0LfQuNGR0LTRgtCw0YAg0LDQtyB7MH0g0LLQsNGA0LjQsNC90YIg0LjQvdGC0LjRhdC+0LEg0LrRg9C90LXQtC5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nINCx0L7Rj9C0INC90LAg0LrQsNC8INCw0LcgezF9INCy0LAg0L3QsCDQsdC40YHRkdGAINCw0LcgezJ9INCx0L7RiNCw0LRcIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDQsdC+0Y/QtCDQvdCwINC60LDQvCDQsNC3IHsxfSDQsdC+0YjQsNC0XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0LHQvtGP0LQg0L3QsCDQt9C40ZHQtCDQsNC3IHsxfSDQsdC+0YjQsNC0XCIsXG4gIGludmFsaWRFbWFpbDogXCLQmNC70YLQuNC80L7RgSwg0L/QvtGH0YLQsNC4INGN0LvQtdC60YLRgNC+0L3QuNC4INCy0L7Sm9C10LjRgNC+INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjRhNC+0LTQsNC4IHswfSDQsdC+0Y/QtCAndHJ1ZScg0LHQsNGA0LPQsNGA0LTQvtC90LDQtC5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCU0LDRgNGF0L7RgdGCINGF0LDRgtC+0LPToyDQsdC+0LfQs9Cw0YDQtNC+0L3QtCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItK20LDQstC+0LEg0LHQsCDQtNCw0YDRhdC+0YHRgiDRhdC+0LvToyDQvtC80LDQtCDRkSDRhdC+0YHQuNGP0YLQuCAncGF0aCcg0L3QvtC00YPRgNGD0YHRgiDQvNGD0LDQudGP0L0g0LrQsNGA0LTQsCDRiNGD0LTQsNCw0YHRglwiLFxuICBleGNlZWRNYXhTaXplOiBcItCQ0L3QtNC+0LfQsNC4INGE0LDQudC7INCx0L7Rj9C0INC90LAg0LrQsNC70L7QvSDQsNC3IHswfSDQsdC+0YjQsNC0LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCx0LAg0LzQsNC50LTQvtC90LggJ9CU0LjQs9Cw0YAnINC00L7QtNCw0rPQvtGA0L4g0LLQvtGA0LjQtCDQutGD0L3QtdC0XCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLQpNCw0LnQu9C4INGI0YPQvNC+INCx0L7RgCDRiNGD0LTQsCDQuNGB0YLQvtC00LDQsNGB0YIuINCv0LrRh9Cw0L3QtCDRgdC+0L3QuNGPINC40L3RgtC40LfQvtGAINGI0LDQstC10LQg0LLQsCDQsdC+0YDQuCDQtNC40LPQsNGAINC606/RiNC40Ygg0LrRg9C90LXQtC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0JHQvtGA0LrRg9C906MuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQpNCw0LnQuyjSs9C+KS3RgNC+INC40L3RgtC40YXQvtCxINC60YPQvdC10LQuLi5cIixcbiAgY29uZmlybURlbGV0ZTogXCLQqNGD0LzQviDQvNGD0YLQvNCw0LjQvSDSs9Cw0YHRgtC10LQsINC60Lgg0LzQtdGF0L7Ss9C10LQg0LLQvtGA0LjQtNGA0L4g0YLQvtC30LAg0LrRg9C90LXQtD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQmNC9INCw0YDQt9C40Ygg0LHQvtGP0LQg0LHQtdC90LDQt9C40YAg0LHQvtGI0LDQtC5cIixcbiAgYWRkQ29sdW1uOiBcItCY0LvQvtCy0LDQuCDRgdGD0YLRg9C9XCIsXG4gIGFkZFJvdzogXCLQmNC70L7QstCw0Lgg0YHQsNGC0YBcIixcbiAgcmVtb3ZlUm93OiBcItCd0LXRgdGCINC60LDRgNC00LDQvVwiLFxuICBhZGRQYW5lbDogXCLQmNC70L7QstCwINC60LDRgNC00LDQvVwiLFxuICByZW1vdmVQYW5lbDogXCLQndC10YHRgiDQutCw0YDQtNCw0L1cIixcbiAgY2hvaWNlc19JdGVtOiBcItCS0LDRgNC40LDQvdGCXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi0KHRg9GC0YPQvVwiLFxuICBtYXRyaXhfcm93OiBcItCh0LDRgtGAXCIsXG4gIHNhdmluZ0RhdGE6IFwi0J3QsNGC0LjSt9CwINCx0LAg0YHQtdGA0LLQtdGAINGB0LDQsdGCINGI0YPQtNCwINC40YHRgtC+0LTQsNCw0L3QtC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0KXQsNGC0L7Qs9OjINCx0LAg0LDQvNCw0Lsg0L7QvNCw0LQsINC90LDRgtC40rfQsCDRgdCw0LHRgiDQvdCw0YjRg9C0LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQndCw0YLQuNK30LAg0LHQvtC80YPQstCw0YTRhNCw0LrQuNGP0YIg0YHQsNCx0YIg0YjRg9C0IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0JHQvtGA0Lgg0LTQuNCz0LDRgCDQutOv0YjQuNGIINC60LDRgNC00LDQvdC0XCIsXG4gIHRpbWVyTWluOiBcItC00LDSm1wiLFxuICB0aW1lclNlYzogXCLRgdC+0L1cIixcbiAgdGltZXJTcGVudEFsbDogXCLQqNGD0LzQviB7MH0g0LTQsNGAINC40L0g0YHQsNKz0LjRhNCwINCy0LAgezF9INC00LDRgCDRg9C80YPQvCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCo0YPQvNC+IHswfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0YHQsNGA0YQg0LrQsNGA0LTQtdC0LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCo0YPQvNC+IHswfSDQtNCw0YAg0LjQvSDRgtC10YHRgiDRgdCw0YDRhCDQvdCw0LzRg9C00LXQtC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCo0YPQvNC+IHswfSDQsNC3IHsxfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0LLQsCB7Mn0g0LDQtyB7M30g0LTQsNGAINGD0LzRg9C8INGB0LDRgNGEINC60LDRgNC00LXQtCDQtNCw0YAg0LTQvtGF0LjQu9C4INC40L0g0YLQtdGB0YIuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCo0YPQvNC+IHswfSDQsNC3IHsxfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0YHQsNGA0YQg0LrQsNGA0LTQtdC0LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCo0YPQvNC+IHswfSDQsNC3IHsxfSDQtNCw0YAg0rPQsNC80LDQuCDRgtC10YHRgiDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQotC+0LfQsCDQutCw0YDQtNCw0L1cIixcbiAgY2xlYXJDYXB0aW9uOiBcItCi0L7Qt9CwINC60LDRgNC00LDQvVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQpNCw0LnQu9GA0L4g0L3QtdGB0YIg0LrQsNGA0LTQsNC9XCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widGdcIl0gPSB0YWppa1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ0Z1wiXSA9IFwi0YLQvtK30LjQutOjXCI7XG4iLCIvL0NyZWF0ZWQgYnkgUGFkZXQgVGF3ZWVrdW5rYW5cbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdGhhaVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLguIHguYjguK3guJnguKvguJnguYnguLJcIixcbiAgcGFnZU5leHRUZXh0OiBcIuC4luC4seC4lOC5hOC4m1wiLFxuICBjb21wbGV0ZVRleHQ6IFwi4Liq4Liz4LmA4Lij4LmH4LiIXCIsXG4gIHByZXZpZXdUZXh0OiBcIuC4lOC4ueC4leC4seC4p+C4reC4ouC5iOC4suC4h1wiLFxuICBlZGl0VGV4dDogXCLguYHguIHguYnguYTguIJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuC5gOC4o+C4tOC5iOC4oVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuC4reC4t+C5iOC4meC5hiAo4LmC4Lib4Lij4LiU4Lij4Liw4Lia4Li4KVwiLFxuICBub25lSXRlbVRleHQ6IFwi4LmE4Lih4LmI4Lih4Li1XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuC5gOC4peC4t+C4reC4geC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi4Lir4LiZ4LmJ4Liy4LiX4Li14LmIIHswfSDguIjguLLguIEgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLguKPguLLguKLguIHguLLguKPguJfguLXguYggezB9IOC4iOC4suC4gSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIuC4hOC4s+C4leC4reC4muC4l+C4teC5iCB7MH0vezF9IOC4iOC4s+C4meC4p+C4meC4hOC4s+C4luC4suC4oVwiLFxuICBlbXB0eVN1cnZleTogXCLguYTguKHguYjguKHguLXguKvguJnguYnguLLguYDguJ7guIjguJfguLXguYjguKHguK3guIfguYDguKvguYfguJkg4Lir4Lij4Li34LitIOC4hOC4s+C4luC4suC4oeC5g+C4mSBzdXJ2ZXkg4LiZ4Li14LmJXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi4LiC4Lit4Lia4LiE4Li44LiT4LiX4Li14LmI4LiX4LizIHN1cnZleSDguIjguJnguYDguKrguKPguYfguIhcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIuC4o+C4suC4ouC4geC4suC4o+C4guC4reC4h+C5gOC4o+C4suC5geC4quC4lOC4h+C4p+C5iOC4suC4hOC4uOC4k+C5hOC4lOC5ieC4l+C4syBzdXJ2ZXkg4LmA4Liq4Lij4LmH4LiI4LmA4Lij4Li14Lii4Lia4Lij4LmJ4Lit4Lii4LmB4Lil4LmJ4LinXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi4LiB4Liz4Lil4Lix4LiH4LmC4Lir4Lil4LiUIFN1cnZleS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLguYDguKXguLfguK3guIEuLi5cIixcbiAgdmFsdWU6IFwi4LiC4LmJ4Lit4Lih4Li54LilXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LiV4Lit4Lia4LiE4Liz4LiW4Liy4LihXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIuC4geC4o+C4uOC4k+C4suC4leC4reC4muC4guC4seC5ieC4meC4leC5iOC4s+C4q+C4meC4tuC5iOC4h+C4hOC4s+C4luC4suC4oVwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuC4geC4o+C4uOC4k+C4suC4leC4reC4muC4hOC4s+C4luC4suC4oeC5g+C4meC4l+C4uOC4geC5huC5geC4luC4p1wiLFxuICBudW1lcmljRXJyb3I6IFwi4LiC4LmJ4Lit4Lih4Li54Lil4LiX4Li14LmI4LmD4Liq4LmI4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZ4LiV4Lix4Lin4LmA4Lil4LiCXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LiC4Lix4LmJ4LiZ4LiV4LmI4Liz4LiI4Liz4LiZ4Lin4LiZIHswfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgdGV4dE1heExlbmd0aDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguYTguKHguYjguYDguIHguLTguJnguIjguLPguJnguKfguJkgezB9IOC4leC4seC4p+C4reC4seC4geC4qeC4o1wiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4guC4seC5ieC4meC4leC5iOC4s+C4iOC4s+C4meC4p+C4mSB7MH0g4LmB4Lil4Liw4LmE4Lih4LmI4LmA4LiB4Li04LiZ4LiI4Liz4LiZ4Lin4LiZIHsxfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLguIHguKPguLjguJPguLLguYPguKrguYjguILguLHguYnguJnguJXguYjguLPguIjguLPguJnguKfguJkgezB9IOC5geC4luC4p1wiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguK3guKLguYjguLLguIfguJnguYnguK3guKIgezB9IOC4o+C4suC4ouC4geC4suC4o1wiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguYTguKHguYjguYDguIHguLTguJkgezB9IOC4o+C4suC4ouC4geC4suC4o1wiLFxuICBudW1lcmljTWluTWF4OiBcIid7MH0nIOC4leC5ieC4reC4h+C4oeC4suC4geC4geC4p+C5iOC4suC4q+C4o+C4t+C4reC5gOC4l+C5iOC4suC4geC4seC4miB7MX0g4LmB4Lil4Liw4LiZ4LmJ4Lit4Lii4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIOC4leC5ieC4reC4h+C4oeC4suC4geC4geC4p+C5iOC4suC4q+C4o+C4t+C4reC5gOC4l+C5iOC4suC4geC4seC4miB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDguJnguYnguK3guKLguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguK3guLXguYDguKHguKXguYzguYHguK3guJTguYDguJTguKPguKrguJfguLXguYjguJbguLnguIHguJXguYnguK3guIdcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVGhlIGV4cHJlc3Npb246IHswfSDguJXguYnguK3guIfguKPguLXguYDguJfguLTguKPguYzguJkgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi4Lij4Li14LmA4LiE4Lin4Liq4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi4Lij4Li14LmA4LiE4Lin4Liq4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZ4LiC4LmJ4Lit4Lih4Li54Lil4Lin4LmI4Liy4LiH4LmA4Lib4Lil4LmI4LiyIOC4q+C4o+C4t+C4rSAncGF0aCcgcHJvcGVydHkg4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi4LiC4LiZ4Liy4LiU4LmE4Lif4Lil4LmM4LiV4LmJ4Lit4LiH4LmE4Lih4LmI4LmA4LiB4Li04LiZIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4hOC5iOC4suC4reC4t+C5iOC4mVwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi4LmE4Lif4Lil4LmM4LiC4Lit4LiH4LiE4Li44LiT4LiB4Liz4Lil4Lix4LiH4Lit4Lix4Lie4LmC4Lir4Lil4LiU4Lit4Lii4Li54LmILiDguIHguKPguLjguJPguLLguKPguK3guKrguLHguIHguITguKPguLnguYjguYHguKXguYnguKfguJfguLPguIHguLLguKPguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIdcIixcbiAgbG9hZGluZ0ZpbGU6IFwi4LiB4Liz4Lil4Lix4LiH4LmC4Lir4Lil4LiULi4uXCIsXG4gIGNob29zZUZpbGU6IFwi4LmA4Lil4Li34Lit4LiB4LmE4Lif4Lil4LmMLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLguYTguKHguYjguYTguJ/guKXguYzguJfguLXguYjguYDguKXguLfguK3guIFcIixcbiAgY29uZmlybURlbGV0ZTogXCLguITguLjguJPguJXguYnguK3guIfguIHguLLguKPguKXguJrguKPguLLguKLguIHguLLguKPguJnguLXguYnguIjguKPguLTguIfguKvguKPguLfguK3guYTguKHguYg/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi4LiC4LmJ4Lit4Lih4Li54Lil4LiZ4Li14LmJ4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZIHVuaXF1ZS5cIixcbiAgYWRkQ29sdW1uOiBcIuC5gOC4nuC4tOC5iOC4oeC4hOC4reC4peC4seC4oeC4meC5jFwiLFxuICBhZGRSb3c6IFwi4LmA4Lie4Li04LmI4Lih4LmB4LiW4LinXCIsXG4gIHJlbW92ZVJvdzogXCLguKXguJpcIixcbiAgYWRkUGFuZWw6IFwi4LmA4Lie4Li04LmI4LihXCIsXG4gIHJlbW92ZVBhbmVsOiBcIuC4peC4mlwiLFxuICBjaG9pY2VzX0l0ZW06IFwi4LiK4Li04LmJ4LiZXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi4LiE4Lit4Lil4Lix4Lih4LiZ4LmMXCIsXG4gIG1hdHJpeF9yb3c6IFwi4LmB4LiW4LinXCIsXG4gIHNhdmluZ0RhdGE6IFwi4Lic4Lil4Lil4Lix4Lie4LiX4LmM4LiB4Liz4Lil4Lix4LiH4Lia4Lix4LiZ4LiX4Li24LiB4Lil4LiH4LiX4Li14LmI4LmA4LiL4Li04Lij4LmM4Lif4LmA4Lin4Lit4Lij4LmMLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLguKHguLXguITguKfguLLguKHguJzguLTguJTguJ7guKXguLLguJTguYDguIHguLTguJTguILguLbguYnguJnguKrguYjguIfguJzguKXguYPguKvguYnguYTguKHguYjguKrguLLguKHguLLguKPguJbguJrguLHguJnguJfguLbguIHguJzguKXguYTguJTguYlcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi4Lia4Lix4LiZ4LiX4Li24LiB4Liq4Liz4LmA4Lij4LmH4LiI4LmB4Lil4LmJ4LinXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLguKPguJrguIHguKfguJnguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIdcIixcbiAgdGltZXJNaW46IFwi4LiZ4Liy4LiX4Li1XCIsXG4gIHRpbWVyU2VjOiBcIuC4p+C4tOC4meC4suC4l+C4tVwiLFxuICB0aW1lclNwZW50QWxsOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJ4LmB4Lil4LiwIHsxfSDguKPguKfguKHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguJrguJnguKvguJnguYnguLLguJnguLXguYlcIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICB0aW1lckxpbWl0QWxsOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4LiC4Lit4LiHIHsxfSDguJrguJnguKvguJnguYnguLLguJnguLXguYnguYHguKXguLAgezJ9IOC4guC4reC4hyB7M30g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4LiC4Lit4LiHIHsxfSDguJrguJnguKvguJnguYnguLLguJnguLXguYlcIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLguITguKXguLXguJlcIixcbiAgY2xlYXJDYXB0aW9uOiBcIuC5gOC4hOC4peC4teC4ouC4o+C5jFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLguYDguKXguLfguK3guIHguYTguJ/guKXguYxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi4LiZ4Liz4LmE4Lif4Lil4LmM4LiZ4Li14LmJ4Lit4Lit4LiBXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi4LmD4LiK4LmIXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLguYTguKHguYjguYPguIrguYhcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi4LiE4Li44LiT4LmB4LiZ4LmI4LmD4LiI4LiX4Li14LmI4LiI4Liw4LiZ4Liz4LmE4Lif4Lil4LmM4LiZ4Li14LmJ4Lit4Lit4LiB4LmD4LiK4LmI4Lir4Lij4Li34Lit4LmE4Lih4LmIOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLguITguLjguJPguYHguJnguYjguYPguIjguJfguLXguYjguIjguLDguJnguLPguYTguJ/guKXguYzguJfguLHguYnguIfguKvguKHguJTguK3guK3guIHguYPguIrguYjguKvguKPguLfguK3guYTguKHguYhcIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuC4iuC4t+C5iOC4reC4hOC4s+C4luC4suC4oVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0aFwiXSA9IHRoYWlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1widGhcIl0gPSBcIuC5hOC4l+C4olwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi5LiK5LiA6aCBXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLkuIvkuIDpoIFcIixcbiAgY29tcGxldGVUZXh0OiBcIuaPkOS6pOWVj+WNt1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuWhq+Wvq+WFtuS7luetlOahiFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi56ysIHswfSDpoIEsIOWFsSB7MX0g6aCBXCIsXG4gIGVtcHR5U3VydmV5OiBcIuWVj+WNt+S4reaykuacieWVj+mhjOaIlumggemdolwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuaEn+isneaCqOeahOWPg+iIhyFcIixcbiAgbG9hZGluZ1N1cnZleTogXCLllY/ljbfovInlhaXkuK0uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi6KuL6YG45pOHLi4uXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi6KuL5aGr5a+r5q2k5ZWP6aGMXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi6KuL5aGr5a+r5omA5pyJ6KGM5Lit5ZWP6aGMXCIsXG4gIG51bWVyaWNFcnJvcjogXCLnrZTmoYjlv4XpoIjmmK/lgIvmlbjlrZdcIixcbiAgdGV4dE1pbkxlbmd0aDogXCLnrZTmoYjplbfluqboh7PlsJEgezB9IOWAi+Wtl+WFg1wiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIuetlOahiOmVt+W6puS4jeiDvei2hemBjiB7MH0g5YCL5a2X5YWDXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi562U5qGI6ZW35bqm5b+F6aCI5ZyoIHswfSAtIHsxfSDlgIvlrZflhYPkuYvplpNcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLmnIDlsJHpnIDopoHloavlr6sgezB9IOihjOetlOahiFwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLmnIDlsJHpnIDopoHpgbjmk4cgezB9IOmgheetlOahiFwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLmnIDlpJrlj6rog73pgbjmk4cgezB9IOmgheetlOahiFwiLFxuICBudW1lcmljTWluTWF4OiBcIuetlOahiCAnezB9JyDlv4XpoIjlpKfmlrznrYnmlrwgezF9IOS4lOWwj+aWvOetieaWvCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCLnrZTmoYggJ3swfScg5b+F6aCI5aSn5pa8562J5pa8IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIuetlOahiCAnezB9JyDlv4XpoIjlsI/mlrznrYnmlrwgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLoq4vovLjlhaXmnInmlYjnmoQgRW1haWwg5Zyw5Z2AXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLovInlhaXpgbjpoIXmmYLnmbznlJ/pjK/oqqQgJ3swfSc6IHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi5pyq6IO96LyJ5YWl5pyJ5pWI55qE6YG46aCF5oiW6KuL5rGC5Y+D5pW46Lev5b6R5pyJ6KqkXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi5paH5Lu25aSn5bCP5LiN6IO96LaF6YGOIHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi6KuL5a6M5oiQ5YW25LuW5ZWP6aGMXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi5paH5Lu25LiK5YKz5LitLi4uIOiri+iAkOW/g+etieW+heW5vuenkuW+jOmHjeipplwiLFxuICBhZGRSb3c6IFwi5re75Yqg562U5qGIXCIsXG4gIHJlbW92ZVJvdzogXCLliKrpmaTnrZTmoYhcIixcbiAgY2hvaWNlc19JdGVtOiBcIumBuOmghVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuWIl1wiLFxuICBtYXRyaXhfcm93OiBcIuihjFwiLFxuICBzYXZpbmdEYXRhOiBcIuato+WcqOWwh+e1kOaenOS/neWtmOWIsOacjeWLmeWZqC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi5Zyo5L+d5a2Y57WQ5p6c6YGO56iL5Lit55m855Sf5LqG6Yyv6Kqk77yM57WQ5p6c5pyq6IO95L+d5a2YXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIue1kOaenOS/neWtmOaIkOWKnyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIuiri+mHjeipplwiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInpoLXR3XCJdID0gdHJhZGl0aW9uYWxDaGluZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInpoLXR3XCJdID0gXCLnuYHpq5TkuK3mlodcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdHVya2lzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJHZXJpXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLEsGxlcmlcIixcbiAgY29tcGxldGVUZXh0OiBcIkFua2V0aSBUYW1hbWxhXCIsXG4gIHByZXZpZXdUZXh0OiBcIsOWbiBpemxlbWVcIixcbiAgZWRpdFRleHQ6IFwiRMO8emVubGVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkJhxZ9sYXRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJEacSfZXIgKGHDp8Sxa2xhecSxbsSxeilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIllva1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJIZXBzaW5pIHNlw6dcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNheWZhIHswfSAvIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiS2F5xLF0IHswfSAvIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiU29ydWxhcsSxIGNldmFwbGFkxLEgezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIkFua2V0dGUgZ8O2csO8bnTDvGxlbmVjZWsgc2F5ZmEgeWEgZGEgc29ydSBtZXZjdXQgZGXEn2lsLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkFua2V0aW1pemkgdGFtYW1sYWTEscSfxLFuxLF6IGnDp2luIHRlxZ9la2vDvHIgZWRlcml6LlwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiS2F5xLF0bGFyxLFtxLF6LCBidSBhbmtldGkgemF0ZW4gdGFtYW1sYWTEscSfxLFuxLF6xLEgZ8O2c3Rlcml5b3IuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiQW5rZXQgc3VudWN1ZGFuIHnDvGtsZW5peW9yIC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZcOnaW5peiAuLi5cIixcbiAgdmFsdWU6IFwiZGXEn2VyXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTMO8dGZlbiBzb3J1eWEgY2V2YXAgdmVyaW5pelwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJMw7x0ZmVuIGVuIGF6IGJpciBzb3J1eXUgeWFuxLF0bGF5xLFuLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkzDvHRmZW4gdMO8bSBzYXTEsXJsYXJkYWtpIHNvcnVsYXLEsSBjZXZhcGxhecSxbsSxei5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkdpcmlsZW4gZGXEn2VyIG51bWVyaWsgb2xtYWzEsWTEsXJcIixcbiAgdGV4dE1pbkxlbmd0aDogXCJFbiBheiB7MH0gc2VtYm9sIGdpcmluaXouXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTMO8dGZlbiB7MH0ga2FyYWt0ZXJkZW4gYXogZ2lyaW4uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiTMO8dGZlbiB7MH0g4oCZZGVuIGZhemxhIHZlIHsxfSDigJlkZW4gYXoga2FyYWt0ZXIgZ2lyaW4uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTMO8dGZlbiBlbiBheiB7MH0gc2F0xLFyxLEgZG9sZHVydW4uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNlw6dlbmXEn2kgc2XDp2luaXouXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIkzDvHRmZW4gezB9IGFkZXR0ZW4gZmF6bGEgc2XDp21leWluaXouXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJUaGUgJ3swfScgc2hvdWxkIGJlIGVxdWFsIG9yIG1vcmUgdGhhbiB7MX0gYW5kIGVxdWFsIG9yIGxlc3MgdGhhbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBkZcSfZXJpIHsxfSBkZcSfZXJpbmUgZcWfaXQgdmV5YSBiw7x5w7xrIG9sbWFsxLFkxLFyXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHlhIGRhIGvDvMOnw7xrIG9sbWFsxLFkxLFyLlwiLFxuICBpbnZhbGlkRW1haWw6IFwiTMO8dGZlbiBnZcOnZXJsaSBiaXIgZXBvc3RhIGFkcmVzaSBnaXJpbml6LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLEsGZhZGU6IHswfSAndHJ1ZScgZMO2bmTDvHJtZWxpZGlyLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGFsZWJpIMWfdSBoYXRhecSxIGTDtm5kw7wgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJUYWxlcCBoZXJoYW5naSBiaXIgdmVyaSBkw7ZubWVkaSB5YSBkYSAncGF0aCcgw7Z6ZWxsacSfaSBoYXRhbMSxLlwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRvc3lhIGJveXV0dSB7MH0gZGXEn2VyaW5pIGdlw6dlbWV6LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTMO8dGZlbiBkacSfZXIgZGXEn2VybGVyaSBnaXJpbml6LlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRG9zeWFuxLF6IHnDvGtsZW5peW9yLiBMw5x0ZmVuIGJpcmthw6cgc2FuaXllIGJla2xleWluIHZlIHRla3JhciBkZW5leWluLlwiLFxuICBsb2FkaW5nRmlsZTogXCJZw7xrbGVuaXlvci4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkRvc3lhbGFyxLEgc2XDp2luIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiRG9zeWEgc2XDp2lsaSBkZcSfaWxcIixcbiAgY29uZmlybURlbGV0ZTogXCJLYXlkxLEgc2lsbWVrIGlzdGl5b3IgbXVzdW51ej9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJCdSBkZcSfZXIgYmVuemVyc2l6IG9sbWFsxLFkxLFyLlwiLFxuICBhZGRDb2x1bW46IFwiU8O8dHVuIGVrbGV5aW5cIixcbiAgYWRkUm93OiBcIlNhdMSxciBFa2xlXCIsXG4gIHJlbW92ZVJvdzogXCJLYWxkxLFyXCIsXG4gIGFkZFBhbmVsOiBcIlllbmkgZWtsZVwiLFxuICByZW1vdmVQYW5lbDogXCJLYWxkxLFybWFrXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlxZ95YVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlPDvHR1blwiLFxuICBtYXRyaXhfcm93OiBcIkvDvHJlayDDp2VrbWVrXCIsXG4gIHNhdmluZ0RhdGE6IFwiU29udcOnbGFyIHN1bnVjdXlhIGtheWRlZGlsaXlvciAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkJpciBoYXRhIG9sdcWfdHUgdmUgc29udcOnbGFyxLEga2F5ZGVkZW1lZGlrLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJTb251w6dsYXIgYmHFn2FyxLF5bGEga2F5ZGVkaWxkaSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRla3JhciBkZW5leWluXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzYW5peWVcIixcbiAgdGltZXJTcGVudEFsbDogXCJCdSBzYXlmYWRhIHswfSB2ZSB0b3BsYW1kYSB7MX0gaGFyY2FkxLFuxLF6LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJCdSBzYXlmYXlhIHswfSBoYXJjYWTEsW7EsXouXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVG9wbGFtZGEgezB9IGhhcmNhZMSxbsSxei5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkJ1IHNheWZheWEgezB9IC8gezF9IHZlIHRvcGxhbWRhIHsyfSAvIHszfSBoYXJjYWTEsW7EsXouXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkJ1IHNheWZheWEgezB9IC8gezF9IGhhcmNhZMSxbsSxei5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJUb3BsYW1kYSB7MH0gLyB7MX0gaGFyY2FkxLFuxLF6LlwiLFxuICBjbGVhbkNhcHRpb246IFwiVGVtaXpcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkHDp8Sxa1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEb3N5YSBzZcOnaW5cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiQnUgZG9zeWF5xLEga2FsZMSxclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkV2ZXRcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkhhecSxclwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJCdSBkb3N5YXnEsSBrYWxkxLFybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlTDvG0gZG9zeWFsYXLEsSBrYWxkxLFybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTb3J1IGJhxZ9sxLHEn8SxXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInRyXCJdID0gdHVya2lzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ0clwiXSA9IFwidMO8cmvDp2VcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdWtyYWluaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCd0LDQt9Cw0LRcIixcbiAgcGFnZU5leHRUZXh0OiBcItCU0LDQu9GWXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQl9Cw0LLQtdGA0YjQuNGC0LhcIixcbiAgcHJldmlld1RleHQ6IFwi0J/QvtC/0LXRgNC10LTQvdGW0Lkg0L/QtdGA0LXQs9C70Y/QtFwiLFxuICBlZGl0VGV4dDogXCLQoNC10LTQsNCz0YPQstCw0YLQuFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J/QvtGH0LDRgtC4XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0IbQvdGI0LUgKNCx0YPQtNGMINC70LDRgdC60LAsINC+0L/QuNGI0ZbRgtGMKVwiLFxuICBub25lSXRlbVRleHQ6IFwi0JbQvtC00LXQvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktC40LHRgNCw0YLQuCDQstGB0LVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLQvtGA0ZbQvdC60LAgezB9INC3IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgSB7MH0g0ZbQtyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCS0ZbQtNC/0L7QstGW0LvQuCDQvdCwIHswfS97MX0g0L/QuNGC0LDQvdGMXCIsXG4gIGVtcHR5U3VydmV5OiBcItCd0LXQvNCw0ZQg0LbQvtC00L3QvtCz0L4g0L/QuNGC0LDQvdC90Y8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JTRj9C60YPRlNC80L4g0JLQsNC8INC30LAg0LfQsNC/0L7QstC90LXQvdC90Y8g0LDQvdC60LXRgtC4IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi0JLQuCDQstC20LUg0L/RgNC+0YXQvtC00LjQu9C4INGG0LUg0L7Qv9C40YLRg9Cy0LDQvdC90Y8uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi0JfQsNCy0LDQvdGC0LDQttC10L3QvdGPINC+0L/QuNGC0YPQstCw0L3QvdGPLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCS0LjQsdGA0LDRgtC4Li4uXCIsXG4gIHZhbHVlOiBcItC30L3QsNGH0LXQvdC90Y9cIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQtNCw0LnRgtC1INCy0ZbQtNC/0L7QstGW0LTRjC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LTQsNC50YLQtSDQstGW0LTQv9C+0LLRltC00Ywg0YXQvtGH0LAg0LEg0L3QsCDQvtC00L3QtSDQv9C40YLQsNC90L3Rjy5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQtNCw0LnRgtC1INCy0ZbQtNC/0L7QstGW0LTRjCDQvdCwINC/0LjRgtCw0L3QvdGPINCyINC60L7QttC90L7QvNGDINGA0Y/QtNC60YMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQktGW0LTQv9C+0LLRltC00Ywg0L/QvtCy0LjQvdC90LAg0LHRg9GC0Lgg0YfQuNGB0LvQvtC8LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCR0YPQtNGMINC70LDRgdC60LAg0LLQstC10LTRltGC0Ywg0LHRltC70YzRiNC1IHswfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCR0YPQtNGMINC70LDRgdC60LAg0LLQstC10LTRltGC0Ywg0LzQtdC90YjQtSB7MH0g0YHQuNC80LLQvtC70ZbQsi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwINCy0LLQtdC00ZbRgtGMINCx0ZbQu9GM0YjQtSB7MH0g0Lgg0LzQtdC90YjQtSB7MX0g0YHQuNC80LLQvtC70ZbQsi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQt9Cw0L/QvtCy0L3RltGC0Ywg0L3QtSDQvNC10L3RiNC1IHswfSDRgNGP0LTQutGW0LIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LjQsdC10YDRltGC0Ywg0YXQvtGH0LAg0LEgezB9INCy0LDRgNGW0LDQvdGC0ZbQsi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNCx0LXRgNGW0YLRjCDQvdC1INCx0ZbQu9GM0YjQtSB7MH0g0LLQsNGA0ZbQsNC90YLRltCyLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0L3QtSDQvNC10L3RiNC1INC90ZbQtiB7MX0sINGWINC90LUg0LHRltC70YzRiNC1INC90ZbQtiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDQvdC1INC80LXQvdGI0LUg0L3RltC2IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINC/0L7QstC40L3QvdC+INCx0YPRgtC4INC90LUg0LHRltC70YzRiNC1INC90ZbQtiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINC00ZbQudGB0L3RgyDQsNC00YDQtdGB0YMg0LXQu9C10LrRgtGA0L7QvdC90L7RlyDQv9C+0YjRgtC4LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQktC40YDQsNC3IHswfSDQv9C+0LLQuNC90LXQvSDQv9C+0LLQtdGA0YLQsNGC0LggJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JfQsNC/0LjRgiDQv9C+0LLQtdGA0L3Rg9CyINC/0L7QvNC40LvQutGDICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi0JLRltC00L/QvtCy0ZbQtNGMINC90LAg0LfQsNC/0LjRgiDQv9C+0LLQtdGA0L3Rg9C70LDRgdGMINC/0L7RgNC+0LbQvdGM0L7RjiDQsNCx0L4g0LLQu9Cw0YHRgtC40LLRltGC0YwgJ3BhdGgnINCy0LrQsNC30LDQvdC+INC90LXQstGW0YDQvdC+XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KDQvtC30LzRltGAINGE0LDQudC70YMg0L3QtSDQv9C+0LLQuNC90LXQvSDQv9C10YDQtdCy0LjRidGD0LLQsNGC0LggezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0LTQsNC90ZYg0LIg0L/QvtC70LUgJ9CG0L3RiNC1J1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGIINGE0LDQudC7INC30LDQstCw0L3RgtCw0LbRg9GU0YLRjNGB0Y8uINCX0LDRh9C10LrQsNC50YLQtSDQtNC10LrRltC70YzQutCwINGB0LXQutGD0L3QtCDRliDRgdC/0YDQvtCx0YPQudGC0LUg0LfQvdC+0LLRgy5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0JfQsNCy0LDQvdGC0LDQttC10L3QvdGPLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0JLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQuyjQuCkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCk0LDQudC7INC90LUg0LLQuNCx0YDQsNC90L5cIixcbiAgY29uZmlybURlbGV0ZTogXCLQktC4INGF0L7Rh9C10YLQtSDQstC40LTQsNC70LjRgtC4INC30LDQv9C40YE/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0KbQtSDQt9C90LDRh9C10L3QvdGPINC/0L7QstC40L3QvdC+INCx0YPRgtC4INGD0L3RltC60LDQu9GM0L3QuNC8LlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtC00LDRgtC4INC60L7Qu9C+0L3QutGDXCIsXG4gIGFkZFJvdzogXCLQlNC+0LTQsNGC0Lgg0YDRj9C00L7QulwiLFxuICByZW1vdmVSb3c6IFwi0JLQuNC00LDQu9C40YLQuFwiLFxuICBhZGRQYW5lbDogXCLQlNC+0LTQsNGC0Lgg0L3QvtCy0YNcIixcbiAgcmVtb3ZlUGFuZWw6IFwi0JLQuNC00LDQu9C40YLQuFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi0JLQsNGA0ZbQsNC90YJcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQmtC+0LvQvtC90LrQsFwiLFxuICBtYXRyaXhfcm93OiBcItCg0Y/QtNC+0LpcIixcbiAgc2F2aW5nRGF0YTogXCLQoNC10LfRg9C70YzRgtCw0YLQuCDQt9Cx0LXRgNGW0LPQsNGO0YLRjNGB0Y8g0L3QsCDRgdC10YDQstC10YAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItCS0ZbQtNCx0YPQu9Cw0YHRjyDQv9C+0LzQuNC70LrQsCwg0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LHRg9CyINC30LHQtdGA0LXQttC10L3QuNC5LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfQstGD0LvRjNGC0LDRgiDRg9GB0L/RltGI0L3QviDQt9Cx0LXRgNC10LbQtdC90LjQuSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCh0L/RgNC+0LHRg9Cy0LDRgtC4INC30L3QvtCy0YNcIixcbiAgdGltZXJNaW46IFwi0YXQslwiLFxuICB0aW1lclNlYzogXCLRgdC10LpcIixcbiAgdGltZXJTcGVudEFsbDogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRliDRliB7MX0g0LfQsNCz0LDQu9C+0LwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQv9GA0L7RgtGP0LPQvtC8INGC0LXRgdGC0YMuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0LcgezF9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYg0ZYgezJ9INC3IHszfSDQtNC70Y8g0LLRgdGM0L7Qs9C+INGC0LXRgdGC0YMuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQtyB7MX0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRli5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0LcgezF9INC00LvRjyDQstGB0YzQvtCz0L4g0YLQtdGB0YLRgy5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItCe0YfQuNGB0YLQuNGC0LhcIixcbiAgY2xlYXJDYXB0aW9uOiBcItCe0YfQuNGB0YLQuNGC0LhcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JLQuNCx0LXRgNGW0YLRjCDRhNCw0LnQu1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQktC40LTQsNC70LjRgtC4INGE0LDQudC7XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0KLQsNC6XCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndGWXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCS0Lgg0LLQv9C10LLQvdC10L3Rliwg0YnQviDRhdC+0YfQtdGC0LUg0LLQuNC00LDQu9C40YLQuCDRhtC10Lkg0YTQsNC50Ls6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCS0Lgg0LLQv9C10LLQvdC10L3Rliwg0YnQviDRhdC+0YfQtdGC0LUg0LLQuNC00LDQu9C40YLQuCDQstGB0ZYg0YTQsNC50LvQuD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcItCd0LDQt9Cy0LAg0LfQsNC/0LjRgtCw0L3QvdGPXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInVhXCJdID0gdWtyYWluaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInVhXCJdID0gXCLRg9C60YDQsNGX0L3RgdGM0LrQsFwiO1xuIiwiLy9VbmNvbW1lbnQgdGhpcyBsaW5lIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZVxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB2aWV0bmFtZXNlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZXZpb3VzXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJOZXh0XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZVwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmV2aWV3XCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiT3RoZXIgKGRlc2NyaWJlKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTm9uZVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBvZiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlY29yZCB7MH0gb2YgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiLFxuICBlbXB0eVN1cnZleTogXCJUaGVyZSBpcyBubyB2aXNpYmxlIHBhZ2Ugb3IgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUaGFuayB5b3UgZm9yIGNvbXBsZXRpbmcgdGhlIHN1cnZleSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk91ciByZWNvcmRzIHNob3cgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB0aGlzIHN1cnZleS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJMb2FkaW5nIFN1cnZleS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaOG7jW4uLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHRoZSBxdWVzdGlvbi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUGxlYXNlIGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGxlYXNlIGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIGJlIG51bWVyaWMuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBsZXNzIHRoYW4gezB9IGNoYXJhY3RlcnMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUGxlYXNlIGVudGVyIG1vcmUgdGhhbiB7MH0gYW5kIGxlc3MgdGhhbiB7MX0gY2hhcmFjdGVycy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQbGVhc2UgZmlsbCBpbiBhdCBsZWFzdCB7MH0gcm93cy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudHMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBsZWFzZSBzZWxlY3Qgbm8gbW9yZSB0aGFuIHswfSB2YXJpYW50cy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxuICBudW1lcmljTWluOiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbGVzcyB0aGFuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0gc2hvdWxkIHJldHVybiAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJUaGUgcmVxdWVzdCByZXR1cm5lZCBlcnJvciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEgb3IgdGhlICdwYXRoJyBwcm9wZXJ0eSBpcyBpbmNvcnJlY3RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJUaGUgZmlsZSBzaXplIHNob3VsZCBub3QgZXhjZWVkIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBsZWFzZSBlbnRlciB0aGUgb3RoZXIgdmFsdWUuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJZb3VyIGZpbGUgaXMgdXBsb2FkaW5nLiBQbGVhc2Ugd2FpdCBzZXZlcmFsIHNlY29uZHMgYW5kIHRyeSBhZ2Fpbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTG9hZGluZy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkNob29zZSBmaWxlKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJObyBmaWxlIGNob3NlblwiLFxuICBjb25maXJtRGVsZXRlOiBcIkRvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVjb3JkP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuaXF1ZS5cIixcbiAgYWRkQ29sdW1uOiBcIkFkZCBjb2x1bW5cIixcbiAgYWRkUm93OiBcIkFkZCByb3dcIixcbiAgcmVtb3ZlUm93OiBcIlJlbW92ZVwiLFxuICBhZGRQYW5lbDogXCJBZGQgbmV3XCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJlbW92ZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtblwiLFxuICBtYXRyaXhfcm93OiBcIlJvd1wiLFxuICBzYXZpbmdEYXRhOiBcIlRoZSByZXN1bHRzIGFyZSBzYXZpbmcgb24gdGhlIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQW4gZXJyb3Igb2NjdXJyZWQgYW5kIHdlIGNvdWxkIG5vdCBzYXZlIHRoZSByZXN1bHRzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJUaGUgcmVzdWx0cyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRyeSBhZ2FpblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb24gdGhpcyBwYWdlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQ2xlYW5cIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsZWFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkNob29zZSBmaWxlXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZSB0aGlzIGZpbGVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJZZXNcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGZpbGU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgZmlsZXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJRdWVzdGlvbiBUaXRsZVwiLFxufTtcblxuLy9VbmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZS4gWW91IHNob3VsZCByZXBsYWNlIFwiZW5cIiBhbmQgZW5TdHJpbmdzIHdpdGggeW91ciBsb2NhbGUgKFwiZnJcIiwgXCJkZVwiIGFuZCBzbyBvbikgYW5kIHlvdXIgdmFyaWFibGUuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInZpXCJdID0gdmlldG5hbWVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ2aVwiXSA9IFwidmlldG5hbWVzZVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB3ZWxzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJCbGFlbm9yb2xcIixcbiAgcGFnZU5leHRUZXh0OiBcIk5lc2FmXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDd2JsaGF1XCIsXG4gIHByZXZpZXdUZXh0OiBcIlJoYWdvbHdnXCIsXG4gIGVkaXRUZXh0OiBcIkdvbHlndVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiRGVjaHJhdVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFyYWxsIChkaXNncmlmaXdjaClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkRpbVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJEZXdpcyB5IEN5ZmFuIFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiVHVkYWxlbiB7MH0gbyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkNvZm5vZCB7MH0gbyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIldlZGkgYXRlYiB7MH0vezF9IGN3ZXN0aXduXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRvZXMgZGltIG1vZGQgZ3dlbGQgdHVkYWxlbiBuYSBjaHdlc3Rpd24geW4geXIgYXJvbHdnLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkRpb2xjaCBhbSBsZW53aeKAmXIgaG9saWFkdXIhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiUnlkeWNoIGNoaSB3ZWRpIGxsZW53aeKAmXIgYXJvbHdnIGh3biB5biBiYXJvZCB5biDDtGwgZWluIGNvZm5vZGlvbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJXcnRoaeKAmW4gTGx3eXRob+KAmXIgQXJvbHdnLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkRld2lzd2NoLi4uXCIsXG4gIHZhbHVlOiBcImd3ZXJ0aFwiLFxuICByZXF1aXJlZEVycm9yOiBcIkF0ZWJ3Y2ggeSBjd2VzdGl3bi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQXRlYndjaCBvIGxlaWFmIHVuIGN3ZXN0aXduLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkF0ZWJ3Y2ggeSBjd2VzdGl5bmF1IHltIG1ob2Igcmhlcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkR5bGFp4oCZciBnd2VydGggZm9kIHluIHJoaWYuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUmhvd2NoIG8gbGVpYWYgezB9IG5vZC5cIixcbiAgdGV4dE1heExlbmd0aDogXCJSaG93Y2ggbGFpIG5hIHswfSBub2QuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUmhvd2NoIG8gbGVpYWYgezB9IG5vZCBvbmQgZGltIG13eSBuYSB7MX0uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTGxlbndjaCBvIGxlaWFmIHswfSByaGVzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJEZXdpc3djaCBvIGxlaWFmIHswfSBhbXJ5d2lvbHluLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQZWlkaXdjaCDDoiBkZXdpcyBtd3kgbmEgezB9IGFtcnl3aW9seW4uXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGZ3eSwgYeKAmXIgZmF0aCDDoiB7Mn0gbmV14oCZbiBsbGFpXCIsXG4gIG51bWVyaWNNaW46IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGZ3eVwiLFxuICBudW1lcmljTWF4OiBcIkR5bGFp4oCZciAnezB9JyBmb2QgeXIgdW4gZmF0aCDDoiB7MX0gbmV14oCZbiBsbGFpXCIsXG4gIGludmFsaWRFbWFpbDogXCJSaG93Y2ggZ3lmZWlyaWFkIGUtYm9zdCBkaWx5cy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRHlsYWnigJlyIG15bmVnaWFkIHswfSBhcndhaW4gYXQgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUm9lZGQgeSBjYWlzIHdlZGkgYXJ3YWluIGF0IHkgZ3dhbGwgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUm9lZGQgeSBjYWlzIHdlZGkgYXJ3YWluIGF0IGRkYXRhIGd3YWcgbmV1IG1hZSBwcmlvZHdlZGQgeSDigJhwYXRo4oCZIHluIGFuZ2h5d2lyIFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRkeWxhaeKAmXIgZmZlaWwgZGRpbSBib2QgeW4gZnd5IG5hIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlJob3djaCB5IGd3ZXJ0aCBhcmFsbC5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJNYWUgZWljaCBmZmVpbCB3cnRoaeKAmW4gbGx3eXRobyBpIGZ5bnkuIEFyaG9zd2NoIHljaHlkaWcgbyBlaWxpYWRhdSBhIHJob2kgY3lubmlnIGFyYWxsIGFybmkuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIldydGhp4oCZbiBsbHd5dGhvLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiRGV3aXN3Y2ggZmZlaWwoaWF1KS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiSGViIGRkZXdpcyBmZmVpbCBcIixcbiAgY29uZmlybURlbGV0ZTogXCJZZHljaCBjaGkgYW0gZGRpbGV14oCZciBjb2Zub2Q/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRHlsYWnigJlyIGd3ZXJ0aCBod24gZm9kIHluIHVuaWdyeXcuXCIsXG4gIGFkZENvbHVtbjogXCJZY2h3YW5lZ3UgY29sb2ZuIFwiLFxuICBhZGRSb3c6IFwiWWNod2FuZWd1IHJoZXNcIixcbiAgcmVtb3ZlUm93OiBcIlR5bm51XCIsXG4gIGFkZFBhbmVsOiBcIlljaHdhbmVndSBv4oCZciBuZXd5ZGRcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVHlubnVcIixcbiAgY2hvaWNlc19JdGVtOiBcImVpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb2ZuXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmhlc1wiLFxuICBzYXZpbmdEYXRhOiBcIk1hZeKAmXIgY2FubHluaWFkYXXigJluIGNhZWwgZXUgY2FkdyBhciB5IGd3ZWlueWRkLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJSb2VkZCBnd2FsbCBhIGRvZWRkIGRpbSBtb2RkIGNhZHfigJlyIGNhbmx5bmlhZGF1LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJXZWRpIGxsd3lkZG8gaSBnYWR34oCZciBjYW5seW5pYWRhdSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlJob3djaCBneW5uaWcgYXJhbGwgYXJuaVwiLFxuICB0aW1lck1pbjogXCJtdW5cIixcbiAgdGltZXJTZWM6IFwiZWlsXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IGFyIHkgZHVkYWxlbiBob24gYSB7MX0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gYXIgeSBkdWRhbGVuIGhvbi5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlJ5ZHljaCBjaGkgd2VkaSB0cmV1bGlvIHswfSBvIHsxfSBhciB5IGR1ZGFsZW4gaG9uIGEgezJ9IG8gezN9IGd5ZGHigJlpIGdpbHlkZC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGFyIHkgZHVkYWxlbiBob24uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGd5ZGHigJlpIGdpbHlkZC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkdsYW5oYXVcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsaXJpb1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEZXdpc3djaCBmZmVpbCBcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVHlubnXigJlyIGZmZWlsIGhvbiBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJJYXduXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOYVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJZZHljaCBjaGnigJluIHNpxbVyIGVpY2ggYm9kIGFtIGR5bm514oCZciBmZmVpbCBob246IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIllkeWNoIGNoaeKAmW4gc2nFtXIgZWljaCBib2QgYW0gZHlubnUgcG9iIGZmZWlsP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGVpdGwgeSBDd2VzdGl3biBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3lcIl0gPSB3ZWxzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJjeVwiXSA9IFwiY3ltcmFlZ1wiO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIG1hdHJpeCBiYXNlIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWw8VFJvdywgVENvbHVtbj4gZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByb3RlY3RlZCBmaWx0ZXJlZENvbHVtbnM6IEFycmF5PFRDb2x1bW4+O1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRSb3dzOiBBcnJheTxJdGVtVmFsdWU+O1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PFRSb3c+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGdlbmVyYXRlZFRvdGFsUm93OiBUUm93ID0gbnVsbDtcbiAgcHVibGljIHZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuXG4gIHByb3RlY3RlZCBjcmVhdGVDb2x1bW5WYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVJdGVtVmFsdWVzKFwiY29sdW1uc1wiKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IG51bGw7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jcmVhdGVDb2x1bW5WYWx1ZXMoKTtcbiAgICB0aGlzLnJvd3MgPSB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJyb3dzXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4YmFzZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGhpZGUgdGFibGUgaGVhZGVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNvbHVtbnMuIEEgY29sdW1uIGhhcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCB0ZXh0XG4gICAqL1xuICBnZXQgY29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uc1wiKTtcbiAgfVxuICBzZXQgY29sdW1ucyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNcIiwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuICEhdGhpcy5maWx0ZXJlZENvbHVtbnMgPyB0aGlzLmZpbHRlcmVkQ29sdW1ucyA6IHRoaXMuY29sdW1ucztcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygcm93cy4gQSByb3cgaGFzIGEgdmFsdWUgYW5kIGFuIG9wdGlvbmFsIHRleHRcbiAgICovXG4gIGdldCByb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIpO1xuICB9XG4gIHNldCByb3dzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdmFyIG5ld1Jvd3MgPSB0aGlzLnByb2Nlc3NSb3dzT25TZXQobmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgbmV3Um93cyk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIHByb3RlY3RlZCBwcm9jZXNzUm93c09uU2V0KG5ld1Jvd3M6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gbmV3Um93cztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVJvd3MoKTogQXJyYXk8VFJvdz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2aXNpYmxlIHJvd3MgYXMgbW9kZWwgb2JqZWN0cy5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PFRSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlUm93cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIEl0IHJ1bnMgYWdhaW5zdCBlYWNoIHJvdyBpdGVtIGFuZCBpZiBmb3IgdGhpcyBpdGVtIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgaXRlbSBpcyB2aXNpYmxlIG90aGVyd2lzZSB0aGUgaXRlbSBiZWNvbWVzIGludmlzaWJsZS4gUGxlYXNlIHVzZSB7aXRlbX0gdG8gZ2V0IHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUgaW4gdGhlIGV4cHJlc3Npb24uXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3NWaXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3NWaXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCBjb2x1bW4gaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgdmlzaWJsZSBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBpbnZpc2libGUuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIHJvd3NWaXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgY29sdW1uc1Zpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zVmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uc1Zpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNWaXNpYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZmlsdGVySXRlbXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKSB7XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgIXRoaXMuZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Db2x1bW5zQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIHByb3RlY3RlZCBzaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUm93c0FzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1bkl0ZW1zQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZFZpc2libGVSb3dzID0gbnVsbDtcbiAgICBpZiAoISF0aGlzLmZpbHRlcmVkUm93cyAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICBvbGRWaXNpYmxlUm93cyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvbGRWaXNpYmxlUm93cy5wdXNoKHRoaXMuZmlsdGVyZWRSb3dzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGhhc0NoYW5nZXMgPVxuICAgICAgdGhpcy5oYXNSb3dzQXNJdGVtcygpICYmIHRoaXMucnVuQ29uZGl0aW9uc0ZvclJvd3ModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB2YXIgaGFzQ29sdW1uc0NoYW5nZWQgPSB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaGFzQ2hhbmdlcyA9IGhhc0NvbHVtbnNDaGFuZ2VkIHx8IGhhc0NoYW5nZXM7XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgICB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbiAmJlxuICAgICAgICAoISF0aGlzLmZpbHRlcmVkQ29sdW1ucyB8fCAhIXRoaXMuZmlsdGVyZWRSb3dzKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICghIW9sZFZpc2libGVSb3dzKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZU5ld1Zpc2libGVSb3dzVmFsdWVzKG9sZFZpc2libGVSb3dzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICBpZiAoaGFzQ29sdW1uc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyR2VuZXJhdGVkUm93cygpIHtcbiAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JSb3dzKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHNob3dJbnZpc2liaWxlID1cbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nO1xuICAgIHZhciBydW5uZXIgPVxuICAgICAgIXNob3dJbnZpc2liaWxlICYmICEhdGhpcy5yb3dzVmlzaWJsZUlmXG4gICAgICAgID8gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnJvd3NWaXNpYmxlSWYpXG4gICAgICAgIDogbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMucm93cyxcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzLFxuICAgICAgcnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgICFzaG93SW52aXNpYmlsZVxuICAgICk7XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHVzZUNvbHVtbnNFeHByZXNzaW9uID1cbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiYgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB2YXIgcnVubmVyID1cbiAgICAgIHVzZUNvbHVtbnNFeHByZXNzaW9uICYmICEhdGhpcy5jb2x1bW5zVmlzaWJsZUlmXG4gICAgICAgID8gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmNvbHVtbnNWaXNpYmxlSWYpXG4gICAgICAgIDogbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IFtdO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIDxhbnk+dGhpcy5maWx0ZXJlZENvbHVtbnMsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5zaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKClcbiAgICApO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkQ29sdW1ucy5sZW5ndGggPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XG4gIH1cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbCA9IG51bGw7XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIHZhciBjb2x1bW5zID0gISF0aGlzLmZpbHRlcmVkQ29sdW1ucyA/IHRoaXMuZmlsdGVyZWRDb2x1bW5zIDogdGhpcy5jb2x1bW5zO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkgJiZcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKGNvbHVtbnMsIHZhbFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXdWYWwgPT0gbnVsbCkgbmV3VmFsID0ge307XG4gICAgICAgICg8YW55Pm5ld1ZhbClba2V5XSA9IHZhbFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm47XG4gICAgdmFyIG5ld0RhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHJvd3NbaV0udmFsdWU7XG4gICAgICBpZiAoISFuZXdEYXRhW2tleV0gJiYgIXJvd3NbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdEYXRhW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3RGF0YSwgdGhpcy52YWx1ZSkpIHJldHVybjtcbiAgICB0aGlzLnZhbHVlID0gbmV3RGF0YTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVOZXdWaXNpYmxlUm93c1ZhbHVlcyhvbGRWaXNpYmxlUm93czogYW55KSB7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgdmFyIHZhbCA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkgJiZcbiAgICAgICAgIUl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShvbGRWaXNpYmxlUm93cywga2V5KVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsKSBuZXdWYWx1ZSA9IHt9O1xuICAgICAgICAoPGFueT5uZXdWYWx1ZSlba2V5XSA9IHZhbFtrZXldO1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibWF0cml4YmFzZVwiLFxuICBbXG4gICAgXCJjb2x1bW5zVmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICB7IG5hbWU6IFwic2hvd0hlYWRlcjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgXSxcbiAgdW5kZWZpbmVkLFxuICBcInF1ZXN0aW9uXCJcbik7XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7XG4gIElQYWdlLFxuICBJUGFuZWwsXG4gIElFbGVtZW50LFxuICBJU3VydmV5RWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxufSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IERyYWdEcm9wSW5mbywgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuLyoqXG4gKiBUaGUgcGFnZSBvYmplY3QuIEl0IGhhcyBlbGVtZW50cyBjb2xsZWN0aW9uLCB0aGF0IGNvbnRhaW5zIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICovXG5leHBvcnQgY2xhc3MgUGFnZU1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJUGFnZSB7XG4gIHByaXZhdGUgaGFzU2hvd25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubG9jVGl0bGUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICBpZiAoc2VsZi5udW0gPiAwKSByZXR1cm4gc2VsZi5udW0gKyBcIi4gXCIgKyB0ZXh0O1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibmF2aWdhdGlvblRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIiwgdGhpcywgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYWdlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUGFnZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2hvdyB0aXRsZSBpbiBuYXZpZ2F0aW9uIGJ1dHRvbnMuIElmIHRoZSB2YWx1ZSBpcyBlbXB0eSB0aGVuIHBhZ2UgbmFtZSBpcyB1c2VkLlxuICAgKiBAc2VlIHN1cnZleS5wcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGlvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibmF2aWdhdGlvblRpdGxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmF2aWdhdGlvblRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uVGl0bGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY05hdmlnYXRpb25UaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uVGl0bGVcIik7XG4gIH1cbiAgcHVibGljIGdldCBuYXZpZ2F0aW9uRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0aW9uRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhc3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFzc2VkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhc3NlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXNzZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnN1cnZleS5wYWdlcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIGlmICh0aGlzLndhc1Nob3duKSByZXR1cm47XG4gICAgc3VwZXIub25GaXJzdFJlbmRlcmluZygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdmlzaWJsZSBpbmRleCBvZiB0aGUgcGFnZS4gSXQgaGFzIHZhbHVlcyBmcm9tIDAgdG8gdmlzaWJsZSBwYWdlIGNvdW50IC0gMS5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC52aXNpYmxlUGFnZXNcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5wYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXJGaXJzdFJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnZpc2libGVJbmRleCA9PSAwO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBwYWdlIGlzIHN0YXJ0ZWQgcGFnZSBpbiB0aGUgc3VydmV5LiBJdCBjYW4gYmUgc2hvd24gb24gdGhlIHN0YXJ0IG9ubHkgYW5kIHRoZSBlbmQtdXNlciBjb3VsZCBub3QgY29tZWJhY2sgdG8gaXQgYWZ0ZXIgaXQgcGFzc2VkIGl0LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzUGFnZVN0YXJ0ZWQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGNDc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgdmFyIGNzcyA9IHRoaXMuY3NzO1xuICAgIHZhciBjbGFzc2VzID0geyBwYWdlOiB7fSwgcGFnZVRpdGxlOiBcIlwiLCBwYWdlRGVzY3JpcHRpb246IFwiXCIsIHJvdzogXCJcIiB9O1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5wYWdlLCBjc3MucGFnZSk7XG4gICAgaWYgKCEhY3NzLnBhZ2VUaXRsZSkge1xuICAgICAgY2xhc3Nlcy5wYWdlVGl0bGUgPSBjc3MucGFnZVRpdGxlO1xuICAgIH1cbiAgICBpZiAoISFjc3MucGFnZURlc2NyaXB0aW9uKSB7XG4gICAgICBjbGFzc2VzLnBhZ2VEZXNjcmlwdGlvbiA9IGNzcy5wYWdlRGVzY3JpcHRpb247XG4gICAgfVxuICAgIGlmICghIWNzcy5yb3cpIHtcbiAgICAgIGNsYXNzZXMucm93ID0gY3NzLnJvdztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS51cGRhdGVQYWdlQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbiAgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmdldElzUGFnZVZpc2libGUoZXhjZXB0aW9uUXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBnZXQgbnVtKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJudW1cIiwgLTEpO1xuICB9XG4gIHB1YmxpYyBzZXQgbnVtKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubnVtID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm51bVwiLCB2YWwpO1xuICAgIHRoaXMub25OdW1DaGFuZ2VkKHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwiaGlkZVwiIHRvIG1ha2UgXCJQcmV2XCIsIFwiTmV4dFwiIGFuZCBcIkNvbXBsZXRlXCIgYnV0dG9ucyBhcmUgaW52aXNpYmxlIGZvciB0aGlzIHBhZ2UuIFNldCB0aGlzIHByb3BlcnR5IHRvIFwic2hvd1wiIHRvIG1ha2UgdGhlc2UgYnV0dG9ucyB2aXNpYmxlLCBldmVuIGlmIHN1cnZleSBzaG93TmF2aWdhdGlvbkJ1dHRvbnMgcHJvcGVydHkgaXMgZmFsc2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZS5zaG93TmF2aWdhdGlvbkJ1dHRvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLCB2YWwudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSByZXR1cm5zIHRydWUsIGlmIHRoZSBwYWdlIGhhcyBiZWVuIHNob3duIHRvIHRoZSBlbmQtdXNlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2FzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzU2hvd25WYWx1ZTtcbiAgfVxuICBnZXQgaGFzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2FzU2hvd247XG4gIH1cbiAgcHVibGljIHNldFdhc1Nob3duKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy5oYXNTaG93blZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5oYXNTaG93blZhbHVlID0gdmFsO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIGlmICh2YWwgPT0gdHJ1ZSAmJiB0aGlzLmFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWQpIHtcbiAgICAgIHRoaXMucmFuZG9taXplRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1JhbmRvbWl6aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcmFuZG9taXplRWxlbWVudHMoKSB7XG4gICAgaWYgKHRoaXMuaXNSYW5kb21pemluZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSYW5kb21pemluZyA9IHRydWU7XG4gICAgdmFyIG9sZEVsZW1lbnRzID0gW107XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRFbGVtZW50cy5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gICAgdmFyIG5ld0VsZW1lbnRzID0gSGVscGVycy5yYW5kb21pemVBcnJheTxJRWxlbWVudD4ob2xkRWxlbWVudHMpO1xuICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKDAsIHRoaXMuZWxlbWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnB1c2gobmV3RWxlbWVudHNbaV0pO1xuICAgIH1cbiAgICB0aGlzLmlzUmFuZG9taXppbmcgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdHJ1ZSwgaWYgdGhlIGVsZW1lbnRzIGFyZSByYW5kb21pemVkIG9uIHRoZSBwYWdlXG4gICAqIEBzZWUgaGFzU2hvd25cbiAgICogQHNlZSBxdWVzdGlvbnNPcmRlclxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uc09yZGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9yZGVyID1cbiAgICAgIHRoaXMucXVlc3Rpb25zT3JkZXIgPT0gXCJkZWZhdWx0XCIgJiYgdGhpcy5zdXJ2ZXlcbiAgICAgICAgPyB0aGlzLnN1cnZleS5xdWVzdGlvbnNPcmRlclxuICAgICAgICA6IHRoaXMucXVlc3Rpb25zT3JkZXI7XG4gICAgcmV0dXJuIG9yZGVyID09IFwicmFuZG9tXCI7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJhbmRvbWl6ZSBxdWVzdGlvbnMuIFNldCBpdCB0byAncmFuZG9tJyB0byByYW5kb21pemUgcXVlc3Rpb25zLCAnaW5pdGlhbCcgdG8ga2VlcCB0aGVtIGluIHRoZSBzYW1lIG9yZGVyIG9yICdkZWZhdWx0JyB0byB1c2UgdGhlIFN1cnZleSBxdWVzdGlvbnNPcmRlciBwcm9wZXJ0eVxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uc09yZGVyXG4gICAqIEBzZWUgYXJlUXVlc3Rpb25zUmFuZG9taXplZFxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbnNPcmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT3JkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbnNPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gc2Nyb2xsIHRvIHRoZSBwYWdlIHRvcC5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb1RvcCgpIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc2Nyb2xsRWxlbWVudFRvVG9wKHRoaXMsIG51bGwsIHRoaXMsIHRoaXMuaWQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGltZSBpbiBzZWNvbmRzIGVuZC11c2VyIHNwZW50IG9uIHRoaXMgcGFnZVxuICAgKi9cbiAgcHVibGljIHRpbWVTcGVudCA9IDA7XG4gIC8vIHB1YmxpYyBnZXQgdGltZVNwZW50KCk6IG51bWJlciB7XG4gIC8vICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCAwKTtcbiAgLy8gfVxuICAvLyBwdWJsaWMgc2V0IHRpbWVTcGVudCh2YWw6IG51bWJlcikge1xuICAvLyAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCB2YWwpO1xuICAvLyB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBwYW5lbHMgaW4gdGhlIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgdGhpcy5hZGRQYW5lbHNJbnRvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQtdXNlciBoYXMgdG8gY29tcGxldGUgdGhlIHBhZ2UuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIHRoZSBlbmQtdXNlciBoYXMgdW5saW1pdGVkIG51bWJlciBvZiB0aW1lIHRvIGZpbmlzaCB0aGUgcGFnZS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTnVtQ2hhbmdlZCh2YWx1ZTogbnVtYmVyKSB7fVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc1JhbmRvbWl6aW5nKSByZXR1cm47XG4gICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYWdlVmlzaWJpbGl0eUNoYW5nZWQodGhpcywgdGhpcy5pc1Zpc2libGUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvO1xuICBwdWJsaWMgZHJhZ0Ryb3BTdGFydChcbiAgICBzcmM6IElFbGVtZW50LFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTFcbiAgKSB7XG4gICAgdGhpcy5kcmFnRHJvcEluZm8gPSBuZXcgRHJhZ0Ryb3BJbmZvKHNyYywgdGFyZ2V0LCBuZXN0ZWRQYW5lbERlcHRoKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BNb3ZlVG8oXG4gICAgZGVzdGluYXRpb246IElTdXJ2ZXlFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNFZGdlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wSW5mbykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgdGhpcy5kcmFnRHJvcEluZm8uaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UgPSBpc0VkZ2U7XG4gICAgdGhpcy5jb3JyZWN0RHJhZ0Ryb3BJbmZvKHRoaXMuZHJhZ0Ryb3BJbmZvKTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wU291cmNlKCkgfHwgIXRoaXMuZHJhZ0Ryb3BBbGxvd0Zyb21TdXJ2ZXkoKSkge1xuICAgICAgaWYgKCEhdGhpcy5kcmFnRHJvcEluZm8uc291cmNlKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsIHJvdyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXQodGhpcy5kcmFnRHJvcEluZm8pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgY29ycmVjdERyYWdEcm9wSW5mbyhkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbykge1xuICAgIGlmICghZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKSByZXR1cm47XG4gICAgdmFyIHBhbmVsID0gKDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pLmlzUGFuZWxcbiAgICAgID8gPElQYW5lbD4oPGFueT5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pXG4gICAgICA6IG51bGw7XG4gICAgaWYgKCFwYW5lbCkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgICFkcmFnRHJvcEluZm8udGFyZ2V0LmlzTGF5b3V0VHlwZVN1cHBvcnRlZChwYW5lbC5nZXRDaGlsZHJlbkxheW91dFR5cGUoKSlcbiAgICApIHtcbiAgICAgIGRyYWdEcm9wSW5mby5pc0VkZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWxsb3dGcm9tU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHZhciBkZXN0ID0gdGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCFkZXN0IHx8ICF0aGlzLnN1cnZleSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIGluc2VydEJlZm9yZTogSUVsZW1lbnQgPSBudWxsO1xuICAgIHZhciBpbnNlcnRBZnRlcjogSUVsZW1lbnQgPSBudWxsO1xuICAgIHZhciBwYXJlbnQgPVxuICAgICAgZGVzdC5pc1BhZ2UgfHwgKCF0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UgJiYgKDxJRWxlbWVudD5kZXN0KS5pc1BhbmVsKVxuICAgICAgICA/IGRlc3RcbiAgICAgICAgOiAoPElFbGVtZW50PmRlc3QpLnBhcmVudDtcbiAgICBpZiAoIWRlc3QuaXNQYWdlKSB7XG4gICAgICB2YXIgY29udGFpbmVyID0gKDxJRWxlbWVudD5kZXN0KS5wYXJlbnQ7XG4gICAgICBpZiAoISFjb250YWluZXIpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gKDxQYW5lbE1vZGVsQmFzZT5jb250YWluZXIpLmVsZW1lbnRzO1xuICAgICAgICB2YXIgaW5kZXggPSBlbGVtZW50cy5pbmRleE9mKDxJRWxlbWVudD5kZXN0KTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBpbnNlcnRCZWZvcmUgPSA8SUVsZW1lbnQ+ZGVzdDtcbiAgICAgICAgICBpbnNlcnRBZnRlciA9IDxJRWxlbWVudD5kZXN0O1xuICAgICAgICAgIGlmICh0aGlzLmRyYWdEcm9wSW5mby5pc0JvdHRvbSkge1xuICAgICAgICAgICAgaW5zZXJ0QmVmb3JlID1cbiAgICAgICAgICAgICAgaW5kZXggPCBlbGVtZW50cy5sZW5ndGggLSAxID8gZWxlbWVudHNbaW5kZXggKyAxXSA6IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc2VydEFmdGVyID0gaW5kZXggPiAwID8gZWxlbWVudHNbaW5kZXggLSAxXSA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgdGFyZ2V0OiB0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICBzb3VyY2U6IHRoaXMuZHJhZ0Ryb3BJbmZvLnNvdXJjZSxcbiAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgaW5zZXJ0QWZ0ZXI6IGluc2VydEFmdGVyLFxuICAgICAgaW5zZXJ0QmVmb3JlOiBpbnNlcnRCZWZvcmUsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BGaW5pc2goaXNDYW5jZWw6IGJvb2xlYW4gPSBmYWxzZSk6IElFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BJbmZvKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuZHJhZ0Ryb3BJbmZvLnRhcmdldDtcbiAgICB2YXIgcm93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3codGFyZ2V0KTtcbiAgICB2YXIgdGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdEcm9wR2V0RWxlbWVudEluZGV4KHRhcmdldCwgcm93KTtcbiAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyh0YXJnZXQsIHJvdyk7XG4gICAgaWYgKCFpc0NhbmNlbCAmJiAhIXJvdykge1xuICAgICAgdmFyIHNyYyA9IHRoaXMuZHJhZ0Ryb3BJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBpc1NhbWVQYW5lbCA9IGZhbHNlO1xuICAgICAgaWYgKCEhc3JjICYmICEhc3JjLnBhcmVudCkge1xuICAgICAgICBpc1NhbWVQYW5lbCA9IHJvdy5wYW5lbCA9PSBzcmMucGFyZW50O1xuICAgICAgICBpZiAoaXNTYW1lUGFuZWwpIHtcbiAgICAgICAgICByb3cucGFuZWwuZHJhZ0Ryb3BNb3ZlRWxlbWVudChzcmMsIHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgICAgIHRhcmdldEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3JjLnBhcmVudC5yZW1vdmVFbGVtZW50KHNyYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXRJbmRleCA+IC0xKSB7XG4gICAgICAgIHJvdy5wYW5lbC5hZGRFbGVtZW50KHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRyYWdEcm9wSW5mbyA9IG51bGw7XG4gICAgcmV0dXJuICFpc0NhbmNlbCA/IHRhcmdldCA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEdldEVsZW1lbnRJbmRleChcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIHJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBudW1iZXIge1xuICAgIGlmICghcm93KSByZXR1cm4gLTE7XG4gICAgdmFyIGluZGV4ID0gcm93LmVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcbiAgICBpZiAocm93LmluZGV4ID09IDApIHJldHVybiBpbmRleDtcbiAgICB2YXIgcHJldlJvdyA9IHJvdy5wYW5lbC5yb3dzW3Jvdy5pbmRleCAtIDFdO1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZSb3cuZWxlbWVudHNbcHJldlJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gaW5kZXggKyByb3cucGFuZWwuZWxlbWVudHMuaW5kZXhPZihwcmV2RWxlbWVudCkgKyAxO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCk6IGJvb2xlYW4ge1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgZGVzdGluYXRpb24uaXNQYWdlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcENhbkRyb3BDb3JlKFxuICAgICAgdGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0LFxuICAgICAgPElFbGVtZW50PmRlc3RpbmF0aW9uXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcFNvdXJjZSgpOiBib29sZWFuIHtcbiAgICB2YXIgc291cmNlID0gdGhpcy5kcmFnRHJvcEluZm8uc291cmNlO1xuICAgIGlmICghc291cmNlKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgZGVzdGluYXRpb24gPSA8SUVsZW1lbnQ+dGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wQ2FuRHJvcENvcmUoc291cmNlLCBkZXN0aW5hdGlvbikpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcENhbkRyb3BOb3ROZXh0KFxuICAgICAgc291cmNlLFxuICAgICAgZGVzdGluYXRpb24sXG4gICAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UsXG4gICAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0JvdHRvbVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcENhbkRyb3BDb3JlKFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgZGVzdGluYXRpb246IElFbGVtZW50XG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGVzdGluYXRpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmRyYWdEcm9wSXNTYW1lRWxlbWVudChkZXN0aW5hdGlvbiwgdGFyZ2V0KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0YXJnZXQuaXNQYW5lbCkge1xuICAgICAgdmFyIHBubCA9IDxQYW5lbE1vZGVsQmFzZT4oPGFueT50YXJnZXQpO1xuICAgICAgaWYgKFxuICAgICAgICBwbmwuY29udGFpbnNFbGVtZW50KGRlc3RpbmF0aW9uKSB8fFxuICAgICAgICAhIXBubC5nZXRFbGVtZW50QnlOYW1lKGRlc3RpbmF0aW9uLm5hbWUpXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcENhbkRyb3BOb3ROZXh0KFxuICAgIHNvdXJjZTogSUVsZW1lbnQsXG4gICAgZGVzdGluYXRpb246IElFbGVtZW50LFxuICAgIGlzRWRnZTogYm9vbGVhbixcbiAgICBpc0JvdHRvbTogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWRlc3RpbmF0aW9uIHx8IChkZXN0aW5hdGlvbi5pc1BhbmVsICYmICFpc0VkZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIHNvdXJjZS5wYXJlbnQgPT09IFwidW5kZWZpbmVkXCIgfHwgc291cmNlLnBhcmVudCAhPT0gZGVzdGluYXRpb24ucGFyZW50KSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcG5sID0gPFBhbmVsTW9kZWxCYXNlPnNvdXJjZS5wYXJlbnQ7XG4gICAgdmFyIHNyY0luZGV4ID0gcG5sLmVsZW1lbnRzLmluZGV4T2Yoc291cmNlKTtcbiAgICB2YXIgZGVzdEluZGV4ID0gcG5sLmVsZW1lbnRzLmluZGV4T2YoZGVzdGluYXRpb24pO1xuICAgIGlmIChkZXN0SW5kZXggPCBzcmNJbmRleCAmJiAhaXNCb3R0b20pIGRlc3RJbmRleC0tO1xuICAgIGlmIChpc0JvdHRvbSkgZGVzdEluZGV4Kys7XG4gICAgcmV0dXJuIHNyY0luZGV4IDwgZGVzdEluZGV4XG4gICAgICA/IGRlc3RJbmRleCAtIHNyY0luZGV4ID4gMVxuICAgICAgOiBzcmNJbmRleCAtIGRlc3RJbmRleCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGRyYWdEcm9wSXNTYW1lRWxlbWVudChlbDE6IElFbGVtZW50LCBlbDI6IElFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsMSA9PSBlbDIgfHwgZWwxLm5hbWUgPT0gZWwyLm5hbWU7XG4gIH1cbiAgcHVibGljIGVuc3VyZVJvd3NWaXNpYmlsaXR5KCkge1xuICAgIHN1cGVyLmVuc3VyZVJvd3NWaXNpYmlsaXR5KCk7XG4gICAgdGhpcy5nZXRQYW5lbHMoKS5mb3JFYWNoKChwYW5lbCkgPT4gcGFuZWwuZW5zdXJlUm93c1Zpc2liaWxpdHkoKSk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYWdlXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLFxuICAgICAgZGVmYXVsdDogXCJpbmhlcml0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJpbmhlcml0XCIsIFwic2hvd1wiLCBcImhpZGVcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInF1ZXN0aW9uc09yZGVyXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1heFRpbWVUb0ZpbmlzaDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25UaXRsZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmouc3VydmV5ICYmIG9iai5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlID09PSBcImJ1dHRvbnNcIjtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTmF2aWdhdGlvblRpdGxlXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmouc3VydmV5ICYmIG9iai5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlID09PSBcImJ1dHRvbnNcIjtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGl0bGU6dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUGFnZU1vZGVsKCk7XG4gIH0sXG4gIFwicGFuZWxiYXNlXCJcbik7XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyLCBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge1xuICBJU3VydmV5SW1wbCxcbiAgSVBhZ2UsXG4gIElQYW5lbCxcbiAgSUNvbmRpdGlvblJ1bm5lcixcbiAgSUVsZW1lbnQsXG4gIElTdXJ2ZXlFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIElTdXJ2ZXlFcnJvck93bmVyLFxuICBJVGl0bGVPd25lcixcbiAgSVByb2dyZXNzSW5mbyxcbiAgSVN1cnZleSxcbiAgSUZpbmRFbGVtZW50LFxufSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9zdXJ2ZXktZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgRWxlbWVudEZhY3RvcnksIFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IE9uZUFuc3dlclJlcXVpcmVkRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgZmluZFNjcm9sbGFibGVQYXJlbnQsIGlzRWxlbWVudFZpc2libGUgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcblxuZXhwb3J0IGNsYXNzIERyYWdEcm9wSW5mbyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzb3VyY2U6IElFbGVtZW50LFxuICAgIHB1YmxpYyB0YXJnZXQ6IElFbGVtZW50LFxuICAgIHB1YmxpYyBuZXN0ZWRQYW5lbERlcHRoOiBudW1iZXIgPSAtMVxuICApIHt9XG4gIHB1YmxpYyBkZXN0aW5hdGlvbjogSVN1cnZleUVsZW1lbnQ7XG4gIHB1YmxpYyBpc0JvdHRvbTogYm9vbGVhbjtcbiAgcHVibGljIGlzRWRnZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUm93TW9kZWwgZXh0ZW5kcyBCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcm93Q291bnRlciA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Um93SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwcl9cIiArIFF1ZXN0aW9uUm93TW9kZWwucm93Q291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBfc2Nyb2xsYWJsZVBhcmVudDogYW55ID0gdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgX3VwZGF0ZVZpc2liaWxpdHk6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHN0YXJ0TGF6eVJlbmRlcmluZyhcbiAgICByb3dDb250YWluZXJEaXY6IEhUTUxFbGVtZW50LFxuICAgIGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyID0gZmluZFNjcm9sbGFibGVQYXJlbnRcbiAgKSB7XG4gICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCA9IGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyKHJvd0NvbnRhaW5lckRpdik7XG4gICAgdGhpcy5pc05lZWRSZW5kZXIgPSAhKFxuICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LmNsaWVudEhlaWdodFxuICAgICk7XG4gICAgLy8gaWYgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgaXMgaHRtbCB0aGUgc2Nyb2xsIGV2ZW50IGlzbid0IGZpcmVkLCBzbyB3ZSBzaG91bGQgdXNlIHdpbmRvd1xuICAgIGlmICh0aGlzLl9zY3JvbGxhYmxlUGFyZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPSB3aW5kb3c7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc05lZWRSZW5kZXIpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgPSAoKSA9PiB7XG4gICAgICAgIHZhciBpc1Jvd0NvbnRhaW5lckRpdlZpc2libGUgPSBpc0VsZW1lbnRWaXNpYmxlKHJvd0NvbnRhaW5lckRpdiwgNTApO1xuICAgICAgICBpZiAoIXRoaXMuaXNOZWVkUmVuZGVyICYmIGlzUm93Q29udGFpbmVyRGl2VmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNOZWVkUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCAmJlxuICAgICAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5hZGRFdmVudExpc3RlbmVyXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgIFwic2Nyb2xsXCIsXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGVuc3VyZVZpc2liaWxpdHkoKSB7XG4gICAgaWYgKCEhdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSkge1xuICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RvcExhenlSZW5kZXJpbmcoKSB7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLl9zY3JvbGxhYmxlUGFyZW50ICYmXG4gICAgICAhIXRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgJiZcbiAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgKSB7XG4gICAgICB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwic2Nyb2xsXCIsXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHVibGljIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pZFZhbHVlID0gUXVlc3Rpb25Sb3dNb2RlbC5nZXRSb3dJZCgpO1xuICAgIHRoaXMudmlzaWJsZSA9IHBhbmVsLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiZWxlbWVudHNcIik7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZpc2libGVFbGVtZW50c1wiKTtcbiAgfVxuICBwcml2YXRlIGlzTGF6eVJlbmRlcmluZ1ZhbHVlOiBib29sZWFuO1xuICBwdWJsaWMgc2V0SXNMYXp5UmVuZGVyaW5nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNMYXp5UmVuZGVyaW5nVmFsdWUgPSB2YWw7XG4gICAgdGhpcy5pc05lZWRSZW5kZXIgPSAhdmFsO1xuICB9XG4gIHB1YmxpYyBpc0xhenlSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXp5UmVuZGVyaW5nVmFsdWUgPT09IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbGVtZW50c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlRWxlbWVudHNcIik7XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc05lZWRSZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzbmVlZHJlbmRlclwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzTmVlZFJlbmRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc25lZWRyZW5kZXJcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlVmlzaWJsZSgpIHtcbiAgICB0aGlzLnZpc2libGUgPSB0aGlzLmNhbGNWaXNpYmxlKCk7XG4gICAgdGhpcy5zZXRXaWR0aCgpO1xuICB9XG4gIHB1YmxpYyBhZGRFbGVtZW50KHE6IElFbGVtZW50KSB7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKHEpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbC5yb3dzLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRXaWR0aCgpIHtcbiAgICB2YXIgdmlzQ291bnQgPSB0aGlzLnZpc2libGVFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKHZpc0NvdW50ID09IDApIHJldHVybjtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgdmFyIHByZVNldFdpZHRoRWxlbWVudHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICB0aGlzLnNldEVsZW1lbnRNYXhNaW5XaWR0aChlbCk7XG5cbiAgICAgIGlmIChlbC5pc1Zpc2libGUpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRFbGVtZW50V2lkdGgoZWwpO1xuICAgICAgICBpZiAoISF3aWR0aCkge1xuICAgICAgICAgIGVsLnJlbmRlcldpZHRoID0gdGhpcy5nZXRSZW5kZXJlZFdpZHRoRnJvbVdpZHRoKHdpZHRoKTtcbiAgICAgICAgICBwcmVTZXRXaWR0aEVsZW1lbnRzLnB1c2goZWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsLnJpZ2h0SW5kZW50ID0gY291bnRlciA8IHZpc0NvdW50IC0gMSA/IDEgOiAwO1xuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5yZW5kZXJXaWR0aCA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIGlmICghZWwuaXNWaXNpYmxlIHx8IHByZVNldFdpZHRoRWxlbWVudHMuaW5kZXhPZihlbCkgPiAtMSkgY29udGludWU7XG4gICAgICBpZiAocHJlU2V0V2lkdGhFbGVtZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgICBlbC5yZW5kZXJXaWR0aCA9ICgxMDAgLyB2aXNDb3VudCkudG9GaXhlZCg2KSArIFwiJVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwucmVuZGVyV2lkdGggPSB0aGlzLmdldFJlbmRlcmVkQ2FsY1dpZHRoKFxuICAgICAgICAgIGVsLFxuICAgICAgICAgIHByZVNldFdpZHRoRWxlbWVudHMsXG4gICAgICAgICAgdmlzQ291bnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHNldEVsZW1lbnRNYXhNaW5XaWR0aChlbDogSUVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBlbC53aWR0aCAmJlxuICAgICAgdHlwZW9mIGVsLndpZHRoID09PSBcInN0cmluZ1wiICYmXG4gICAgICBlbC53aWR0aC5pbmRleE9mKFwiJVwiKSA9PT0gLTFcbiAgICApIHtcbiAgICAgIGVsLm1pbldpZHRoID0gZWwud2lkdGg7XG4gICAgICBlbC5tYXhXaWR0aCA9IGVsLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVuZGVyZWRDYWxjV2lkdGgoXG4gICAgZWw6IElFbGVtZW50LFxuICAgIHByZVNldFdpZHRoRWxlbWVudHM6IEFycmF5PElFbGVtZW50PixcbiAgICB2aXNDb3VudDogbnVtYmVyXG4gICk6IHN0cmluZyB7XG4gICAgdmFyIGV4cHJlc3Npb24gPSBcIjEwMCVcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVNldFdpZHRoRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cHJlc3Npb24gKz0gXCIgLSBcIiArIHByZVNldFdpZHRoRWxlbWVudHNbaV0ucmVuZGVyV2lkdGg7XG4gICAgfVxuICAgIHZhciBjYWxjV2lkdGhFbCA9IHZpc0NvdW50IC0gcHJlU2V0V2lkdGhFbGVtZW50cy5sZW5ndGg7XG4gICAgaWYgKGNhbGNXaWR0aEVsID4gMSkge1xuICAgICAgZXhwcmVzc2lvbiA9IFwiKFwiICsgZXhwcmVzc2lvbiArIFwiKS9cIiArIGNhbGNXaWR0aEVsLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBcImNhbGMoXCIgKyBleHByZXNzaW9uICsgXCIpXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRFbGVtZW50V2lkdGgoZWw6IElFbGVtZW50KTogc3RyaW5nIHtcbiAgICB2YXIgd2lkdGggPSBlbC53aWR0aDtcbiAgICBpZiAoIXdpZHRoIHx8IHR5cGVvZiB3aWR0aCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHdpZHRoLnRyaW0oKTtcbiAgfVxuICBwcml2YXRlIGdldFJlbmRlcmVkV2lkdGhGcm9tV2lkdGgod2lkdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNOdW1iZXIod2lkdGgpID8gd2lkdGggKyBcInB4XCIgOiB3aWR0aDtcbiAgfVxuICBwcml2YXRlIGNhbGNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHZhciB2aXNFbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgdmlzRWxlbWVudHMucHVzaCh0aGlzLmVsZW1lbnRzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubmVlZFRvVXBkYXRlVmlzaWJsZUVsZW1lbnRzKHZpc0VsZW1lbnRzKSkge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUVsZW1lbnRzXCIsIHZpc0VsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc0VsZW1lbnRzLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHJpdmF0ZSBuZWVkVG9VcGRhdGVWaXNpYmxlRWxlbWVudHModmlzRWxlbWVudHM6IEFycmF5PElFbGVtZW50Pik6IGJvb2xlYW4ge1xuICAgIGlmICh2aXNFbGVtZW50cy5sZW5ndGggIT09IHRoaXMudmlzaWJsZUVsZW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZpc0VsZW1lbnRzW2ldICE9PSB0aGlzLnZpc2libGVFbGVtZW50c1tpXSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICB9XG59XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhIFBhbmVsIGFuZCBQYWdlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsQmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRcbiAgaW1wbGVtZW50cyBJUGFuZWwsIElDb25kaXRpb25SdW5uZXIsIElMb2NhbGl6YWJsZU93bmVyLCBJU3VydmV5RXJyb3JPd25lciB7XG4gIHByaXZhdGUgc3RhdGljIHBhbmVsQ291bnRlciA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFuZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNwX1wiICsgUGFuZWxNb2RlbEJhc2UucGFuZWxDb3VudGVyKys7XG4gIH1cblxuICBwcml2YXRlIGVsZW1lbnRzVmFsdWU6IEFycmF5PElFbGVtZW50PjtcbiAgcHJpdmF0ZSBpc1F1ZXN0aW9uc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcXVlc3Rpb25zVmFsdWU6IEFycmF5PFF1ZXN0aW9uPiA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgYWRkRWxlbWVudENhbGxiYWNrOiAoZWxlbWVudDogSUVsZW1lbnQpID0+IHZvaWQ7XG4gIHJlbW92ZUVsZW1lbnRDYWxsYmFjazogKGVsZW1lbnQ6IElFbGVtZW50KSA9PiB2b2lkO1xuICBvbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogKCkgPT4gc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcbiAgICB0aGlzLmVsZW1lbnRzVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJlbGVtZW50c1wiLFxuICAgICAgdGhpcy5vbkFkZEVsZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMub25SZW1vdmVFbGVtZW50LmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMuaWQgPSBQYW5lbE1vZGVsQmFzZS5nZXRQYW5lbElkKCk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCAoKSA9PiB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJzaG93UXVlc3Rpb25OdW1iZXJzXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInBhbmVsYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCkge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIH1cbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogUGFuZWxNb2RlbCBvciBQYWdlTW9kZWwgdGl0bGUgcHJvcGVydHkuXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKi9cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpO1xuICB9XG4gIGdldCBfc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoKDxhbnk+dGhpcy5zdXJ2ZXkpLnNob3dQYWdlVGl0bGVzICYmIHRoaXMudGl0bGUubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLmlzRGVzaWduTW9kZSAmJiBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlKVxuICAgICk7XG4gIH1cblxuICBnZXQgX3Nob3dEZXNjcmlwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCg8YW55PnRoaXMuc3VydmV5KS5zaG93UGFnZVRpdGxlcyAmJiB0aGlzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5pc0Rlc2lnbk1vZGUgJiZcbiAgICAgICAgc2V0dGluZ3MuYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZSAmJlxuICAgICAgICBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eURlc2NyaXB0aW9uSW5EZXNpZ25Nb2RlKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFBhbmVsTW9kZWwgb3IgUGFnZU1vZGVsIGRlc2NyaXB0aW9uIHByb3BlcnR5LiBJdCByZW5kZXJzIHVuZGVyIHRpdGxlIGJ5IHVzaW5nIHNtYWxsZXIgZm9udC4gVW5saWtlIHRoZSB0aXRsZSwgZGVzY3JpcHRpb24gY2FuIGJlIGVtcHR5LlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIGxvY2FsZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jYWxlQ2hhbmdlZCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgKDxCYXNlPig8YW55PnRoaXMuZWxlbWVudHNbaV0pKS5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hhci9zdHJpbmcgZm9yIGEgcmVxdWlyZWQgcGFuZWwuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsICYmIHRoaXMuaXNSZXF1aXJlZFxuICAgICAgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHRcbiAgICAgIDogXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRpdGxlUGF0dGVybigpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZVBhdHRlcm4gOiBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dE9uU3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJudW1SZXF1aXJlVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRBZnRlclRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgfVxuICAvKipcbiAgICogVGhlIGN1c3RvbSB0ZXh0IHRoYXQgd2lsbCBiZSBzaG93biBvbiByZXF1aXJlZCBlcnJvci4gVXNlIHRoaXMgcHJvcGVydHksIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHRoZSBkZWZhdWx0IHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVxdWlyZWRFcnJvclRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUmVxdWlyZWRFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIik7XG4gIH1cbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5XG4gICAgICA/ICg8SUxvY2FsaXphYmxlT3duZXI+KDxhbnk+dGhpcy5zdXJ2ZXkpKS5nZXRMb2NhbGUoKVxuICAgICAgOiBcIlwiO1xuICB9XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVxuICAgICAgPyB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlNYXJrZG93bkh0bWwodGhpcywgdGV4dCwgbmFtZSlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpIDogbnVsbDtcbiAgfVxuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvclxuICAgICAgPyB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQodGV4dCwgdHJ1ZSlcbiAgICAgIDogdGV4dDtcbiAgfVxuICAvKipcbiAgICogQSBwYXJlbnQgZWxlbWVudC4gSXQgaXMgYWx3YXlzIG51bGwgZm9yIHRoZSBQYWdlIG9iamVjdCBhbmQgYWx3YXlzIG5vdCBudWxsIGZvciB0aGUgUGFuZWwgb2JqZWN0LiBQYW5lbCBvYmplY3QgbWF5IGNvbnRhaW4gUXVlc3Rpb25zIGFuZCBvdGhlciBQYW5lbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IFBhbmVsTW9kZWxCYXNlKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBkZXB0aCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnBhcmVudCA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZGVwdGggKyAxO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFBhbmVsIGJlY29tZXMgdmlzaWJsZSBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUGFuZWwgYmVjb21lcyBpbnZpc2libGUuIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiB2aXNpYmxlIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBjc3NDbGFzc2VzVmFsdWU6IGFueTtcbiAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmNzc0NsYXNzZXNWYWx1ZSkge1xuICAgICAgdGhpcy5jc3NDbGFzc2VzVmFsdWUgPSB0aGlzLmNhbGNDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXNWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY0Nzc0NsYXNzZXMoKTogYW55IHtcbiAgICB2YXIgY2xhc3NlcyA9IHsgcGFuZWw6IHt9LCBlcnJvcjoge30sIHJvdzogXCJcIiB9O1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5wYW5lbCwgdGhpcy5jc3MucGFuZWwpO1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5lcnJvciwgdGhpcy5jc3MuZXJyb3IpO1xuICAgIGlmICghIXRoaXMuY3NzLnJvdykge1xuICAgICAgY2xhc3Nlcy5yb3cgPSB0aGlzLmNzcy5yb3c7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkudXBkYXRlUGFuZWxDc3NDbGFzc2VzKHRoaXMsIGNsYXNzZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICAvKipcbiAgICogQSB1bmlxdWUgZWxlbWVudCBpZGVudGlmaWNhdG9yLiBJdCBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBvYmplY3QgaXMgUGFuZWwuIFJldHVybnMgZmFsc2UgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIFBhZ2UgKGEgcm9vdCBQYW5lbCkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldExheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxheW91dFR5cGUgIT09IFwiZmxvd1wiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBxdWVzdGlvbnMgbG9jYXRlZCBpbiB0aGUgUGFuZWwvUGFnZSwgaW5jbHVkaW5nIGluIHRoZSBuZXN0ZWQgUGFuZWxzLlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqIEBzZWUgZWxlbWVudHNcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLmlzUXVlc3Rpb25zUmVhZHkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICAgIHZhciBxcyA9ICg8UGFuZWxNb2RlbD5lbCkucXVlc3Rpb25zO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaChxc1tqXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25zVmFsdWUucHVzaCg8UXVlc3Rpb24+ZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWxpZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISFuYW1lKSByZXR1cm4gbmFtZS50cmltKCk7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHF1ZXN0aW9uIGJ5IGl0cyBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBxdWVzdGlvbiBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiBxdWVzdGlvbnNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50IGJ5IGl0cyBuYW1lLiBJdCB3b3JrcyByZWN1cnNpdmVseS5cbiAgICogQHBhcmFtIG5hbWUgdGhlIGVsZW1lbnQgbmFtZVxuICAgKi9cbiAgcHVibGljIGdldEVsZW1lbnRCeU5hbWUobmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoZWwubmFtZSA9PSBuYW1lKSByZXR1cm4gZWw7XG4gICAgICB2YXIgcG5sID0gZWwuZ2V0UGFuZWwoKTtcbiAgICAgIGlmICghIXBubCkge1xuICAgICAgICB2YXIgcmVzID0gKDxQYW5lbE1vZGVsQmFzZT5wbmwpLmdldEVsZW1lbnRCeU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpID09IHZhbHVlTmFtZSkgcmV0dXJuIHF1ZXN0aW9uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVlc3Rpb24gdmFsdWVzIG9uIHRoZSBjdXJyZW50IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZSgpOiBhbnkge1xuICAgIHZhciBkYXRhOiBhbnkgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBpZiAocS5pc0VtcHR5KCkpIGNvbnRpbnVlO1xuICAgICAgdmFyIHZhbHVlTmFtZSA9IHEuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBkYXRhW3ZhbHVlTmFtZV0gPSBxLnZhbHVlO1xuICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5kYXRhLmdldENvbW1lbnQodmFsdWVOYW1lKTtcbiAgICAgICAgaWYgKCEhY29tbWVudCkge1xuICAgICAgICAgIGRhdGFbdmFsdWVOYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF0gPSBjb21tZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gcXVlc3Rpb25zIHZhbHVlcyBhcyBhIEpTT04gb2JqZWN0IHdpdGggZGlzcGxheSB0ZXh0LiBGb3IgZXhhbXBsZSwgZm9yIGRyb3Bkb3duLCBpdCB3b3VsZCByZXR1cm4gdGhlIGl0ZW0gdGV4dCBpbnN0ZWFkIG9mIGl0ZW0gdmFsdWUuXG4gICAqIEBwYXJhbSBrZXlzQXNUZXh0IFNldCB0aGlzIHZhbHVlIHRvIHRydWUsIHRvIHJldHVybiBrZXkgKGluIG1hdHJpY2VzIHF1ZXN0aW9ucykgYXMgZGlzcGxheSB0ZXh0IGFzIHdlbGwuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQ6IGJvb2xlYW4pOiBhbnkge1xuICAgIHZhciBkYXRhOiBhbnkgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBpZiAocS5pc0VtcHR5KCkpIGNvbnRpbnVlO1xuICAgICAgdmFyIHZhbHVlTmFtZSA9IGtleXNBc1RleHQgPyBxLnRpdGxlIDogcS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgIGRhdGFbdmFsdWVOYW1lXSA9IHEuZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWVzdGlvbiBjb21tZW50cyBvbiB0aGUgY3VycmVudCBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tbWVudHMoKTogYW55IHtcbiAgICB2YXIgY29tbWVudHMgPSB7fTtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIGNvbW1lbnRzO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICB2YXIgY29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHEuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgaWYgKCEhY29tbWVudCkge1xuICAgICAgICAoPGFueT5jb21tZW50cylbcS5nZXRWYWx1ZU5hbWUoKV0gPSBjb21tZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tbWVudHM7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgYWxsIHF1ZXN0aW9uIHZhbHVlcyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UvcGFuZWwsIHRoYXQgZW5kLXVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBlbnRlci5cbiAgICogRm9yIGV4YW1wbGUgdGhlIHZhbHVlIHRoYXQgZG9lc24ndCBleGlzdHMgaW4gYSByYWRpZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFyIHZhbHVlcyBmb3IgaW52aXNpYmxlIHF1ZXN0aW9ucyBvciB2YWx1ZXMgdGhhdCBkb2Vzbid0IGFzc29jaWF0ZWQgd2l0aCBxdWVzdGlvbnMuXG4gICAqIEBzZWUgUXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICovXG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBhbGwgZXJyb3JzIGluIHRoZSBwYW5lbCAvIHBhZ2UgYW5kIGFsbCBpdHMgY2hpbGQgZWxlbWVudHMgKHBhbmVscyBhbmQgcXVlc3Rpb25zKVxuICAgKi9cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5jbGVhckVycm9ycygpO1xuICAgIH1cbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICB9XG4gIHByaXZhdGUgbWFya1F1ZXN0aW9uTGlzdERpcnR5KCkge1xuICAgIHRoaXMuaXNRdWVzdGlvbnNSZWFkeSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBhcmVudCkgdGhpcy5wYXJlbnQubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBvYmplY3QsIFBhbmVsL1BhZ2UuIEVsZW1lbnRzIGNhbiBiZSBxdWVzdGlvbnMgb3IgcGFuZWxzLiBUaGUgZnVuY3Rpb24gZG9lc24ndCByZXR1cm4gZWxlbWVudHMgaW4gdGhlIG5lc3RlZCBQYW5lbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0RWxlbWVudHNJbkRlc2lnbihpbmNsdWRlSGlkZGVuOiBib29sZWFuID0gZmFsc2UpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBiZWxvbmdzIHRvIHRoZSBQYW5lbC9QYWdlLiBJdCBsb29rcyBpbiBuZXN0ZWQgUGFuZWxzIGFzIHdlbGwuXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqIEBzZWUgUGFuZWxNb2RlbFxuICAgKi9cbiAgcHVibGljIGNvbnRhaW5zRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsOiBhbnkgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsID09IGVsZW1lbnQpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIHBubCA9IGVsLmdldFBhbmVsKCk7XG4gICAgICBpZiAoISFwbmwpIHtcbiAgICAgICAgaWYgKCg8UGFuZWxNb2RlbEJhc2U+cG5sKS5jb250YWluc0VsZW1lbnQoZWxlbWVudCkpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIHJlcXVpcmUgdGhlIGFuc3dlciBhdCBsZWFzdCBpbiBvbmUgcXVlc3Rpb24gaW4gdGhlIHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZXF1aXJlZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFBhbmVsL1BhZ2UgYmVjb21lcyByZXF1aXJlZC5cbiAgICogVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIGlzUmVxdWlyZWQgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSBpc1JlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIHNlYXJjaFRleHQodGV4dDogc3RyaW5nLCBmb3VuZGVkOiBBcnJheTxJRmluZEVsZW1lbnQ+KSB7XG4gICAgc3VwZXIuc2VhcmNoVGV4dCh0ZXh0LCBmb3VuZGVkKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICg8QmFzZT4oPGFueT50aGlzLmVsZW1lbnRzW2ldKSkuc2VhcmNoVGV4dCh0ZXh0LCBmb3VuZGVkKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSwgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb24gdGhpcyBQYWdlIG9yIGluc2lkZSB0aGUgY3VycmVudCBQYW5lbFxuICAgKiBAcGFyYW0gZmlyZUNhbGxiYWNrIHNldCBpdCB0byB0cnVlLCB0byBzaG93IGVycm9ycyBpbiBVSVxuICAgKiBAcGFyYW0gZm9jdXNPbkZpcnN0RXJyb3Igc2V0IGl0IHRvIHRydWUgdG8gZm9jdXMgb24gdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgZG9lc24ndCBwYXNzIHRoZSB2YWxpZGF0aW9uXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsXG4gICAgZm9jdXNPbkZpcnN0RXJyb3I6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICByZWM6IGFueSA9IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmVjID0gISFyZWNcbiAgICAgID8gcmVjXG4gICAgICA6IHtcbiAgICAgICAgICBmaXJlQ2FsbGJhY2s6IGZpcmVDYWxsYmFjayxcbiAgICAgICAgICBmb2N1c2VPbkZpcnN0RXJyb3I6IGZvY3VzT25GaXJzdEVycm9yLFxuICAgICAgICAgIGZpcnN0RXJyb3JRdWVzdGlvbjogPGFueT5udWxsLFxuICAgICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgdGhpcy5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgaWYgKHJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgIHJlYy5maXJzdEVycm9yUXVlc3Rpb24uZm9jdXModHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZWMucmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JzSW5QYW5lbHMocmVjOiBhbnkpIHtcbiAgICB2YXIgZXJyb3JzID0gPEFycmF5PGFueT4+W107XG4gICAgdGhpcy5oYXNSZXF1aXJlZEVycm9yKHJlYywgZXJyb3JzKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBjdXN0b21FcnJvciA9IHRoaXMuc3VydmV5LnZhbGlkYXRlUGFuZWwodGhpcyk7XG4gICAgICBpZiAoY3VzdG9tRXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goY3VzdG9tRXJyb3IpO1xuICAgICAgICByZWMucmVzdWx0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhcmVjLmZpcmVDYWxsYmFjaykge1xuICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYmVmb3JlU2V0dGluZ1BhbmVsRXJyb3JzKHRoaXMsIGVycm9ycyk7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9XG4gIH1cbiAgLy9JU3VydmV5RXJyb3JPd25lclxuICBnZXRFcnJvckN1c3RvbVRleHQodGV4dDogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQsIGVycm9yKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVxdWlyZWRFcnJvcihyZWM6IGFueSwgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBpZiAoIXRoaXMuaXNSZXF1aXJlZCkgcmV0dXJuO1xuICAgIHZhciB2aXNRdWVzdGlvbnMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICB0aGlzLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNRdWVzdGlvbnMsIHRydWUpO1xuICAgIGlmICh2aXNRdWVzdGlvbnMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1F1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF2aXNRdWVzdGlvbnNbaV0uaXNFbXB0eSgpKSByZXR1cm47XG4gICAgfVxuICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgIGVycm9ycy5wdXNoKG5ldyBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yKHRoaXMucmVxdWlyZWRFcnJvclRleHQsIHRoaXMpKTtcbiAgICBpZiAocmVjLmZvY3VzZU9uRmlyc3RFcnJvciAmJiAhcmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9IHZpc1F1ZXN0aW9uc1swXTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIHZhciBlbGVtZW50ID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblxuICAgICAgaWYgKCFlbGVtZW50LmlzVmlzaWJsZSkgY29udGludWU7XG5cbiAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbGVtZW50KSkuaGFzRXJyb3JzQ29yZShyZWMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPmVsZW1lbnQ7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSBjb250aW51ZTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmhhc0Vycm9ycyhyZWMuZmlyZUNhbGxiYWNrLCByZWMpKSB7XG4gICAgICAgICAgaWYgKHJlYy5mb2N1c2VPbkZpcnN0RXJyb3IgJiYgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaGFzRXJyb3JzSW5QYW5lbHMocmVjKTtcbiAgICB0aGlzLnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRDb250YWluc0Vycm9ycygpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZWxlbWVudHNbaV0uY29udGFpbnNFcnJvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdXBkYXRlRWxlbWVudFZpc2liaWxpdHkoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgKDxCYXNlPig8YW55PmVsKSkuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCBlbC5pc1Zpc2libGUpO1xuICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHdpdGhFcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUXVlc3Rpb24ge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoIWVsLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICB2YXIgcmVzID0gKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKFxuICAgICAgICAgIHdpdGhFcnJvclxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbj5lbDtcbiAgICAgICAgaWYgKHEuaGFzSW5wdXQgJiYgKCF3aXRoRXJyb3IgfHwgcS5jdXJyZW50RXJyb3JDb3VudCA+IDApKSByZXR1cm4gcTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gZm9jdXMgdGhlIGlucHV0IG9uIHRoZSBmaXJzdCBxdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcbiAgICB2YXIgcSA9IHRoaXMuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMoKTtcbiAgICBpZiAoISFxKSB7XG4gICAgICBxLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIGl0IHRvIGZvY3VzIHRoZSBpbnB1dCBvZiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBoYXMgYW4gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb24oKSB7XG4gICAgdmFyIHEgPSB0aGlzLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHRydWUpO1xuICAgIGlmICghIXEpIHtcbiAgICAgIHEuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZpbGwgbGlzdCBhcnJheSB3aXRoIHRoZSBxdWVzdGlvbnMuXG4gICAqIEBwYXJhbSBsaXN0XG4gICAqIEBwYXJhbSB2aXNpYmxlT25seSBzZXQgaXQgdG8gdHJ1ZSB0byBnZXQgdmlzaWJsZSBxdWVzdGlvbnMgb25seVxuICAgKi9cbiAgcHVibGljIGFkZFF1ZXN0aW9uc1RvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUXVlc3Rpb24+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHksIGluY2x1ZGluZ0Rlc2lnblRpbWUsIGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogRmlsbCBsaXN0IGFycmF5IHdpdGggdGhlIHBhbmVscy5cbiAgICogQHBhcmFtIGxpc3RcbiAgICovXG4gIHB1YmxpYyBhZGRQYW5lbHNJbnRvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUGFuZWw+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgICA8QXJyYXk8SUVsZW1lbnQ+Pig8QXJyYXk8YW55Pj5saXN0KSxcbiAgICAgIHZpc2libGVPbmx5LFxuICAgICAgaW5jbHVkaW5nRGVzaWduVGltZSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG4gIHByaXZhdGUgYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgbGlzdDogQXJyYXk8SUVsZW1lbnQ+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuLFxuICAgIGluY2x1ZGluZ0Rlc2lnblRpbWU6IGJvb2xlYW4sXG4gICAgaXNQYW5lbDogYm9vbGVhblxuICApIHtcbiAgICBpZiAodmlzaWJsZU9ubHkgJiYgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgbGlzdCxcbiAgICAgIHRoaXMuZWxlbWVudHMsXG4gICAgICB2aXNpYmxlT25seSxcbiAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICBpc1BhbmVsXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGFkZEVsZW1lbnRzVG9MaXN0Q29yZShcbiAgICBsaXN0OiBBcnJheTxJRWxlbWVudD4sXG4gICAgZWxlbWVudHM6IEFycmF5PElFbGVtZW50PixcbiAgICB2aXNpYmxlT25seTogYm9vbGVhbixcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuLFxuICAgIGlzUGFuZWw6IGJvb2xlYW5cbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIWVsLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgaWYgKChpc1BhbmVsICYmIGVsLmlzUGFuZWwpIHx8ICghaXNQYW5lbCAmJiAhZWwuaXNQYW5lbCkpIHtcbiAgICAgICAgbGlzdC5wdXNoKGVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICg8UGFuZWxNb2RlbD5lbCkuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgICAgIGxpc3QsXG4gICAgICAgICAgKDxQYW5lbE1vZGVsPmVsKS5lbGVtZW50cyxcbiAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICBpbmNsdWRpbmdEZXNpZ25UaW1lLFxuICAgICAgICAgIGlzUGFuZWxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmNsdWRpbmdEZXNpZ25UaW1lKSB7XG4gICAgICAgICAgdGhpcy5hZGRFbGVtZW50c1RvTGlzdENvcmUoXG4gICAgICAgICAgICBsaXN0LFxuICAgICAgICAgICAgKDxTdXJ2ZXlFbGVtZW50Pig8YW55PmVsKSkuZ2V0RWxlbWVudHNJbkRlc2lnbihmYWxzZSksXG4gICAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICAgICAgICBpc1BhbmVsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBQYWdlIGFuZCBpdCBpcyB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3VydmV5IHx8IDxQYWdlTW9kZWw+dGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPT0gdGhpcy5yb290O1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDdXN0b21XaWRnZXRzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGlzIHBhbmVsL3BhZ2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbilcbiAgICAgIHJldHVybiB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICAgIGlmICh0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbiA6IFwidG9wXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uU3RhcnRJbmRleCgpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50LmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoXG4gICAgICA8QXJyYXk8U3VydmV5RWxlbWVudD4+KDxhbnk+dGhpcy5lbGVtZW50cyksXG4gICAgICB0aGlzLmlzUmVxdWlyZWRcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcm9vdCgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsQmFzZT50aGlzO1xuICAgIHdoaWxlIChyZXMucGFyZW50KSByZXMgPSByZXMucGFyZW50O1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgdmFyIG5ld0lzVmlzaWJsZVZhbHVlID0gdGhpcy5nZXRJc1BhZ2VWaXNpYmxlKG51bGwpO1xuICAgIHZhciBvbGRJc1Zpc2libGVWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0cnVlKTtcbiAgICBpZiAobmV3SXNWaXNpYmxlVmFsdWUgIT09IG9sZElzVmlzaWJsZVZhbHVlKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJvd0FuZFNldExhenkoaW5kZXg6IG51bWJlcik6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuY3JlYXRlUm93KCk7XG4gICAgcm93LnNldElzTGF6eVJlbmRlcmluZyh0aGlzLmlzTGF6eVJlbmRlckluUm93KGluZGV4KSk7XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcbiAgICB9XG4gICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIik7XG4gIH1cblxuICBwdWJsaWMgZW5zdXJlUm93c1Zpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgcm93LmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiLCB0aGlzLmJ1aWxkUm93cygpKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgZWxlbWVudC5zZXRTdXJ2ZXlJbXBsKHRoaXMuc3VydmV5SW1wbCk7XG4gICAgZWxlbWVudC5wYXJlbnQgPSB0aGlzO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudCwgaW5kZXgpO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIHZhciBwID0gPFBhbmVsTW9kZWw+ZWxlbWVudDtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb24+ZWxlbWVudDtcbiAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25BZGRlZChxLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hZGRFbGVtZW50Q2FsbGJhY2spIHRoaXMuYWRkRWxlbWVudENhbGxiYWNrKGVsZW1lbnQpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCJdLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudCk7XG4gICAgICB9LFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgKDxCYXNlPig8YW55PmVsZW1lbnQpKS5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25FbGVtZW50U3RhcnRXaXRoTmV3TGluZUNoYW5nZWQoZWxlbWVudCk7XG4gICAgICB9LFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgZWxlbWVudC5wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgKDxCYXNlPig8YW55PmVsZW1lbnQpKS51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCIsIFwic3RhcnRXaXRoTmV3TGluZVwiXSxcbiAgICAgIHRoaXMuaWRcbiAgICApO1xuICAgIHRoaXMudXBkYXRlUm93c09uRWxlbWVudFJlbW92ZWQoZWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW1vdmVkKDxRdWVzdGlvbj5lbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5wYW5lbFJlbW92ZWQoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMucmVtb3ZlRWxlbWVudENhbGxiYWNrKSB0aGlzLnJlbW92ZUVsZW1lbnRDYWxsYmFjayhlbGVtZW50KTtcbiAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgb25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQpO1xuICAgIHRoaXMuY2hpbGRWaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudC5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBvbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQ6IGFueSkge1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAocm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSkge1xuICAgICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjYW5CdWlsZFJvd3MoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkgPT0gXCJyb3dcIjtcbiAgfVxuICBwcml2YXRlIGJ1aWxkUm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XG4gICAgaWYgKCF0aGlzLmNhbkJ1aWxkUm93cygpKSByZXR1cm4gW107XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvblJvd01vZGVsPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIHZhciBpc05ld1JvdyA9IGkgPT0gMCB8fCBlbC5zdGFydFdpdGhOZXdMaW5lO1xuICAgICAgdmFyIHJvdyA9IGlzTmV3Um93ID8gdGhpcy5jcmVhdGVSb3dBbmRTZXRMYXp5KHJlc3VsdC5sZW5ndGgpIDogcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChpc05ld1JvdykgcmVzdWx0LnB1c2gocm93KTtcbiAgICAgIHJvdy5hZGRFbGVtZW50KGVsKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXS51cGRhdGVWaXNpYmxlKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBpc0xhenlSZW5kZXJJblJvdyhyb3dJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5zdXJ2ZXkuaXNMYXp5UmVuZGVyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgIHJvd0luZGV4ID49IHNldHRpbmdzLmxhenlSb3dzUmVuZGVyaW5nU3RhcnRSb3cgfHxcbiAgICAgICF0aGlzLmNhblJlbmRlckZpcnN0Um93cygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyRmlyc3RSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFnZTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVJvd3NPbkVsZW1lbnRBZGRlZChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jYW5CdWlsZFJvd3MoKSkgcmV0dXJuO1xuICAgIHZhciBkcmFnRHJvcEluZm8gPSBuZXcgRHJhZ0Ryb3BJbmZvKG51bGwsIGVsZW1lbnQpO1xuICAgIGRyYWdEcm9wSW5mby50YXJnZXQgPSBlbGVtZW50O1xuICAgIGRyYWdEcm9wSW5mby5pc0VkZ2UgPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCA+IDE7XG4gICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgZHJhZ0Ryb3BJbmZvLmlzQm90dG9tID0gaW5kZXggPiAwO1xuICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gdGhpcy5lbGVtZW50c1sxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXMuZWxlbWVudHNbaW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvUm93KGRyYWdEcm9wSW5mbywgbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzT25FbGVtZW50UmVtb3ZlZChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5jYW5CdWlsZFJvd3MoKSkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHRoaXMuZmluZFJvd0J5RWxlbWVudChlbGVtZW50KVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyhcbiAgICBlbGVtZW50OiBJRWxlbWVudCxcbiAgICByb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKSB7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5wYW5lbCkgcmV0dXJuO1xuICAgIHZhciBlbEluZGV4ID0gcm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgaWYgKGVsSW5kZXggPCAwKSByZXR1cm47XG4gICAgcm93LmVsZW1lbnRzLnNwbGljZShlbEluZGV4LCAxKTtcbiAgICBpZiAocm93LmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyb3cuaW5kZXggPj0gMCkge1xuICAgICAgICByb3cucGFuZWwucm93cy5zcGxpY2Uocm93LmluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBmaW5kUm93QnlFbGVtZW50KGVsOiBJRWxlbWVudCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJvd3NbaV0uZWxlbWVudHMuaW5kZXhPZihlbCkgPiAtMSkgcmV0dXJuIHJvd3NbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGVsZW1lbnRXaWR0aENoYW5nZWQoZWw6IElFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGVsKTtcbiAgICBpZiAoISFyb3cpIHtcbiAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlbmRlcmVkIHRpdGxlIHRleHQgb3IgaHRtbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRUaXRsZSh0aGlzLmxvY1RpdGxlLnRleHRPckh0bWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZFRpdGxlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yICE9IG51bGxcbiAgICAgID8gdGhpcy50ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0KHN0ciwgdHJ1ZSlcbiAgICAgIDogc3RyO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gZ2V0L3NldCB0aGUgb2JqZWN0IHZpc2liaWxpdHkuXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnZpc2libGUpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHZhbHVlKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbkNvbnRhaW5lciAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb25cbiAgICApIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHtcbiAgICAgICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgb2JqZWN0IGlzIHZpc2libGUgb3Igc3VydmV5IGlzIGluIGRlc2lnbiBtb2RlIHJpZ2h0IG5vdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZyB8fCB0aGlzLmdldElzUGFnZVZpc2libGUobnVsbCk7XG4gIH1cbiAgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnZpc2libGUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldID09IGV4Y2VwdGlvblF1ZXN0aW9uKSBjb250aW51ZTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLmlzVmlzaWJsZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGxhc3RWaXNpYmxlSW5kZXg6IG51bWJlcjtcbiAgcHVibGljIHNldFZpc2libGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNWaXNpYmxlIHx8IGluZGV4IDwgMCkge1xuICAgICAgdGhpcy5yZXNldFZpc2libGVJbmRleGVzKCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhpcy5sYXN0VmlzaWJsZUluZGV4ID0gaW5kZXg7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICBpbmRleCArPSB0aGlzLmJlZm9yZVNldFZpc2libGVJbmRleChpbmRleCk7XG4gICAgdmFyIHBhbmVsU3RhcnRJbmRleCA9IHRoaXMuZ2V0UGFuZWxTdGFydEluZGV4KGluZGV4KTtcbiAgICB2YXIgcGFuZWxJbmRleCA9IHBhbmVsU3RhcnRJbmRleDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhbmVsSW5kZXggKz0gdGhpcy5lbGVtZW50c1tpXS5zZXRWaXNpYmxlSW5kZXgocGFuZWxJbmRleCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29udGludWVOdW1iZXJpbmcoKSkge1xuICAgICAgaW5kZXggKz0gcGFuZWxJbmRleCAtIHBhbmVsU3RhcnRJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4IC0gc3RhcnRJbmRleDtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVZpc2libGVJbmRleGVzKCkge1xuICAgIGlmICh0aGlzLmxhc3RWaXNpYmxlSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMuc2V0VmlzaWJsZUluZGV4KHRoaXMubGFzdFZpc2libGVJbmRleCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNldFZpc2libGVJbmRleGVzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgYmVmb3JlU2V0VmlzaWJsZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbFN0YXJ0SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBpc0NvbnRpbnVlTnVtYmVyaW5nKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgcmVhZE9ubHkgcHJvcGVydHkgaXMgdHJ1ZSBvciBzdXJ2ZXkgaXMgaW4gZGlzcGxheSBtb2RlIG9yIHBhcmVudCBwYW5lbC9wYWdlIGlzIHJlYWRPbmx5LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm1vZGVsXG4gICAqIEBzZWUgcmVhZE9ubHlcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICB2YXIgaXNQYXJlbnRSZWFkT25seSA9ICEhdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuaXNSZWFkT25seTtcbiAgICB2YXIgaXNTdXJ2ZXlSZWFkT25seSA9ICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seSB8fCBpc1BhcmVudFJlYWRPbmx5IHx8IGlzU3VydmV5UmVhZE9ubHk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gPFN1cnZleUVsZW1lbnQ+KDxhbnk+dGhpcy5lbGVtZW50c1tpXSk7XG4gICAgICBlbC5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZWFkT25seVwiLCBlbC5pc1JlYWRPbmx5KTtcbiAgICB9XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IDxTdXJ2ZXlFbGVtZW50Pig8YW55PnRoaXMuZWxlbWVudHNbaV0pO1xuICAgICAgZWwudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIElmIGl0IHJldHVybnMgZmFsc2UgdGhlIFBhbmVsL1BhZ2UgYmVjb21lcyByZWFkIG9ubHkgYW5kIGFuIGVuZC11c2VyIHdpbGwgbm90IGFibGUgdG8gYW5zd2VyIG9uIHF1c3Rpb25zIGluc2lkZSBpdC5cbiAgICogVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIHJlYWRPbmx5IHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgcmVhZE9ubHlcbiAgICogQHNlZSBpc1JlYWRPbmx5XG4gICAqL1xuICBwdWJsaWMgZ2V0IGVuYWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBpbnRvIFBhbmVsIG9yIFBhZ2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBhZGRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKiBAcGFyYW0gaW5kZXggZWxlbWVudCBpbmRleCBpbiB0aGUgZWxlbWVudHMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyID0gLTEpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuQWRkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRFbGVtZW50QWZ0ZXIoZWxlbWVudDogSUVsZW1lbnQsIGFmdGVyOiBJRWxlbWVudCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGFmdGVyKTtcbiAgICBpZiAoaW5kZXggPj0gMCkgdGhpcy5hZGRFbGVtZW50KGVsZW1lbnQsIGluZGV4ICsgMSk7XG4gIH1cbiAgcHVibGljIGluc2VydEVsZW1lbnRCZWZvcmUoZWxlbWVudDogSUVsZW1lbnQsIGJlZm9yZTogSUVsZW1lbnQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZWxlbWVudHMuaW5kZXhPZihiZWZvcmUpO1xuICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmFkZEVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbkFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISFlbGVtZW50ICYmIGVsZW1lbnQuaXNMYXlvdXRUeXBlU3VwcG9ydGVkKHRoaXMuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkpXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgcXVlc3Rpb24gaW50byBQYW5lbCBvciBQYWdlLiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIGFkZGVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqIEBwYXJhbSBxdWVzdGlvblxuICAgKiBAcGFyYW0gaW5kZXggZWxlbWVudCBpbmRleCBpbiB0aGUgZWxlbWVudHMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBhZGRRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24sIGluZGV4OiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkZEVsZW1lbnQocXVlc3Rpb24sIGluZGV4KTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgcGFuZWwgaW50byBQYW5lbCBvciBQYWdlLiAgUmV0dXJucyB0cnVlIGlmIHRoZSBwYW5lbCBhZGRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICAgKiBAcGFyYW0gcGFuZWxcbiAgICogQHBhcmFtIGluZGV4IGVsZW1lbnQgaW5kZXggaW4gdGhlIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICBwdWJsaWMgYWRkUGFuZWwocGFuZWw6IFBhbmVsTW9kZWwsIGluZGV4OiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkZEVsZW1lbnQocGFuZWwsIGluZGV4KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBxdWVzdGlvbiBhbmQgYWRkcyBpdCBhdCBsb2NhdGlvbiBvZiBpbmRleCwgYnkgZGVmYXVsdCB0aGUgZW5kIG9mIHRoZSBlbGVtZW50cyBsaXN0LiBSZXR1cm5zIG51bGwsIGlmIHRoZSBxdWVzdGlvbiBjb3VsZCBub3QgYmUgY3JlYXRlZCBvciBjb3VsZCBub3QgYmUgYWRkZWQgaW50byBwYWdlIG9yIHBhbmVsLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25UeXBlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBcInRleHRcIiwgXCJjaGVja2JveFwiLCBcImRyb3Bkb3duXCIsIFwibWF0cml4XCIsIFwiaHRtbFwiLCBcIm1hdHJpeGR5bmFtaWNcIiwgXCJtYXRyaXhkcm9wZG93blwiIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBpbmRleCBlbGVtZW50IGluZGV4IGluIHRoZSBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcHVibGljIGFkZE5ld1F1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgaW5kZXg6IG51bWJlciA9IC0xXG4gICk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb24gPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlLCBuYW1lKTtcbiAgICBpZiAoIXRoaXMuYWRkUXVlc3Rpb24ocXVlc3Rpb24sIGluZGV4KSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBhbmVsIGFuZCBhZGRzIGl0IGludG8gdGhlIGVuZCBvZiB0aGUgZWxlbWVudHMgbGlzdC4gUmV0dXJucyBudWxsLCBpZiB0aGUgcGFuZWwgY291bGQgbm90IGJlIGNyZWF0ZWQgb3IgY291bGQgbm90IGJlIGFkZGVkIGludG8gcGFnZSBvciBwYW5lbC5cbiAgICogQHBhcmFtIG5hbWUgYSBwYW5lbCBuYW1lXG4gICAqL1xuICBwdWJsaWMgYWRkTmV3UGFuZWwobmFtZTogc3RyaW5nID0gbnVsbCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlTmV3UGFuZWwobmFtZSk7XG4gICAgaWYgKCF0aGlzLmFkZFBhbmVsKHBhbmVsKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiBlbGVtZW50IHBhcmFtZXRlciBpbiB0aGUgZWxlbWVudHMgbGlzdC5cbiAgICogQHBhcmFtIGVsZW1lbnQgcXVlc3Rpb24gb3IgcGFuZWxcbiAgICovXG4gIHB1YmxpYyBpbmRleE9mKGVsZW1lbnQ6IElFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdQYW5lbChuYW1lOiBzdHJpbmcpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgcmVzID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICAgIHJlcy5uYW1lID0gbmFtZTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZWxlbWVudCAoUGFuZWwgb3IgUXVlc3Rpb24pIGZyb20gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqIEBzZWUgZWxlbWVudHNcbiAgICovXG4gIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgcXVlc3Rpb24gIGZyb20gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvblxuICAgKiBAc2VlIGVsZW1lbnRzXG4gICAqIEBzZWUgcmVtb3ZlRWxlbWVudFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHRoaXMucmVtb3ZlRWxlbWVudChxdWVzdGlvbik7XG4gIH1cbiAgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzLnNsaWNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgZWxlbWVudHNbaV0ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcpIHtcbiAgICAgIHRoaXMucnVuVmlzaWJsZUNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICB0aGlzLnJ1bkVuYWJsZUNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuUmVxdWlyZWRDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blZpc2libGVDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XG4gICAgdmFyIGNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy52aXNpYmxlSWYpO1xuICAgIGNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy52aXNpYmxlID0gcmVzO1xuICAgIH07XG4gICAgY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRW5hYmxlQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUlmKSByZXR1cm47XG4gICAgdmFyIGNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5lbmFibGVJZik7XG4gICAgY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gIXJlcztcbiAgICB9O1xuICAgIGNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blJlcXVpcmVkQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkSWYpIHJldHVybjtcbiAgICB2YXIgY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnJlcXVpcmVkSWYpO1xuICAgIGNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5pc1JlcXVpcmVkID0gcmVzO1xuICAgIH07XG4gICAgY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBlbHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbHNbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICB9XG4gIGNoZWNrQmluZGluZ3ModmFsdWVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgKDxCYXNlPig8YW55PmVsc1tpXSkpLmNoZWNrQmluZGluZ3ModmFsdWVOYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBkcmFnRHJvcEFkZFRhcmdldChkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbykge1xuICAgIHZhciBwcmV2Um93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3coZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb1JvdyhkcmFnRHJvcEluZm8sIHByZXZSb3cpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyhkcmFnRHJvcEluZm8udGFyZ2V0LCBwcmV2Um93KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGRyYWdEcm9wRmluZFJvdyhmaW5kRWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICBpZiAoIWZpbmRFbGVtZW50IHx8IGZpbmRFbGVtZW50LmlzUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGVsZW1lbnQgPSA8SUVsZW1lbnQ+ZmluZEVsZW1lbnQ7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocm93c1tpXS5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpID4gLTEpIHJldHVybiByb3dzW2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwbmwgPSB0aGlzLmVsZW1lbnRzW2ldLmdldFBhbmVsKCk7XG4gICAgICBpZiAoIXBubCkgY29udGludWU7XG4gICAgICB2YXIgcm93ID0gKDxQYW5lbE1vZGVsQmFzZT5wbmwpLmRyYWdEcm9wRmluZFJvdyhlbGVtZW50KTtcbiAgICAgIGlmICghIXJvdykgcmV0dXJuIHJvdztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvUm93KFxuICAgIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvLFxuICAgIHByZXZSb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkcmFnRHJvcEluZm8uZGVzdGluYXRpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsKGRyYWdEcm9wSW5mbykpIHJldHVybiB0cnVlO1xuICAgIHZhciBkZXN0ID0gZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIHZhciBkZXN0Um93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3coZGVzdCk7XG4gICAgaWYgKCFkZXN0Um93KSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWRyYWdEcm9wSW5mby50YXJnZXQuc3RhcnRXaXRoTmV3TGluZSlcbiAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FeGlzdGluZ1JvdyhcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLFxuICAgICAgICBkZXN0Um93LFxuICAgICAgICBwcmV2Um93XG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsKGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvKTogYm9vbGVhbiB7XG4gICAgaWYgKGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbi5pc1BhZ2UpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgICAgICB0aGlzLnJvb3QsXG4gICAgICAgIGRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgZGVzdCA9IDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKGRlc3QuaXNQYW5lbCAmJiAhZHJhZ0Ryb3BJbmZvLmlzRWRnZSkge1xuICAgICAgdmFyIHBhbmVsID0gPFBhbmVsTW9kZWxCYXNlPig8YW55PmRlc3QpO1xuICAgICAgaWYgKCg8YW55PmRyYWdEcm9wSW5mby50YXJnZXQpW1widGVtcGxhdGVcIl0gPT09IGRlc3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkcmFnRHJvcEluZm8ubmVzdGVkUGFuZWxEZXB0aCA8IDAgfHxcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLm5lc3RlZFBhbmVsRGVwdGggPj0gcGFuZWwuZGVwdGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsQ29yZShcbiAgICAgICAgICA8UGFuZWxNb2RlbEJhc2U+KDxhbnk+ZGVzdCksXG4gICAgICAgICAgZHJhZ0Ryb3BJbmZvLnRhcmdldCxcbiAgICAgICAgICBkcmFnRHJvcEluZm8uaXNCb3R0b21cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9FeGlzdGluZ1JvdyhcbiAgICBkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbyxcbiAgICBkZXN0Um93OiBRdWVzdGlvblJvd01vZGVsLFxuICAgIHByZXZSb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gZGVzdFJvdy5lbGVtZW50cy5pbmRleE9mKDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pO1xuICAgIGlmIChcbiAgICAgIGluZGV4ID09IDAgJiZcbiAgICAgICFkcmFnRHJvcEluZm8uaXNCb3R0b20gJiZcbiAgICAgIGRlc3RSb3cuZWxlbWVudHNbMF0uc3RhcnRXaXRoTmV3TGluZVxuICAgICkge1xuICAgICAgaWYgKGRlc3RSb3cuaW5kZXggPiAwKSB7XG4gICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbSA9IHRydWU7XG4gICAgICAgIGRlc3RSb3cgPSBkZXN0Um93LnBhbmVsLnJvd3NbZGVzdFJvdy5pbmRleCAtIDFdO1xuICAgICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPVxuICAgICAgICAgIGRlc3RSb3cuZWxlbWVudHNbZGVzdFJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KFxuICAgICAgICAgIGRyYWdEcm9wSW5mbyxcbiAgICAgICAgICBkZXN0Um93LFxuICAgICAgICAgIHByZXZSb3dcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHByZXZSb3dJbmRleCA9IC0xO1xuICAgIGlmIChwcmV2Um93ID09IGRlc3RSb3cpIHtcbiAgICAgIHByZXZSb3dJbmRleCA9IGRlc3RSb3cuZWxlbWVudHMuaW5kZXhPZihkcmFnRHJvcEluZm8udGFyZ2V0KTtcbiAgICB9XG4gICAgaWYgKGRyYWdEcm9wSW5mby5pc0JvdHRvbSkgaW5kZXgrKztcbiAgICB2YXIgc3JjUm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgIGlmIChcbiAgICAgIHNyY1JvdyA9PSBkZXN0Um93ICYmXG4gICAgICBzcmNSb3cuZWxlbWVudHMuaW5kZXhPZihkcmFnRHJvcEluZm8uc291cmNlKSA9PSBpbmRleFxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPT0gcHJldlJvd0luZGV4KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByZXZSb3dJbmRleCA+IC0xKSB7XG4gICAgICBkZXN0Um93LmVsZW1lbnRzLnNwbGljZShwcmV2Um93SW5kZXgsIDEpO1xuICAgICAgaWYgKHByZXZSb3dJbmRleCA8IGluZGV4KSBpbmRleC0tO1xuICAgIH1cbiAgICBkZXN0Um93LmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgZGVzdFJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgcmV0dXJuIHByZXZSb3dJbmRleCA8IDA7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvTmV3Um93KFxuICAgIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvLFxuICAgIGRlc3RSb3c6IFF1ZXN0aW9uUm93TW9kZWwsXG4gICAgcHJldlJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBib29sZWFuIHtcbiAgICB2YXIgdGFyZ2V0Um93ID0gZGVzdFJvdy5wYW5lbC5jcmVhdGVSb3dBbmRTZXRMYXp5KGRlc3RSb3cucGFuZWwucm93cy5sZW5ndGgpO1xuICAgIHRhcmdldFJvdy5hZGRFbGVtZW50KGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgIHZhciBpbmRleCA9IGRlc3RSb3cuaW5kZXg7XG4gICAgaWYgKGRyYWdEcm9wSW5mby5pc0JvdHRvbSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgLy9zYW1lIHJvd1xuICAgIGlmICghIXByZXZSb3cgJiYgcHJldlJvdy5wYW5lbCA9PSB0YXJnZXRSb3cucGFuZWwgJiYgcHJldlJvdy5pbmRleCA9PSBpbmRleClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgc3JjUm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgIGlmIChcbiAgICAgICEhc3JjUm93ICYmXG4gICAgICBzcmNSb3cucGFuZWwgPT0gdGFyZ2V0Um93LnBhbmVsICYmXG4gICAgICBzcmNSb3cuZWxlbWVudHMubGVuZ3RoID09IDEgJiZcbiAgICAgIHNyY1Jvdy5pbmRleCA9PSBpbmRleFxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZXN0Um93LnBhbmVsLnJvd3Muc3BsaWNlKGluZGV4LCAwLCB0YXJnZXRSb3cpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSxcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuXG4gICkge1xuICAgIHZhciB0YXJnZXRSb3cgPSBwYW5lbC5jcmVhdGVSb3coKTtcbiAgICB0YXJnZXRSb3cuYWRkRWxlbWVudCh0YXJnZXQpO1xuICAgIGlmIChwYW5lbC5lbGVtZW50cy5sZW5ndGggPT0gMCB8fCBpc0JvdHRvbSkge1xuICAgICAgcGFuZWwucm93cy5wdXNoKHRhcmdldFJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhbmVsLnJvd3Muc3BsaWNlKDAsIDAsIHRhcmdldFJvdyk7XG4gICAgfVxuICB9XG4gIGRyYWdEcm9wTW92ZUVsZW1lbnQoc3JjOiBJRWxlbWVudCwgdGFyZ2V0OiBJRWxlbWVudCwgdGFyZ2V0SW5kZXg6IG51bWJlcikge1xuICAgIHZhciBzcmNJbmRleCA9ICg8UGFuZWxNb2RlbEJhc2U+c3JjLnBhcmVudCkuZWxlbWVudHMuaW5kZXhPZihzcmMpO1xuICAgIGlmICh0YXJnZXRJbmRleCA+IHNyY0luZGV4KSB7XG4gICAgICB0YXJnZXRJbmRleC0tO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICB0aGlzLmFkZEVsZW1lbnQodGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIGlmICh0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMucm93c1tpXS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKDAsIHRoaXMucm93cy5sZW5ndGgpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnRzLnNwbGljZSgwLCB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBlbGVtZW50LCBzaW1pbGFyIHRvIHRoZSBQYWdlIG9iamVjdHMuIEhvd2V2ZXIsIHVubGlrZSB0aGUgUGFnZSwgUGFuZWwgY2FuJ3QgYmUgYSByb290LlxuICogSXQgbWF5IGNvbnRhaW4gcXVlc3Rpb25zIGFuZCBvdGhlciBwYW5lbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2VcbiAgaW1wbGVtZW50cyBJRWxlbWVudCwgSVRpdGxlT3duZXIge1xuICBwdWJsaWMgbWluV2lkdGg/OiBzdHJpbmc7XG4gIHB1YmxpYyBtYXhXaWR0aD86IHN0cmluZztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwid2lkdGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoISFzZWxmLnBhcmVudCkge1xuICAgICAgICBzZWxmLnBhcmVudC5lbGVtZW50V2lkdGhDaGFuZ2VkKHNlbGYpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImluZGVudFwiLCBcImlubmVySW5kZW50XCIsIFwicmlnaHRJbmRlbnRcIl0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vbkluZGVudENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFuZWxcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJfY29udGVudFwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgaWYgKGxpdmUpIHtcbiAgICAgIHJldHVybiAhIXRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuZ2V0U3VydmV5KGxpdmUpIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmdldFN1cnZleShsaXZlKTtcbiAgfVxuICBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQvc2V0IHRoZSBwYWdlIHdoZXJlIHRoZSBwYW5lbCBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlKCk6IElQYWdlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlKHRoaXMucGFyZW50KTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2UodmFsOiBJUGFnZSkge1xuICAgIHRoaXMuc2V0UGFnZSh0aGlzLnBhcmVudCwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnBhcmVudC5lbGVtZW50cyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBNb3ZlIHBhbmVsIHRvIGEgbmV3IGNvbnRhaW5lciBQYWdlL1BhbmVsLiBBZGQgYXMgYSBsYXN0IGVsZW1lbnQgaWYgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBpbmRleCxcbiAgICogaWYgaW5zZXJ0IHBhcmFtZXRlciBpcyBudW1iZXIsIG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZWxlbWVudCwgaWYgdGhlIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgYSBxdWVzdGlvbiBvciBwYW5lbFxuICAgKiBAcGFyYW0gY29udGFpbmVyIFBhZ2Ugb3IgUGFuZWwgdG8gd2hlcmUgYSBxdWVzdGlvbiBpcyByZWxvY2F0ZWQuXG4gICAqIEBwYXJhbSBpbnNlcnRCZWZvcmUgVXNlIGl0IGlmIHlvdSB3YW50IHRvIHNldCB0aGUgcGFuZWwgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbi4gWW91IG1heSB1c2UgYSBudW1iZXIgKHVzZSAwIHRvIGluc2VydCBpbnQgdGhlIGJlZ2lubmluZykgb3IgZWxlbWVudCwgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGJlZm9yZSB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKGNvbnRhaW5lcjogSVBhbmVsLCBpbnNlcnRCZWZvcmU6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG9CYXNlKHRoaXMucGFyZW50LCBjb250YWluZXIsIGluc2VydEJlZm9yZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhbmVsIGluIHRoZSBzdXJ2ZXkuIENvbW1vbmx5IGl0IGlzIC0xIGFuZCBpdCBkb2Vzbid0IHNob3cuXG4gICAqIFlvdSBoYXZlIHRvIHNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc2hvdyBpbmRleC9udW1iZXJpbmcgZm9yIHRoZSBQYW5lbFxuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc3RhcnQgc2hvd2luZyB0aGUgbnVtYmVyIGZvciB0aGlzIHBhbmVsLlxuICAgKiBAc2VlIHZpc2libGVJbmRleFxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93TnVtYmVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dOdW1iZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd051bWJlclwiLCB2YWwpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGVsZW1lbnRzIG51bWJlcnMgaW5zaWRlIHBhbmVsIGFyZSBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBkZWZhdWx0YCAtIGRpc3BsYXkgcXVlc3Rpb25zIG51bWJlcnMgYXMgZGVmaW5lZCBpbiBwYXJlbnQgcGFuZWwgb3Igc3VydmV5XG4gICAqIC0gYG9ucGFuZWxgIC0gZGlzcGxheSBxdWVzdGlvbnMgbnVtYmVycywgc3RhcnQgbnVtYmVyaW5nIGZyb20gYmVnaW5uaW5nIG9mIHRoaXMgcGFnZVxuICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1F1ZXN0aW9uTnVtYmVycygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIFwiZGVmYXVsdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGZpcnN0IHF1ZXN0aW9uIGluZGV4IGZvciBlbGVtZW50cyBpbnNpZGUgdGhlIHBhbmVsLiBUaGUgZmlyc3QgcXVlc3Rpb24gaW5kZXggaXMgJzEuJyBieSBkZWZhdWx0IGFuZCBpdCBpcyB0YWtlbiBmcm9tIHN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXggcHJvcGVydHkuXG4gICAqIFlvdSBtYXkgc3RhcnQgaXQgZnJvbSAnMTAwJyBvciBmcm9tICdBJywgYnkgc2V0dGluZyAnMTAwJyBvciAnQScgdG8gdGhpcyBwcm9wZXJ0eS5cbiAgICogWW91IGNhbiBzZXQgdGhlIHN0YXJ0IGluZGV4IHRvIFwiKDEpXCIgb3IgXCIjIEEpXCIgb3IgXCJhKVwiIHRvIHJlbmRlciBxdWVzdGlvbiBudW1iZXIgYXMgKDEpLCAjIEEpIGFuZCBhKSBhY2NvcmRpbmdseS5cbiAgICogQHNlZSBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblN0YXJ0SW5kZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgfVxuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCkgcmV0dXJuIHRoaXMucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBzdXBlci5nZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5vKHZpc2libGVJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCJub1wiLFxuICAgICAgSGVscGVycy5nZXROdW1iZXJCeUluZGV4KHRoaXMudmlzaWJsZUluZGV4LCB0aGlzLmdldFN0YXJ0SW5kZXgoKSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZpc2libGVJbmRleCA9IC0xO1xuICAgIGlmICh0aGlzLnNob3dOdW1iZXIgJiYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8ICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkpKSB7XG4gICAgICB2aXNpYmxlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIHZpc2libGVJbmRleCk7XG4gICAgdGhpcy5zZXRObyh2aXNpYmxlSW5kZXgpO1xuICAgIHJldHVybiB2aXNpYmxlSW5kZXggPCAwID8gMCA6IDE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsU3RhcnRJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib2ZmXCIpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25wYW5lbFwiKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQ29udGludWVOdW1iZXJpbmcoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9mZlwiICYmIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9ucGFuZWxcIlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICBzdXBlci5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQgJiYgcmVjLnJlc3VsdCAmJiByZWMuZmlyZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV4cGFuZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRUaXRsZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkIHx8IHRoaXMuaXNFeHBhbmRlZCkgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwiW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRSZW5kZXJlZFRpdGxlKHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsZWZ0IGluZGVudC4gU2V0IHRoaXMgcHJvcGVydHkgdG8gaW5jcmVhc2UgdGhlIHBhbmVsIGxlZnQgaW5kZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbm5lciBpbmRlbnQuIFNldCB0aGlzIHByb3BlcnR5IHRvIGluY3JlYXNlIHRoZSBwYW5lbCBjb250ZW50IG1hcmdpbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5uZXJJbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5uZXJJbmRlbnRcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5lckluZGVudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlubmVySW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIpO1xuICB9XG4gIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCByZW5kZXJzIG9uIHRoZSBuZXcgbGluZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGZhbHNlLCB0aGUgcGFuZWwgdHJpZXMgdG8gcmVuZGVyIG9uIHRoZSBzYW1lIGxpbmUvcm93IHdpdGggYSBwcmV2aW91cyBxdWVzdGlvbi9wYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIsIHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJpZ2h0IGluZGVudCBvZiB0aGUgUGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJpZ2h0SW5kZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJpZ2h0SW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmlnaHRJbmRlbnQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCB2YWwpO1xuICB9XG4gIGdldCBwYWRkaW5nTGVmdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCB2YWwpO1xuICB9XG4gIGdldCBpbm5lclBhZGRpbmdMZWZ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlubmVyUGFkZGluZ0xlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IGlubmVyUGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbm5lclBhZGRpbmdMZWZ0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHBhZGRpbmdSaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nUmlnaHRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdSaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgb25JbmRlbnRDaGFuZ2VkKCkge1xuICAgIGlmICghdGhpcy5nZXRTdXJ2ZXkoKSkgcmV0dXJuO1xuICAgIHRoaXMuaW5uZXJQYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmlubmVySW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMuaW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLnJpZ2h0SW5kZW50KTtcbiAgfVxuICBwcml2YXRlIGdldEluZGVudFNpemUoaW5kZW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRlbnQgPCAxKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgY3NzID0gKDxhbnk+dGhpcykuc3VydmV5W1wiY3NzXCJdO1xuICAgIGlmICghY3NzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gaW5kZW50ICogY3NzLnF1ZXN0aW9uLmluZGVudCArIFwicHhcIjtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBRdWVzdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgUGFuZWxNb2RlbCkge1xuICAgICAgICBlbGVtZW50LmNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRWRpdEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJwcmV2aWV3XCIpIHJldHVybiB0aGlzLmRlcHRoID09IDE7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3KCkge1xuICAgIGlmICghdGhpcy5oYXNFZGl0QnV0dG9uKSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuY2FuY2VsUHJldmlld0J5UGFnZSh0aGlzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1RpdGxlKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbC50aXRsZTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbC50aXRsZUV4cGFuZGFibGU7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRhaW5zRXJyb3JzKSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMucGFuZWwudGl0bGVPbkVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzRXJyb3IoKTogc3RyaW5nIHtcbiAgICB2YXIgcm9vdENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLmVycm9yLnJvb3Q7XG4gICAgcmV0dXJuIHJvb3RDbGFzcyA/IHJvb3RDbGFzcyA6IFwicGFuZWwtZXJyb3Itcm9vdFwiO1xuICB9XG4gIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB0aGlzLm5vdGlmeVN1cnZleU9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInBhbmVsYmFzZVwiLFxuICBbXG4gICAgXCJuYW1lXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJlbGVtZW50c1wiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcInF1ZXN0aW9uc1wiLFxuICAgICAgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ2aXNpYmxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIFwidmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJyZXF1aXJlZElmOmNvbmRpdGlvblwiLFxuICAgIFwicmVhZE9ubHk6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwiaGlkZGVuXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRGVzY3JpcHRpb25cIiB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFBhbmVsTW9kZWxCYXNlKCk7XG4gIH1cbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicGFuZWxcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImNvbGxhcHNlZFwiLCBcImV4cGFuZGVkXCJdLFxuICAgIH0sXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInN0YXJ0V2l0aE5ld0xpbmU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgXCJ3aWR0aFwiLFxuICAgIHsgbmFtZTogXCJpbm5lckluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdIH0sXG4gICAgeyBuYW1lOiBcImluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwYWdlXCIsXG4gICAgICBpc1NlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgICAgcmV0dXJuICFzdXJ2ZXkgfHwgc3VydmV5LnBhZ2VzLmxlbmd0aCA+IDE7XG4gICAgICB9LFxuICAgICAgY2hvaWNlczogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgdmFyIHN1cnZleSA9IG9iaiA/IG9iai5zdXJ2ZXkgOiBudWxsO1xuICAgICAgICByZXR1cm4gc3VydmV5XG4gICAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHAubmFtZSwgdGV4dDogcC50aXRsZSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwic2hvd051bWJlcjpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJvbnBhbmVsXCIsIFwib2ZmXCJdLFxuICAgIH0sXG4gICAgXCJxdWVzdGlvblN0YXJ0SW5kZXhcIixcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKCk7XG4gIH0sXG4gIFwicGFuZWxiYXNlXCJcbik7XG5cbkVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInBhbmVsXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUGFuZWxNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSwgRXZlbnRCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1xyXG4gIFBvcHVwVXRpbHMsXHJcbiAgVmVydGljYWxQb3NpdGlvbixcclxuICBIb3Jpem9udGFsUG9zaXRpb24sXHJcbiAgSVBvc2l0aW9uLFxyXG4gIElTaXplLFxyXG59IGZyb20gXCIuL3V0aWxzL3BvcHVwXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBNb2RlbCBleHRlbmRzIEJhc2Uge1xyXG4gIEBwcm9wZXJ0eSgpIGNvbnRlbnRDb21wb25lbnROYW1lOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgY29udGVudENvbXBvbmVudERhdGE6IGFueTtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiYm90dG9tXCIgfSkgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwibGVmdFwiIH0pIGhvcml6b250YWxQb3NpdGlvbjogSG9yaXpvbnRhbFBvc2l0aW9uO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgc2hvd1BvaW50ZXI6IGJvb2xlYW47XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBpc01vZGFsOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogKCkgPT4ge30gfSkgb25DYW5jZWw6ICgpID0+IHZvaWQ7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiAoKSA9PiB7cmV0dXJuIHRydWU7fSB9KSBvbkFwcGx5OiAoKSA9PiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogKCkgPT4ge30gfSkgb25IaWRlOiAoKSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogKCkgPT4ge30gfSkgb25TaG93OiAoKSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KSBjc3NDbGFzczogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgY29udGVudENvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRlbnRDb21wb25lbnREYXRhOiBhbnksXHJcbiAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBWZXJ0aWNhbFBvc2l0aW9uID0gXCJib3R0b21cIixcclxuICAgIGhvcml6b250YWxQb3NpdGlvbjogSG9yaXpvbnRhbFBvc2l0aW9uID0gXCJsZWZ0XCIsXHJcbiAgICBzaG93UG9pbnRlcjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBpc01vZGFsOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBvbkNhbmNlbCA9ICgpID0+IHt9LFxyXG4gICAgb25BcHBseSA9ICgpID0+IHtyZXR1cm4gdHJ1ZTt9LFxyXG4gICAgb25IaWRlID0gKCkgPT4ge30sXHJcbiAgICBvblNob3cgPSAoKSA9PiB7fSxcclxuICAgIGNzc0NsYXNzOiBzdHJpbmcgPSBcIlwiXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSA9IGNvbnRlbnRDb21wb25lbnROYW1lO1xyXG4gICAgdGhpcy5jb250ZW50Q29tcG9uZW50RGF0YSA9IGNvbnRlbnRDb21wb25lbnREYXRhO1xyXG4gICAgdGhpcy52ZXJ0aWNhbFBvc2l0aW9uID0gdmVydGljYWxQb3NpdGlvbjtcclxuICAgIHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uID0gaG9yaXpvbnRhbFBvc2l0aW9uO1xyXG4gICAgdGhpcy5zaG93UG9pbnRlciA9IHNob3dQb2ludGVyO1xyXG4gICAgdGhpcy5pc01vZGFsID0gaXNNb2RhbDtcclxuICAgIHRoaXMub25DYW5jZWwgPSBvbkNhbmNlbDtcclxuICAgIHRoaXMub25BcHBseSA9IG9uQXBwbHk7XHJcbiAgICB0aGlzLm9uSGlkZSA9IG9uSGlkZTtcclxuICAgIHRoaXMub25TaG93ID0gb25TaG93O1xyXG4gICAgdGhpcy5jc3NDbGFzcyA9IGNzc0NsYXNzO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgZmFsc2UpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlzVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdmFsdWUpO1xyXG4gICAgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2VkICYmIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlZCh2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5pc1Zpc2libGUpIHtcclxuICAgICAgdGhpcy5vblNob3coKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25IaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB0b2dnbGVWaXNpYmlsaXR5KCkge1xyXG4gICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBvblZpc2liaWxpdHlDaGFuZ2VkOiAoaXNWaXNpYmxlOiBib29sZWFuKSA9PiB2b2lkO1xyXG59XHJcblxyXG5jb25zdCBGT0NVU19JTlBVVF9TRUxFQ1RPUiA9XHJcbiAgXCJpbnB1dDpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSk6bm90KFt0eXBlPWhpZGRlbl0pLHNlbGVjdDpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSksdGV4dGFyZWE6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pLCBidXR0b246bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBCYXNlVmlld01vZGVsIGV4dGVuZHMgQmFzZSB7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcIjBweFwiIH0pIHRvcDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCIwcHhcIiB9KSBsZWZ0OiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImF1dG9cIiB9KSBoZWlnaHQ6IHN0cmluZztcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pIGlzVmlzaWJsZTogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwibGVmdFwiIH0pIHBvcHVwRGlyZWN0aW9uOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiB7IGxlZnQ6IFwiMHB4XCIsIHRvcDogXCIwcHhcIiB9IH0pXHJcbiAgcG9pbnRlclRhcmdldDogSVBvc2l0aW9uO1xyXG4gIHB1YmxpYyBjb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RlbDogUG9wdXBNb2RlbCwgcHVibGljIHRhcmdldEVsZW1lbnQ/OiBIVE1MRWxlbWVudCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubW9kZWwucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpc1Zpc2libGVcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY29udGVudENvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnROYW1lO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNvbnRlbnRDb21wb25lbnREYXRhKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jb250ZW50Q29tcG9uZW50RGF0YTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzaG93UG9pbnRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLnNob3dQb2ludGVyO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzTW9kYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5pc01vZGFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHN0eWxlQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGxldCBjc3MgPSB0aGlzLm1vZGVsLmNzc0NsYXNzO1xyXG4gICAgaWYgKHRoaXMuaXNNb2RhbCkge1xyXG4gICAgICBjc3MgKz0gXCIgc3YtcG9wdXAtLW1vZGFsXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1BvaW50ZXIpIHtcclxuICAgICAgY3NzICs9IFwiIHN2LXBvcHVwLS1zaG93LXBvaW50ZXJcIjtcclxuICAgICAgY3NzICs9IGAgc3YtcG9wdXAtLSR7dGhpcy5wb3B1cERpcmVjdGlvbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjc3M7XHJcbiAgfVxyXG4gIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiB8fCBldmVudC5rZXlDb2RlID09PSA5KSB7XHJcbiAgICAgIHRoaXMudHJhcEZvY3VzKGV2ZW50KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiIHx8IGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLm9uQ2FuY2VsKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb2RlbC5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSB0cmFwRm9jdXMoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICBGT0NVU19JTlBVVF9TRUxFQ1RPUlxyXG4gICAgKTtcclxuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzWzBdO1xyXG4gICAgY29uc3QgbGFzdEZvY3VzYWJsZUVsZW1lbnQgPVxyXG4gICAgICBmb2N1c2FibGVFbGVtZW50c1tmb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgIGlmIChldmVudC5zaGlmdEtleSkge1xyXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZmlyc3RGb2N1c2FibGVFbGVtZW50KSB7XHJcbiAgICAgICAgKDxIVE1MRWxlbWVudD5sYXN0Rm9jdXNhYmxlRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbGFzdEZvY3VzYWJsZUVsZW1lbnQpIHtcclxuICAgICAgICAoPEhUTUxFbGVtZW50PmZpcnN0Rm9jdXNhYmxlRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB1cGRhdGVPblNob3dpbmcoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNNb2RhbCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvY3VzRmlyc3RJbnB1dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGJhY2tncm91bmQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5jb250YWluZXIuY2hpbGRyZW5bMF07XHJcbiAgICBjb25zdCBwb3B1cENvbnRhaW5lciA9IDxIVE1MRWxlbWVudD5iYWNrZ3JvdW5kLmNoaWxkcmVuWzBdO1xyXG4gICAgY29uc3Qgc2Nyb2xsQ29udGVudCA9IDxIVE1MRWxlbWVudD5iYWNrZ3JvdW5kLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdO1xyXG4gICAgY29uc3QgaGVpZ2h0ID1cclxuICAgICAgcG9wdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0IC1cclxuICAgICAgc2Nyb2xsQ29udGVudC5vZmZzZXRIZWlnaHQgK1xyXG4gICAgICBzY3JvbGxDb250ZW50LnNjcm9sbEhlaWdodDtcclxuICAgIGNvbnN0IHdpZHRoID0gcG9wdXBDb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLmhlaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgbGV0IHZlcnRpY2FsUG9zaXRpb24gPSB0aGlzLm1vZGVsLnZlcnRpY2FsUG9zaXRpb247XHJcbiAgICBpZiAoISF3aW5kb3cpIHtcclxuICAgICAgdmVydGljYWxQb3NpdGlvbiA9IFBvcHVwVXRpbHMudXBkYXRlVmVydGljYWxQb3NpdGlvbihcclxuICAgICAgICByZWN0LFxyXG4gICAgICAgIGhlaWdodCxcclxuICAgICAgICB0aGlzLm1vZGVsLnZlcnRpY2FsUG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5tb2RlbC5zaG93UG9pbnRlcixcclxuICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucG9wdXBEaXJlY3Rpb24gPSBQb3B1cFV0aWxzLmNhbGN1bGF0ZVBvcHVwRGlyZWN0aW9uKFxyXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uLFxyXG4gICAgICB0aGlzLm1vZGVsLmhvcml6b250YWxQb3NpdGlvblxyXG4gICAgKTtcclxuICAgIGNvbnN0IHBvcyA9IFBvcHVwVXRpbHMuY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgIHJlY3QsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24sXHJcbiAgICAgIHRoaXMubW9kZWwuaG9yaXpvbnRhbFBvc2l0aW9uLFxyXG4gICAgICB0aGlzLnNob3dQb2ludGVyXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghIXdpbmRvdykge1xyXG4gICAgICBjb25zdCBuZXdWZXJ0aWNhbERpbWVuc2lvbnMgPSBQb3B1cFV0aWxzLnVwZGF0ZVZlcnRpY2FsRGltZW5zaW9ucyhcclxuICAgICAgICBwb3MudG9wLFxyXG4gICAgICAgIGhlaWdodCxcclxuICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgaWYgKCEhbmV3VmVydGljYWxEaW1lbnNpb25zKSB7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBuZXdWZXJ0aWNhbERpbWVuc2lvbnMuaGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgICAgIHBvcy50b3AgPSBuZXdWZXJ0aWNhbERpbWVuc2lvbnMudG9wO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmxlZnQgPSBwb3MubGVmdCArIFwicHhcIjtcclxuICAgIHRoaXMudG9wID0gcG9zLnRvcCArIFwicHhcIjtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93UG9pbnRlcikge1xyXG4gICAgICB0aGlzLnBvaW50ZXJUYXJnZXQgPSBQb3B1cFV0aWxzLmNhbGN1bGF0ZVBvaW50ZXJUYXJnZXQoXHJcbiAgICAgICAgcmVjdCxcclxuICAgICAgICBwb3MudG9wLFxyXG4gICAgICAgIHBvcy5sZWZ0LFxyXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5tb2RlbC5ob3Jpem9udGFsUG9zaXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlclRhcmdldC50b3AgKz0gXCJweFwiO1xyXG4gICAgdGhpcy5wb2ludGVyVGFyZ2V0LmxlZnQgKz0gXCJweFwiO1xyXG4gIH1cclxuICBwcml2YXRlIGZvY3VzRmlyc3RJbnB1dCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB2YXIgZWwgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKEZPQ1VTX0lOUFVUX1NFTEVDVE9SKTtcclxuICAgICAgaWYgKCEhZWwpICg8SFRNTEVsZW1lbnQ+ZWwpLmZvY3VzKCk7XHJcbiAgICAgIGVsc2UgKDxIVE1MRWxlbWVudD50aGlzLmNvbnRhaW5lci5jaGlsZHJlblswXSkuZm9jdXMoKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBjbGlja091dHNpZGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc01vZGFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubW9kZWwuaXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLm1vZGVsLm9uQ2FuY2VsKCk7XHJcbiAgICB0aGlzLm1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuICBwdWJsaWMgYXBwbHkoKSB7XHJcbiAgICBpZiAoISF0aGlzLm1vZGVsLm9uQXBwbHkgJiYgIXRoaXMubW9kZWwub25BcHBseSgpKSByZXR1cm47XHJcbiAgICB0aGlzLm1vZGVsLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNhbmNlbEJ1dHRvblRleHQoKSB7XHJcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1vZGFsQ2FuY2VsQnV0dG9uVGV4dFwiKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBhcHBseUJ1dHRvblRleHQoKSB7XHJcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1vZGFsQXBwbHlCdXR0b25UZXh0XCIpO1xyXG4gIH1cclxuICBwdWJsaWMgZGlzcG9zZSgpIHtcclxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMubW9kZWwub25WaXNpYmlsaXR5Q2hhbmdlZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgcHVibGljIGNyZWF0ZVBvcHVwQ29udGFpbmVyKCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICB9XHJcbiAgcHVibGljIG1vdW50UG9wdXBDb250YWluZXIoKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcclxuICB9XHJcbiAgcHVibGljIGluaXRpYWxpemVQb3B1cENvbnRhaW5lcigpIHtcclxuICAgIHRoaXMuY3JlYXRlUG9wdXBDb250YWluZXIoKTtcclxuICAgIHRoaXMubW91bnRQb3B1cENvbnRhaW5lcigpO1xyXG4gIH1cclxuICBwdWJsaWMgZGVzdHJveVBvcHVwQ29udGFpbmVyKCkge1xyXG4gICAgdGhpcy5jb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciwgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge1xuICBJRWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBJUGFuZWwsXG4gIElDb25kaXRpb25SdW5uZXIsXG4gIElTdXJ2ZXlJbXBsLFxuICBJUGFnZSxcbiAgSVRpdGxlT3duZXIsXG4gIElQcm9ncmVzc0luZm8sXG4gIElTdXJ2ZXksXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBBbnN3ZXJSZXF1aXJlZEVycm9yLCBDdXN0b21FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciwgVmFsaWRhdG9yUnVubmVyIH0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBUZXh0UHJlUHJvY2Vzc29yLCBUZXh0UHJlUHJvY2Vzc29yVmFsdWUgfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyLCBFeHByZXNzaW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25DdXN0b21XaWRnZXQgfSBmcm9tIFwiLi9xdWVzdGlvbkN1c3RvbVdpZGdldHNcIjtcbmltcG9ydCB7IEN1c3RvbVdpZGdldENvbGxlY3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvbkN1c3RvbVdpZGdldHNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCIuL3JlbmRlcmVyRmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29uZGl0aW9uT2JqZWN0IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCBxdWVzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRcbiAgaW1wbGVtZW50c1xuICAgIElRdWVzdGlvbixcbiAgICBJQ29uZGl0aW9uUnVubmVyLFxuICAgIElMb2NhbGl6YWJsZU93bmVyLFxuICAgIElWYWxpZGF0b3JPd25lcixcbiAgICBJVGl0bGVPd25lciB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBUZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwID0ge1xuICAgIHRpdGxlOiBcInByb2Nlc3NlZFRpdGxlXCIsXG4gICAgcmVxdWlyZTogXCJyZXF1aXJlZFRleHRcIixcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcXVlc3Rpb25Db3VudGVyID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyBnZXRRdWVzdGlvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3FfXCIgKyBRdWVzdGlvbi5xdWVzdGlvbkNvdW50ZXIrKztcbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0N1c3RvbVdpZGdldFJlcXVlc3RlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjdXN0b21XaWRnZXRWYWx1ZTogUXVlc3Rpb25DdXN0b21XaWRnZXQ7XG4gIGN1c3RvbVdpZGdldERhdGEgPSB7IGlzTmVlZFJlbmRlcjogdHJ1ZSB9O1xuICBmb2N1c0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBzdXJ2ZXlMb2FkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIGRpc3BsYXlWYWx1ZUNhbGxiYWNrOiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB0ZXh0UHJlUHJvY2Vzc29yOiBUZXh0UHJlUHJvY2Vzc29yO1xuICBwcml2YXRlIGNvbmRpdGlvbkVuYWJlbFJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGNvbmRpdGlvblJlcXVpcmVkUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHZhbHVlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb21tZW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICB2YWxpZGF0ZVZhbHVlQ2FsbGJhY2s6ICgpID0+IFN1cnZleUVycm9yO1xuICBxdWVzdGlvblRpdGxlVGVtcGxhdGVDYWxsYmFjazogKCkgPT4gc3RyaW5nO1xuICBhZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2s6IChxdWVzdGlvbjogUXVlc3Rpb24sIGVsZW1lbnQ6IGFueSkgPT4gYW55O1xuICB2YWx1ZUZyb21EYXRhQ2FsbGJhY2s6ICh2YWw6IGFueSkgPT4gYW55O1xuICB2YWx1ZVRvRGF0YUNhbGxiYWNrOiAodmFsOiBhbnkpID0+IGFueTtcbiAgb25HZXRTdXJ2ZXk6ICgpID0+IElTdXJ2ZXk7XG4gIHByaXZhdGUgbG9jUHJvY2Vzc2VkVGl0bGU6IExvY2FsaXphYmxlU3RyaW5nO1xuICBwcm90ZWN0ZWQgaXNSZWFkeVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gaXNSZWFkeSBwcm9wZXJ0eSBvZiBxdWVzdGlvbiBpcyBjaGFuZ2VkLlxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uIC0gdGhlIHF1ZXN0aW9uXG4gICAqIDxici8+IG9wdGlvbnMuaXNSZWFkeSAtIGN1cnJlbnQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKiA8YnIvPiBvcHRpb25zLm9sZElzUmVhZHkgLSBvbGQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKi9cbiAgcHVibGljIG9uUmVhZHlDaGFuZ2VkOiBFdmVudEJhc2U8UXVlc3Rpb24+ID0gdGhpcy5hZGRFdmVudDxRdWVzdGlvbj4oKTtcblxuICBwdWJsaWMgaXNSZWFkT25seVJlbmRlckRpdigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5ICYmIHNldHRpbmdzLnJlYWRPbmx5Q29tbWVudFJlbmRlck1vZGUgPT09IFwiZGl2XCI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmlkID0gUXVlc3Rpb24uZ2V0UXVlc3Rpb25JZCgpO1xuICAgIHRoaXMub25DcmVhdGluZygpO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2YWxpZGF0b3JzXCIsICh2YWxpZGF0b3I6IGFueSkgPT4ge1xuICAgICAgdmFsaWRhdG9yLmVycm9yT3duZXIgPSB0aGlzO1xuICAgIH0pO1xuICAgIHZhciBsb2NUaXRsZVZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIGxvY1RpdGxlVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICB0ZXh0ID0gdGhpcy5uYW1lO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIHRleHQ7XG4gICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGUodGhpcywgdGV4dCk7XG4gICAgfTtcbiAgICB0aGlzLmxvY1Byb2Nlc3NlZFRpdGxlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMsIHRydWUpO1xuICAgIHRoaXMubG9jUHJvY2Vzc2VkVGl0bGUuc2hhcmVkRGF0YSA9IGxvY1RpdGxlVmFsdWU7XG4gICAgdmFyIGxvY0NvbW1lbnRUZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwiY29tbWVudFRleHRcIixcbiAgICAgIHRoaXMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBsb2NDb21tZW50VGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJ3aWR0aFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgICBpZiAoISF0aGlzLnBhcmVudCkge1xuICAgICAgICB0aGlzLnBhcmVudC5lbGVtZW50V2lkdGhDaGFuZ2VkKHRoaXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpc1JlcXVpcmVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMubG9jVGl0bGUub25DaGFuZ2VkKCk7XG4gICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJpbmRlbnRcIiwgXCJyaWdodEluZGVudFwiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaGFzQ29tbWVudFwiLCBcImhhc090aGVyXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRDb21tZW50RnJvbVN1cnZleSgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICBpZiAobGl2ZSkge1xuICAgICAgcmV0dXJuICEhdGhpcy5wYXJlbnQgPyAoPEJhc2U+KDxhbnk+dGhpcy5wYXJlbnQpKS5nZXRTdXJ2ZXkobGl2ZSkgOiBudWxsO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLm9uR2V0U3VydmV5KSByZXR1cm4gdGhpcy5vbkdldFN1cnZleSgpO1xuICAgIHJldHVybiBzdXBlci5nZXRTdXJ2ZXkoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWVOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy52YWx1ZU5hbWUpIHJldHVybiB0aGlzLnZhbHVlTmFtZS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIHN0b3JlIHRoZSBxdWVzdGlvbiByZXN1bHQgaW4gdGhlIG5hbWUgZGlmZmVyZW50IGZyb20gdGhlIHF1ZXN0aW9uIG5hbWUuXG4gICAqIFF1ZXN0aW9uIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZSBpbiB0aGUgc3VydmV5IGFuZCB2YWx1ZU5hbWUgY291bGQgYmUgbm90IHVuaXF1ZS4gSXQgYWxsb3dzIHRvIHNoYXJlIGRhdGEgYmV0d2VlbiBzZXZlcmFsIHF1ZXN0aW9ucyB3aXRoIHRoZSBzYW1lIHZhbHVlTmFtZS5cbiAgICogVGhlIGxpYnJhcnkgc2V0IHRoZSB2YWx1ZSBhdXRvbWF0aWNhbGx5IGlmIHRoZSBxdWVzdGlvbi5uYW1lIHByb3BlcnR5IGlzIG5vdCB2YWxpZC4gRm9yIGV4YW1wbGUsIGlmIGl0IGNvbnRhaW5zIHRoZSBwZXJpb2QgJy4nIHN5bWJvbC5cbiAgICogSW4gdGhpcyBjYXNlIGlmIHlvdSBzZXQgdGhlIHF1ZXN0aW9uLm5hbWUgcHJvcGVydHkgdG8gJ3gueScgdGhlbiB0aGUgdmFsdWVOYW1lIGJlY29tZXMgJ3ggeScuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgbmFtZVxuICAgKi9cbiAgcHVibGljIGdldCB2YWx1ZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdmFyIG9sZFZhbHVlTmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIHZhbCk7XG4gICAgdGhpcy5vblZhbHVlTmFtZUNoYW5nZWQob2xkVmFsdWVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZU5hbWVDaGFuZ2VkKG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW5hbWVkKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgICEhb2xkVmFsdWUgPyBvbGRWYWx1ZSA6IHRoaXMubmFtZVxuICAgICk7XG4gICAgdGhpcy5pbml0RGF0YUZyb21TdXJ2ZXkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25OYW1lQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NUaXRsZS5vbkNoYW5nZWQoKTtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW5hbWVkKFxuICAgICAgdGhpcyxcbiAgICAgIG9sZFZhbHVlLFxuICAgICAgdGhpcy52YWx1ZU5hbWUgPyB0aGlzLnZhbHVlTmFtZSA6IG9sZFZhbHVlXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkeVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgaXMgcXVlc3Rpb24gcmVhZHkgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgY2hvaWNlc0xvYWRlZCgpOiB2b2lkIHt9XG4gIC8qKlxuICAgKiBHZXQvc2V0IHRoZSBwYWdlIHdoZXJlIHRoZSBxdWVzdGlvbiBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlKCk6IElQYWdlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlKHRoaXMucGFyZW50KTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2UodmFsOiBJUGFnZSkge1xuICAgIHRoaXMuc2V0UGFnZSh0aGlzLnBhcmVudCwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWwoKTogSVBhbmVsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnBhcmVudC5lbGVtZW50cyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNGbG93TGF5b3V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldExheW91dFR5cGUoKSA9PT0gXCJmbG93XCI7XG4gIH1cbiAgcHVibGljIGdldExheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkcmVuTGF5b3V0VHlwZSgpO1xuICAgIHJldHVybiBcInJvd1wiO1xuICB9XG4gIGlzTGF5b3V0VHlwZVN1cHBvcnRlZChsYXlvdXRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGF5b3V0VHlwZSAhPT0gXCJmbG93XCI7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBnZXQvc2V0IHRoZSBxdWVzdGlvbiB2aXNpYmlsaXR5LlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsID09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdmFsKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB0aGlzLm5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAodGhpcy5pc1Zpc2libGUgJiYgdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNDbGVhclZhbHVlT25IaWRkZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLmVycm9ycyAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGNob29zZSBob3cgb3RoZXIgcXVlc3Rpb24gdmFsdWVzIHdpbGwgYmUgcmVuZGVyZWQgaW4gdGl0bGUgaWYgcmVmZXJlbmNlZCBpbiB7fS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCB1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXNlRGlzcGxheVZhbHVlc0luVGl0bGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFF1ZXN0aW9uIGJlY29tZXMgdmlzaWJsZSBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUXVlc3Rpb24gYmVjb21lcyBpbnZpc2libGUuIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiB2aXNpYmxlIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gaXMgdmlzaWJsZSBvciBzdXJ2ZXkgaXMgaW4gZGVzaWduIG1vZGUgcmlnaHQgbm93LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmFyZUVtcHR5RWxlbWVudHNIaWRkZW4gJiYgdGhpcy5pc0VtcHR5KCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZSB8fCB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmlzaWJsZSBpbmRleCBvZiB0aGUgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS4gSXQgY2FuIGJlIGZyb20gMCB0byBhbGwgdmlzaWJsZSBxdWVzdGlvbnMgY291bnQgLSAxXG4gICAqIFRoZSB2aXNpYmxlSW5kZXggaXMgLTEgaWYgdGhlIHRpdGxlIGlzICdoaWRkZW4nIG9yIGhpZGVOdW1iZXIgaXMgdHJ1ZVxuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBoaWRlTnVtYmVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgLTEpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaGlkZU51bWJlciB0byB0cnVlIHRvIHN0b3Agc2hvd2luZyB0aGUgbnVtYmVyIGZvciB0aGlzIHF1ZXN0aW9uLiBUaGUgcXVlc3Rpb24gd2lsbCBub3QgYmUgY291bnRlclxuICAgKiBAc2VlIHZpc2libGVJbmRleFxuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaGlkZU51bWJlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZU51bWJlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVOdW1iZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZU51bWJlclwiLCB2YWwpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiBtYXkgaGF2ZSBhIHRpdGxlIGxvY2F0ZWQgb24gdGhlIGxlZnRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGFzIGEgc3RyaW5nIGFzIGl0IHJlcHJlc2VudHMgaW4gdGhlIGpzb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInF1ZXN0aW9uXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1F1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBNb3ZlIHF1ZXN0aW9uIHRvIGEgbmV3IGNvbnRhaW5lciBQYWdlL1BhbmVsLiBBZGQgYXMgYSBsYXN0IGVsZW1lbnQgaWYgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBpbmRleCxcbiAgICogaWYgaW5zZXJ0IHBhcmFtZXRlciBpcyBudW1iZXIsIG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZWxlbWVudCwgaWYgdGhlIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgYSBxdWVzdGlvbiBvciBwYW5lbFxuICAgKiBAcGFyYW0gY29udGFpbmVyIFBhZ2Ugb3IgUGFuZWwgdG8gd2hlcmUgYSBxdWVzdGlvbiBpcyByZWxvY2F0ZWQuXG4gICAqIEBwYXJhbSBpbnNlcnRCZWZvcmUgVXNlIGl0IGlmIHlvdSB3YW50IHRvIHNldCB0aGUgcXVlc3Rpb24gdG8gYSBzcGVjaWZpYyBwb3NpdGlvbi4gWW91IG1heSB1c2UgYSBudW1iZXIgKHVzZSAwIHRvIGluc2VydCBpbnQgdGhlIGJlZ2lubmluZykgb3IgZWxlbWVudCwgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGJlZm9yZSB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKGNvbnRhaW5lcjogSVBhbmVsLCBpbnNlcnRCZWZvcmU6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG9CYXNlKHRoaXMucGFyZW50LCBjb250YWluZXIsIGluc2VydEJlZm9yZSk7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICBpZiAoIXRoaXMuaGFzSW5wdXQpIHJldHVybiBzdXBlci5nZXRQcm9ncmVzc0luZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlc3Rpb25Db3VudDogMSxcbiAgICAgIGFuc3dlcmVkUXVlc3Rpb25Db3VudDogIXRoaXMuaXNFbXB0eSgpID8gMSA6IDAsXG4gICAgICByZXF1aXJlZFF1ZXN0aW9uQ291bnQ6IHRoaXMuaXNSZXF1aXJlZCA/IDEgOiAwLFxuICAgICAgcmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6ICF0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmlzUmVxdWlyZWQgPyAxIDogMCxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kYXRhICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICAgIHRoaXMucnVuQ29uZGl0aW9uKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksXG4gICAgICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5xdWVzdGlvbkNyZWF0ZWQodGhpcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgcHVibGljIGdldERhdGFGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHZhciBwcm9wcyA9ICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpIDoge307XG4gICAgcHJvcHMucXVlc3Rpb24gPSB0aGlzO1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuICAvKipcbiAgICogQSBwYXJlbnQgZWxlbWVudC4gSXQgY2FuIGJlIHBhbmVsIG9yIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYXJlbnRcIiwgbnVsbCk7XG4gIH1cbiAgcHVibGljIHNldCBwYXJlbnQodmFsOiBJUGFuZWwpIHtcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbkNzcygpO1xuICAgIHRoaXMub25QYXJlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBwYXJlbnRRdWVzdGlvblZhbHVlOiBRdWVzdGlvbiA9IG51bGw7XG4gIC8qKlxuICAgKiBBIHBhcmVudCBxdWVzdGlvbi4gSXQgY2FuIGJlIGEgZHluYW1pYyBwYW5lbCBvciBkeW5hbWljL2Ryb3Bkb3duIG1hdHJpY2VzLiBJZiB0aGUgdmFsdWUgaXMgYSBtYXRyaXgsIGl0IG1lYW5zIHRoYXQgcXVlc3Rpb24gaXMgYSBjZWxsIHF1ZXN0aW9uLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG51bGwgZm9yIGEgc3RhbmQgYWxvbmUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRRdWVzdGlvblZhbHVlO1xuICB9XG4gIHNldFBhcmVudFF1ZXN0aW9uKHZhbDogUXVlc3Rpb24pIHtcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uVmFsdWUgPSB2YWw7XG4gICAgdGhpcy5vblBhcmVudFF1ZXN0aW9uQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvblBhcmVudFF1ZXN0aW9uQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBvblBhcmVudENoYW5nZWQoKSB7fVxuICAvKipcbiAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcXVlc3Rpb24gZG9lc24ndCBoYXZlIGEgdGl0bGUgcHJvcGVydHksIGZvciBleGFtcGxlOiBRdWVzdGlvbkh0bWxNb2RlbCwgb3IgdGl0bGVMb2NhdGlvbiBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJoaWRkZW5cIlxuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpICE9PSBcImhpZGRlblwiO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGlzIHBhbmVsL3BhZ2UuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHZhciBpc1Zpc2liaWxpdHlDaGFuZ2VkID1cbiAgICAgIHRoaXMudGl0bGVMb2NhdGlvbiA9PSBcImhpZGRlblwiIHx8IHZhbHVlID09IFwiaGlkZGVuXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgaWYgKGlzVmlzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlTdXJ2ZXlWaXNpYmlsaXR5Q2hhbmdlZCgpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaXNDbGVhclZhbHVlT25IaWRkZW4gJiYgIXRoaXMudmlzaWJsZSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHRpdGxlIGxvY2F0aW9uIGJhc2VkIG9uIHF1ZXN0aW9uIHRpdGxlTG9jYXRpb24gcHJvcGVydHkgYW5kIFF1ZXN0aW9uVGl0bGVMb2NhdGlvbiBvZiBpdCdzIHBhcmVudHNcbiAgICogQHNlZSB0aXRsZUxvY2F0aW9uXG4gICAqIEBzZWUgUGFuZWxNb2RlbEJhc2UuUXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwuUXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0VGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRmxvd0xheW91dCkgcmV0dXJuIFwiaGlkZGVuXCI7XG4gICAgdmFyIGxvY2F0aW9uID0gdGhpcy5nZXRUaXRsZUxvY2F0aW9uQ29yZSgpO1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJsZWZ0XCIgJiYgIXRoaXMuaXNBbGxvd1RpdGxlTGVmdCkgbG9jYXRpb24gPSBcInRvcFwiO1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VGl0bGVMb2NhdGlvbkNvcmUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50aXRsZUxvY2F0aW9uICE9PSBcImRlZmF1bHRcIikgcmV0dXJuIHRoaXMudGl0bGVMb2NhdGlvbjtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICAgIHJldHVybiBcInRvcFwiO1xuICB9XG4gIGdldCBoYXNUaXRsZU9uTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJsZWZ0XCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVGl0bGUgJiYgdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgPT09IFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVGl0bGUgJiYgdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgPT09IFwiYm90dG9tXCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25MZWZ0VG9wKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5oYXNUaXRsZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpO1xuICAgIHJldHVybiBsb2NhdGlvbiA9PT0gXCJsZWZ0XCIgfHwgbG9jYXRpb24gPT09IFwidG9wXCI7XG4gIH1cbiAgcHVibGljIGdldCBlcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uIDogXCJ0b3BcIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcXVlc3Rpb24gZG9lc24ndCBoYXZlIGFuIGlucHV0IGVsZW1lbnQsIGZvciBleGFtcGxlOiBRdWVzdGlvbkh0bWxNb2RlbFxuICAgKiBAc2VlIGhhc1NpbmdsZUlucHV0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBxdWVzdGlvbiBkb2Vzbid0IGhhdmUgYW4gaW5wdXQgZWxlbWVudCBvciBoYXZlIG11bHRpcGxlIGlucHV0czogbWF0cmljZXMgb3IgcGFuZWwgZHluYW1pY1xuICAgKiBAc2VlIGhhc0lucHV0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0lucHV0O1xuICB9XG4gIHB1YmxpYyBnZXQgaW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJpXCI7XG4gIH1cbiAgLyoqXG4gICAqIFF1ZXN0aW9uIHRpdGxlLiBVc2Ugc3VydmV5IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIHRpdGxlIHF1ZXN0aW9uIGlzIHJlbmRlcmVkLiBJZiBpdCBpcyBlbXB0eSwgdGhlbiBxdWVzdGlvbiBuYW1lIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZVRlbXBsYXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGl0bGVcIiwgdGhpcy5uYW1lKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0aXRsZVwiKTtcbiAgfVxuICAvKipcbiAgICogUXVlc3Rpb24gZGVzY3JpcHRpb24uIEl0IHJlbmRlcnMgdW5kZXIgcXVlc3Rpb24gdGl0bGUgYnkgdXNpbmcgc21hbGxlciBmb250LiBVbmxpa2UgdGhlIHRpdGxlLCBkZXNjcmlwdGlvbiBjYW4gYmUgZW1wdHkuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGxvY2FsaXphYmxlOiB0cnVlIH0pXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRdWVzdGlvbiBkZXNjcmlwdGlvbiBsb2NhdGlvbi4gQnkgZGVmYXVsdCwgdmFsdWUgaXMgXCJkZWZhdWx0XCIgYW5kIGl0IGRlcGVuZHMgb24gc3VydmV5IHF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvbiBwcm9wZXJ0eVxuICAgKiBZb3UgbWF5IGNoYW5nZSBpdCB0byBcInVuZGVySW5wdXRcIiB0byByZW5kZXIgaXQgdW5kZXIgcXVlc3Rpb24gaW5wdXQgb3IgXCJ1bmRlclRpdGxlXCIgdG8gcmVuZGVyZWQgaXQgdW5kZXIgdGl0bGUuXG4gICAqIEBzZWUgZGVzY3JpcHRpb25cbiAgICogQHNlZSBTdXJ2ZXkucXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXNjcmlwdGlvbkxvY2F0aW9uXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlclRpdGxlXCI7XG4gIH1cbiAgZ2V0IGhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlcklucHV0XCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkge1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uTG9jYXRpb24gIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbkxvY2F0aW9uO1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5XG4gICAgICA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblxuICAgICAgOiBcInVuZGVyVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsaWNrVGl0bGVGdW5jdGlvbigpOiBhbnkge1xuICAgIGlmICh0aGlzLmhhc0lucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZWxmLmlzQ29sbGFwc2VkKSByZXR1cm47XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNlbGYuZm9jdXMoKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogVGhlIGN1c3RvbSB0ZXh0IHRoYXQgd2lsbCBiZSBzaG93biBvbiByZXF1aXJlZCBlcnJvci4gVXNlIHRoaXMgcHJvcGVydHksIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHRoZSBkZWZhdWx0IHRleHQuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRFcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldCBvciBzZXQgdGhlIGNvbW1lbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJjb21tZW50VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tbWVudFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbW1lbnRUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0NvbW1lbnRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbW1lbnRUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29weSBvZiBxdWVzdGlvbiBlcnJvcnMgc3VydmV5LiBGb3Igc29tZSBxdWVzdGlvbnMgbGlrZSBtYXRyaXggYW5kIHBhbmVsIGR5bmFtaWMgaXQgaW5jbHVkZXMgdGhlIGVycm9ycyBvZiBuZXN0ZWQgcXVlc3Rpb25zLlxuICAgKi9cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5zbGljZSgpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvckJ5VHlwZShlcnJvclR5cGU6IHN0cmluZyk6IFN1cnZleUVycm9yIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5lcnJvcnNbaV0uZ2V0RXJyb3JUeXBlKCkgPT09IGVycm9yVHlwZSkgcmV0dXJuIHRoaXMuZXJyb3JzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpbmsgdG8gdGhlIGN1c3RvbSB3aWRnZXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1c3RvbVdpZGdldCgpOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgaWYgKCF0aGlzLmlzQ3VzdG9tV2lkZ2V0UmVxdWVzdGVkICYmICF0aGlzLmN1c3RvbVdpZGdldFZhbHVlKSB7XG4gICAgICB0aGlzLmlzQ3VzdG9tV2lkZ2V0UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudXBkYXRlQ3VzdG9tV2lkZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1c3RvbVdpZGdldFZhbHVlO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDdXN0b21XaWRnZXQoKSB7XG4gICAgdGhpcy5jdXN0b21XaWRnZXRWYWx1ZSA9IEN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuZ2V0Q3VzdG9tV2lkZ2V0KFxuICAgICAgdGhpc1xuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5oYXNTaW5nbGVJbnB1dCkgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dCh0aGlzLCBlbCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclF1ZXN0aW9uKHRoaXMsIGVsKTtcbiAgICBpZiAoISF0aGlzLmFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjaykge1xuICAgICAgdGhpcy5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sodGhpcywgZWwpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHt9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZW5kcmVkIHF1ZXN0aW9uIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHtcbiAgICB2YXIgcmVzID0gdGhpcy5sb2NQcm9jZXNzZWRUaXRsZS50ZXh0T3JIdG1sO1xuICAgIHJldHVybiByZXMgPyByZXMgOiB0aGlzLm5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRpdGxlIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHF1ZXN0aW9uIHRlbXBsYXRlLlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVxuICAgKi9cbiAgcHVibGljIGdldCBmdWxsVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0aXRsZVBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVQYXR0ZXJuIDogXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRPblN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJyZXF1aXJlTnVtVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwibnVtUmVxdWlyZVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBRdWVzdGlvbiByZW5kZXJzIG9uIHRoZSBuZXcgbGluZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGZhbHNlLCB0aGUgcXVlc3Rpb24gdHJpZXMgdG8gcmVuZGVyIG9uIHRoZSBzYW1lIGxpbmUvcm93IHdpdGggYSBwcmV2aW91cyBxdWVzdGlvbi9wYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIsIHZhbCk7XG4gIH1cbiAgQHByb3BlcnR5KCkgY3NzQ2xhc3Nlc1ZhbHVlOiBhbnk7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBjc3MgY2xhc3NlcyB0aGF0IHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgcXVlc3Rpb24uIFlvdSBtYXkgdXNlIHN1cnZleS51cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMgZXZlbnQgdG8gb3ZlcnJpZGUgY3NzIGNsYXNzZXMgZm9yIGEgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwudXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5jYWxjQ3NzQ2xhc3NlcygpO1xuICAgIGlmICghdGhpcy5jc3NDbGFzc2VzVmFsdWUpIHtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdGhpcy5jYWxjQ3NzQ2xhc3NlcygpO1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzQ29yZSh0aGlzLmNzc0NsYXNzZXNWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXNWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGNhbGNDc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgdmFyIGNzcyA9IHRoaXMuY3NzO1xuICAgIHZhciBjbGFzc2VzID0geyBlcnJvcjoge30gfTtcbiAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMsIGNzcy5xdWVzdGlvbik7XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLmVycm9yLCBjc3MuZXJyb3IpO1xuICAgIHRoaXMudXBkYXRlQ3NzQ2xhc3NlcyhjbGFzc2VzLCBjc3MpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkudXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKHRoaXMsIGNsYXNzZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1Jvb3QoKTogc3RyaW5nIHtcbiAgICB0aGlzLmVuc3VyZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzUm9vdFwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzUm9vdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc1Jvb3RcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzUm9vdChjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPVxuICAgICAgdGhpcy5pc0Zsb3dMYXlvdXQgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlXG4gICAgICAgID8gY3NzQ2xhc3Nlcy5mbG93Um9vdFxuICAgICAgICA6IGNzc0NsYXNzZXMubWFpblJvb3Q7XG4gICAgaWYgKCFyZXMpIHJlcyA9IFwiXCI7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNGbG93TGF5b3V0ICYmXG4gICAgICB0aGlzLmhhc1RpdGxlT25MZWZ0ICYmXG4gICAgICAhIWNzc0NsYXNzZXMudGl0bGVMZWZ0Um9vdFxuICAgICkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy50aXRsZUxlZnRSb290O1xuICAgIH1cbiAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoID4gMCAmJiAhIWNzc0NsYXNzZXMuaGFzRXJyb3IpIHtcbiAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuaGFzRXJyb3I7XG4gICAgfVxuICAgIGlmIChjc3NDbGFzc2VzLnNtYWxsICYmICF0aGlzLndpZHRoKSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLnNtYWxsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzSGVhZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzSGVhZGVyXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0hlYWRlcihjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBjc3NDbGFzc2VzLmhlYWRlciB8fCBcIlwiO1xuICAgIGlmICh0aGlzLmhhc1RpdGxlT25Ub3AgJiYgISFjc3NDbGFzc2VzLmhlYWRlclRvcCkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5oZWFkZXJUb3A7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpdGxlT25MZWZ0ICYmICEhY3NzQ2xhc3Nlcy5oZWFkZXJMZWZ0KSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmhlYWRlckxlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpdGxlT25Cb3R0b20gJiYgISFjc3NDbGFzc2VzLmhlYWRlckJvdHRvbSkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5oZWFkZXJCb3R0b207XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBjc3NDb250ZW50KCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0NvbnRlbnRcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc0NvbnRlbnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NDb250ZW50XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0NvbnRlbnQoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gY3NzQ2xhc3Nlcy5jb250ZW50IHx8IFwiXCI7XG4gICAgaWYgKHRoaXMuaGFzVGl0bGVPbkxlZnQgJiYgISFjc3NDbGFzc2VzLmNvbnRlbnRMZWZ0KSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmNvbnRlbnRMZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzVGl0bGUoKTogc3RyaW5nIHtcbiAgICB0aGlzLmVuc3VyZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzVGl0bGVcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc1RpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzVGl0bGVcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVGl0bGUoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzdWx0ID0gY3NzQ2xhc3Nlcy50aXRsZTtcblxuICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkIHx8IHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgcmVzdWx0ICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy50aXRsZUV4cGFuZGFibGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGFpbnNFcnJvcnMpIHtcbiAgICAgIGlmICghIWNzc0NsYXNzZXMudGl0bGVPbkVycm9yKSB7XG4gICAgICAgIHJlc3VsdCArPSBcIiBcIiArIGNzc0NsYXNzZXMudGl0bGVPbkVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Fuc3dlcmVkICYmICEhY3NzQ2xhc3Nlcy50aXRsZU9uQW5zd2VyKSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLnRpdGxlT25BbnN3ZXI7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldCBjc3NFcnJvcigpOiBzdHJpbmcge1xuICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NFcnJvclwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzRXJyb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NFcnJvclwiLCB2YWwpO1xuICB9XG4gIC8vVE9ETyB3YXMgbm90IHJlbW92ZWQgZnJvbSBvdGhlciBwbGFjZXNcbiAgcHJvdGVjdGVkIGdldENzc0Vycm9yKGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IGNzc0NsYXNzZXMuZXJyb3Iucm9vdCB8fCBcIlwiO1xuICAgIGlmICh0aGlzLmVycm9yTG9jYXRpb24gPT0gXCJ0b3BcIikge1xuICAgICAgaWYgKCEhY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvblRvcCkge1xuICAgICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uVG9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiZcbiAgICAgICEhY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvbkJvdHRvbVxuICAgICkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvbkJvdHRvbTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAocmVOZXcpIHtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3ModHJ1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVRdWVzdGlvbkNzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAhdGhpcy5zdXJ2ZXkgfHxcbiAgICAgIChyZU5ldyAhPT0gdHJ1ZSAmJiAhdGhpcy5jc3NDbGFzc2VzVmFsdWUpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghdGhpcy5jc3NDbGFzc2VzVmFsdWUpIHtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdGhpcy5jYWxjQ3NzQ2xhc3NlcygpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3NDb3JlKHRoaXMuY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVFbGVtZW50Q3NzKCkge1xuICAgIGlmICghdGhpcy5jc3NDbGFzc2VzVmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3ModHJ1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLnNldENzc1Jvb3QodGhpcy5nZXRDc3NSb290KGNzc0NsYXNzZXMpKTtcbiAgICB0aGlzLnNldENzc0hlYWRlcih0aGlzLmdldENzc0hlYWRlcihjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NDb250ZW50KHRoaXMuZ2V0Q3NzQ29udGVudChjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NUaXRsZSh0aGlzLmdldENzc1RpdGxlKGNzc0NsYXNzZXMpKTtcbiAgICB0aGlzLnNldENzc0Vycm9yKHRoaXMuZ2V0Q3NzRXJyb3IoY3NzQ2xhc3NlcykpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVDc3NDbGFzc2VzKHJlczogYW55LCBjc3M6IGFueSkge1xuICAgIGlmICghY3NzLnF1ZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xuICAgICAgaWYgKCEhY3NzLnF1ZXN0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgIHJlcy5yb290ID0gKHJlcy5yb290ID8gcmVzLnJvb3QgKyBcIiBcIiA6IFwiXCIpICsgb2JqQ3NzO1xuICAgICAgfVxuICAgICAgaWYgKGNzcy5xdWVzdGlvbi50aXRsZVJlcXVpcmVkKSB7XG4gICAgICAgIHJlcy50aXRsZSArPSBcIiBcIiArIGNzcy5xdWVzdGlvbi50aXRsZVJlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgb2JqQ3NzID0gY3NzW3RoaXMuZ2V0Q3NzVHlwZSgpXTtcbiAgICBpZiAob2JqQ3NzID09PSB1bmRlZmluZWQgfHwgb2JqQ3NzID09PSBudWxsKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvYmpDc3MgPT09IFwic3RyaW5nXCIgfHwgb2JqQ3NzIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICByZXMucm9vdCA9IChyZXMucm9vdCA/IHJlcy5yb290ICsgXCIgXCIgOiBcIlwiKSArIG9iakNzcztcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iakNzcykge1xuICAgICAgICByZXNba2V5XSA9IG9iakNzc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoKTtcbiAgfVxuICBwcml2YXRlIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIHdpZHRoIHRvIHRoZSBxdWVzdGlvbiBsaWtlIGNzcyBzdHlsZSAoJSwgcHgsIGVtIGV0YykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgd2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyBtaW5XaWR0aCBjb25zdHJhaW50IHRvIHRoZSBxdWVzdGlvbiBsaWtlIGNzcyBzdHlsZSAoJSwgcHgsIGVtIGV0YykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHNldHRpbmdzLm1pbldpZHRoKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbldpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCB0aGUgc3BlY2lmaWMgbWF4V2lkdGggY29uc3RyYWludCB0byB0aGUgcXVlc3Rpb24gbGlrZSBjc3Mgc3R5bGUgKCUsIHB4LCBlbSBldGMpLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhXaWR0aFwiLCBzZXR0aW5ncy5tYXhXaWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCB3aWR0aCBvZiB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgZGlmZmVyZW50IGZyb20gMCB0byBpbmNyZWFzZSB0aGUgbGVmdCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCBkaWZmZXJlbnQgZnJvbSAwIHRvIGluY3JlYXNlIHRoZSByaWdodCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ0xlZnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdMZWZ0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ1JpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ1JpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZ1JpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkluZGVudENoYW5nZWQoKSB7XG4gICAgdGhpcy5wYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmluZGVudCk7XG4gICAgdGhpcy5wYWRkaW5nUmlnaHQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5yaWdodEluZGVudCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbmRlbnRTaXplKGluZGVudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaW5kZW50IDwgMSB8fCAhdGhpcy5nZXRTdXJ2ZXkoKSB8fCAhdGhpcy5jc3NDbGFzc2VzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gaW5kZW50ICogdGhpcy5jc3NDbGFzc2VzLmluZGVudCArIFwicHhcIjtcbiAgfVxuICAvKipcbiAgICogTW92ZSB0aGUgZm9jdXMgdG8gdGhlIGlucHV0IG9mIHRoaXMgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBvbkVycm9yIHNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlLCB0byBmb2N1cyB0aGUgaW5wdXQgd2l0aCB0aGUgZmlyc3QgZXJyb3IsIG90aGVyIHdpc2UgdGhlIGZpcnN0IGlucHV0IHdpbGwgYmUgZm9jdXNlZC5cbiAgICovXG4gIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcblxuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zY3JvbGxFbGVtZW50VG9Ub3AodGhpcywgdGhpcywgbnVsbCwgdGhpcy5pZCk7XG4gICAgfVxuICAgIHZhciBpZCA9ICFvbkVycm9yXG4gICAgICA/IHRoaXMuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpXG4gICAgICA6IHRoaXMuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XG4gICAgaWYgKFN1cnZleUVsZW1lbnQuRm9jdXNFbGVtZW50KGlkKSkge1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5mb2N1c0NhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGZpcmVDYWxsYmFjayhjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgfVxuICBwdWJsaWMgZ2V0T3RoZXJzTWF4TGVuZ3RoKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm1heE90aGVyc0xlbmd0aCA+IDAgPyB0aGlzLnN1cnZleS5tYXhPdGhlcnNMZW5ndGggOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge31cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSkge1xuICAgIHZhciBuYW1lID0gdGV4dFZhbHVlLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPVxuICAgICAgT2JqZWN0LmtleXMoUXVlc3Rpb24uVGV4dFByZXByb2Nlc3NvclZhbHVlc01hcCkuaW5kZXhPZihuYW1lKSAhPT0gLTEgfHxcbiAgICAgICg8YW55PnRoaXMpW3RleHRWYWx1ZS5uYW1lXSAhPT0gdW5kZWZpbmVkO1xuICAgIHRleHRWYWx1ZS52YWx1ZSA9ICg8YW55PnRoaXMpW1xuICAgICAgKDxhbnk+UXVlc3Rpb24uVGV4dFByZXByb2Nlc3NvclZhbHVlc01hcClbbmFtZV0gfHwgdGV4dFZhbHVlLm5hbWVcbiAgICBdO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIG1ha2UgdGhlIHF1ZXN0aW9uIGEgcmVxdWlyZWQuIElmIGEgdXNlciBkb2Vzbid0IGFuc3dlciB0aGUgcXVlc3Rpb24gdGhlbiBhIHZhbGlkYXRpb24gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZXF1aXJlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyB0cnVlIHRoZSBRdWVzdGlvbiBiZWNvbWVzIHJlcXVpcmVkIGFuZCBhbiBlbmQtdXNlciBoYXMgdG8gYW5zd2VyIGl0LlxuICAgKiBJZiBpdCByZXR1cm5zIGZhbHNlIHRoZSBRdWVzdGlvbiB0aGVuIGFuIGVuZC11c2VyIG1heSBub3QgYW5zd2VyIGl0IHRoZSBRdWVzdGlvbiBtYXliZSBlbXB0eS5cbiAgICogVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIGlzUmVxdWlyZWQgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGlzUmVxdWlyZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIGFkZCBhIGNvbW1lbnQgZm9yIHRoZSBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzQ29tbWVudFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoYXNDb21tZW50KHZhbDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zdXBwb3J0Q29tbWVudCgpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzQ29tbWVudFwiLCB2YWwpO1xuICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHRoaXMuaGFzT3RoZXIgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWNhdG9yLiBJdCBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlkXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhVGl0bGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJfYXJpYVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzT3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc090aGVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc090aGVyKHZhbDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zdXBwb3J0T3RoZXIoKSB8fCB0aGlzLmhhc090aGVyID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc090aGVyXCIsIHZhbCk7XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIHRoaXMuaGFzQ29tbWVudCA9IGZhbHNlO1xuICAgIHRoaXMuaGFzT3RoZXJDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHt9XG4gIHB1YmxpYyBnZXQgcmVxdWlyZVVwZGF0ZUNvbW1lbnRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNDb21tZW50IHx8IHRoaXMuaGFzT3RoZXI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiByZWFkT25seSBwcm9wZXJ0eSBpcyB0cnVlIG9yIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgcGFyZW50IHBhbmVsL3BhZ2UgaXMgcmVhZE9ubHkuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubW9kZWxcbiAgICogQHNlZSByZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlYWRPbmx5KCkge1xuICAgIHZhciBpc1BhcmVudFJlYWRPbmx5ID0gISF0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5pc1JlYWRPbmx5O1xuICAgIHZhciBpc1N1cnZleVJlYWRPbmx5ID0gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGlzUGFyZW50UmVhZE9ubHkgfHwgaXNTdXJ2ZXlSZWFkT25seTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzSW5wdXRSZWFkT25seSgpIHtcbiAgICB2YXIgaXNEZXNpZ25Nb2RlVjIgPSBzZXR0aW5ncy5zdXBwb3J0Q3JlYXRvclYyICYmIHRoaXMuaXNEZXNpZ25Nb2RlO1xuICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHkgfHwgaXNEZXNpZ25Nb2RlVjI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzSW5wdXRSZWFkT25seVwiLCB0aGlzLmlzSW5wdXRSZWFkT25seSk7XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUXVlc3Rpb24gYmVjb21lcyByZWFkIG9ubHkgYW5kIGFuIGVuZC11c2VyIHdpbGwgbm90IGFibGUgdG8gYW5zd2VyIG9uIHRoZSBxdXN0aW9uLiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gcmVhZE9ubHkgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogUnVuIHZpc2libGVJZiBhbmQgZW5hYmxlSWYgZXhwcmVzc2lvbnMuIElmIHZpc2libGVJZiBvci9hbmQgZW5hYmxlZElmIGFyZSBub3QgZW1wdHksIHRoZW4gdGhlIHJlc3VsdHMgb2YgcGVyZm9ybWluZyB0aGUgZXhwcmVzc2lvbiAodHJ1ZSBvciBmYWxzZSkgc2V0IHRvIHRoZSB2aXNpYmxlL3JlYWRPbmx5IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB2YWx1ZXMgVHlwaWNhbGx5IHN1cnZleSByZXN1bHRzXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgZW5hYmxlSWZcbiAgICovXG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzW1wicXVlc3Rpb25cIl0gPSB0aGlzO1xuICAgIGlmICghdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcpIHtcbiAgICAgIHRoaXMucnVuVmlzaWJsZUlmQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMucnVuRW5hYmxlSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1blJlcXVpcmVkSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blZpc2libGVJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRW5hYmxlSWZDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25FbmFiZWxSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZW5hYmxlSWYpO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmVuYWJsZUlmO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gIXJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuUmVxdWlyZWRJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5yZXF1aXJlZElmKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5yZXF1aXJlZElmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLnJlcXVpcmVkSWY7XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5pc1JlcXVpcmVkID0gcmVzO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIik7XG4gIH1cbiAgcHJpdmF0ZSBjYWxjTm8oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaGFzVGl0bGUgfHwgdGhpcy5oaWRlTnVtYmVyKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgbm8gPSBIZWxwZXJzLmdldE51bWJlckJ5SW5kZXgodGhpcy52aXNpYmxlSW5kZXgsIHRoaXMuZ2V0U3RhcnRJbmRleCgpKTtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgbm8gPSB0aGlzLnN1cnZleS5nZXRVcGRhdGVkUXVlc3Rpb25Obyh0aGlzLCBubyk7XG4gICAgfVxuICAgIHJldHVybiBubztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnN1cnZleUxvYWRDYWxsYmFjayk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIHByb3RlY3RlZCBvblNldERhdGEoKSB7XG4gICAgc3VwZXIub25TZXREYXRhKCk7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHRoaXMuaW5pdERhdGFGcm9tU3VydmV5KCk7XG4gICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGluaXREYXRhRnJvbVN1cnZleSgpIHtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVGcm9tU3VydmV5KHRoaXMuZGF0YS5nZXRWYWx1ZSh0aGlzLmdldFZhbHVlTmFtZSgpKSk7XG4gICAgICB0aGlzLmluaXRDb21tZW50RnJvbVN1cnZleSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaW5pdENvbW1lbnRGcm9tU3VydmV5KCkge1xuICAgIGlmICghIXRoaXMuZGF0YSAmJiB0aGlzLnJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkodGhpcy5kYXRhLmdldENvbW1lbnQodGhpcy5nZXRWYWx1ZU5hbWUoKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KFwiXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcnVuRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIWV4cHJlc3Npb24pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnJ1bkV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb25WYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgfVxuICBwcml2YXRlIHNldCBxdWVzdGlvblZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbkNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29tbWVudFwiKTtcbiAgfVxuICBwcml2YXRlIHNldCBxdWVzdGlvbkNvbW1lbnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb21tZW50XCIsIHZhbCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb21tZW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICAvKipcbiAgICogR2V0L1NldCB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIEBzZWUgU3VydmV5TW9kZS5zZXRWYWx1ZVxuICAgKiBAc2VlIFN1cnZleU1vZGUuZ2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlRm9yU3VydmV5KCk6IGFueSB7XG4gICAgaWYgKCEhdGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXIgdGhlIHF1ZXN0aW9uIHZhbHVlLiBJdCBjbGVhcnMgdGhlIHF1ZXN0aW9uIGNvbW1lbnQgYXMgd2VsbC5cbiAgICovXG4gIHB1YmxpYyBjbGVhclZhbHVlKCkge1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29tbWVudCA9IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgdW5iaW5kVmFsdWUoKSB7XG4gICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVZhbHVlQ29weSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVbmJpbmRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZVN1cnZleUVsZW1lbnQodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBpc1ZhbHVlU3VydmV5RWxlbWVudCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgIHJldHVybiB2YWwubGVuZ3RoID4gMCA/IHRoaXMuaXNWYWx1ZVN1cnZleUVsZW1lbnQodmFsWzBdKSA6IGZhbHNlO1xuICAgIHJldHVybiAhIXZhbC5nZXRUeXBlICYmICEhdmFsLm9uUHJvcGVydHlDaGFuZ2VkO1xuICB9XG4gIHByaXZhdGUgY2FuQ2xlYXJWYWx1ZUFzSW52aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLmlzUGFyZW50VmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghIXRoaXMucGFnZSAmJiB0aGlzLnBhZ2UuaXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy52YWx1ZU5hbWUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkuaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodGhpcy52YWx1ZU5hbWUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzUGFyZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKCFwYXJlbnQuaXNWaXNpYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIGlmICh0aGlzLmNhbkNsZWFyVmFsdWVBc0ludmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5VmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHF1ZXN0aW9uIHZhbHVlIGFzIGEgZGlzcGxheSB0ZXh0LiBGb3IgZXhhbXBsZSwgZm9yIGRyb3Bkb3duLCBpdCB3b3VsZCByZXR1cm4gdGhlIGl0ZW0gdGV4dCBpbnN0ZWFkIG9mIGl0ZW0gdmFsdWUuXG4gICAqIEBwYXJhbSBrZXlzQXNUZXh0IFNldCB0aGlzIHZhbHVlIHRvIHRydWUsIHRvIHJldHVybiBrZXkgKGluIG1hdHJpY2VzIHF1ZXN0aW9ucykgYXMgZGlzcGxheSB0ZXh0IGFzIHdlbGwuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdGhpcyBwYXJhbWV0ZXIsIGlmIHlvdSB3YW50IHRvIGdldCBkaXNwbGF5IHZhbHVlIGZvciB0aGlzIHZhbHVlIGFuZCBub3QgcXVlc3Rpb24udmFsdWUuIEl0IGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5jYWxjRGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgICByZXR1cm4gISF0aGlzLmRpc3BsYXlWYWx1ZUNhbGxiYWNrID8gdGhpcy5kaXNwbGF5VmFsdWVDYWxsYmFjayhyZXMpIDogcmVzO1xuICB9XG4gIHByaXZhdGUgY2FsY0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBpZiAodGhpcy5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmN1c3RvbVdpZGdldC5nZXREaXNwbGF5VmFsdWUodGhpcywgdmFsdWUpO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSA9PSB1bmRlZmluZWQgPyB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpIDogdmFsdWU7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTtcbiAgICByZXR1cm4gdGhpcy5nZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlIHRvIHRoZSBxdWVzdGlvbi4gSXQgd2lsbCBiZSBhc3NpZ24gdG8gdGhlIHF1ZXN0aW9uIG9uIGxvYWRpbmcgdGhlIHN1cnZleSBmcm9tIEpTT04gb3IgYWRkaW5nIGEgcXVlc3Rpb24gdG8gdGhlIHN1cnZleSBvciBvbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGlzIGVtcHR5LlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRXhwcmVzc2lvbih2YWwpKSB7XG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIiwgdGhpcy5jb252ZXJ0RGVmYXVsdFZhbHVlKHZhbCkpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24odmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVFeHByZXNzaW9uXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9uIGFuc3dlciBkYXRhIGFzIGEgcGxhaW4gb2JqZWN0OiB3aXRoIHF1ZXN0aW9uIHRpdGxlLCBuYW1lLCB2YWx1ZSBhbmQgZGlzcGxheVZhbHVlLlxuICAgKiBGb3IgY29tcGxleCBxdWVzdGlvbnMgKGxpa2UgbWF0cml4LCBldGMuKSBpc05vZGUgZmxhZyBpcyBzZXQgdG8gdHJ1ZSBhbmQgZGF0YSBjb250YWlucyBhcnJheSBvZiBuZXN0ZWQgb2JqZWN0cyAocm93cylcbiAgICogc2V0IG9wdGlvbnMuaW5jbHVkZUVtcHR5IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIHNraXAgZW1wdHkgYW5zd2Vyc1xuICAgKi9cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlRW1wdHkgfHwgIXRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSA8YW55PntcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB0aXRsZTogdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZGlzcGxheVZhbHVlLFxuICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgIH07XG4gICAgICBpZiAob3B0aW9ucy5pbmNsdWRlUXVlc3Rpb25UeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5xdWVzdGlvblR5cGUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICAgIH1cbiAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGFbY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9IHRoaXNbXG4gICAgICAgICAgY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAwLFxuICAgICAgICAgICAgaXNDb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6IFwiQ29tbWVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmNvbW1lbnRQcmVmaXgsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuY29tbWVudCxcbiAgICAgICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvcnJlY3QgYW5zd2VyIG9uIHRoZSBxdWVzdGlvbi4gU2V0IHRoaXMgdmFsdWUgaWYgeW91IGFyZSBkb2luZyBhIHF1aXouXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5jb3JyZWN0QW5zd2Vyc1xuICAgKiBAc2VlIFN1cnZleU1vZGVsLmluQ29ycmVjdEFuc3dlcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgY29ycmVjdEFuc3dlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb3JyZWN0QW5zd2VyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29ycmVjdEFuc3dlcih2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvcnJlY3RBbnN3ZXJcIiwgdGhpcy5jb252ZXJ0RGVmYXVsdFZhbHVlKHZhbCkpO1xuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9ucyBjb3VudDogMSBmb3IgdGhlIG5vbi1tYXRyaXggcXVlc3Rpb25zIGFuZCBhbGwgaW5uZXIgdmlzaWJsZSBxdWVzdGlvbnMgdGhhdCBoYXMgaW5wdXQocykgd2lkZ2V0cyBmb3IgcXVlc3Rpb24gb2YgbWF0cml4IHR5cGVzLlxuICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVpelF1ZXN0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmlzaWJsZSAmJlxuICAgICAgdGhpcy5oYXNJbnB1dCAmJlxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY29ycmVjdEFuc3dlcilcbiAgICApXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWl6UXVlc3Rpb25Db3VudCgpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHB1YmxpYyBnZXQgY29ycmVjdEFuc3dlckNvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzRW1wdHkoKSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jb3JyZWN0QW5zd2VyKSlcbiAgICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RBbnN3ZXJDb3VudCgpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWl6UXVlc3Rpb25Db3VudCgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdEFuc3dlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCB0aGlzLmNvcnJlY3RBbnN3ZXIsIHRydWUsIHRydWUpXG4gICAgICA/IDFcbiAgICAgIDogMDtcbiAgfVxuICBwdWJsaWMgaXNBbnN3ZXJDb3JyZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvcnJlY3RBbnN3ZXJDb3VudCA9PSB0aGlzLnF1aXpRdWVzdGlvbkNvdW50O1xuICB9XG4gIHB1YmxpYyB1cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMuaXNEZWZhdWx0VmFsdWVFbXB0eSgpKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmICF0aGlzLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmICghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzQ2xlYXJWYWx1ZU9uSGlkZGVuICYmICF0aGlzLmlzVmlzaWJsZSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSgpO1xuICB9XG4gIGdldFF1ZXN0aW9uRnJvbUFycmF5KG5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IElRdWVzdGlvbiB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldERlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNEZWZhdWx0VmFsdWVFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiAmJiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICB0aGlzLnNldFZhbHVlQW5kUnVuRXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlRXhwcmVzc2lvbixcbiAgICAgIHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpLFxuICAgICAgKHZhbCkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVmFsdWVFeHByZXNzaW9uKHZhbDogYW55KSB7XG4gICAgcmV0dXJuICEhdmFsICYmIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiAmJiB2YWwubGVuZ3RoID4gMCAmJiB2YWxbMF0gPT0gXCI9XCI7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlQW5kUnVuRXhwcmVzc2lvbihcbiAgICBleHByZXNzaW9uOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBhbnksXG4gICAgc2V0RnVuYzogKHZhbDogYW55KSA9PiB2b2lkLFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICB2YXIgZnVuYyA9ICh2YWw6IGFueSkgPT4ge1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgdmFsID0gdmFsLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xuICAgICAgfVxuICAgICAgc2V0RnVuYyh2YWwpO1xuICAgIH07XG4gICAgaWYgKCEhZXhwcmVzc2lvbiAmJiAhIXRoaXMuZGF0YSkge1xuICAgICAgaWYgKCF2YWx1ZXMpIHZhbHVlcyA9IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzKSBwcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgICAgdmFyIHJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKGV4cHJlc3Npb24pO1xuICAgICAgaWYgKHJ1bm5lci5jYW5SdW4pIHtcbiAgICAgICAgcnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJlcyA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIGZ1bmMocmVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmdW5jKGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgcXVlc3Rpb24gY29tbWVudCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29tbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCEhbmV3VmFsdWUpIHtcbiAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUudG9TdHJpbmcoKS50cmltKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbW1lbnQgPT0gbmV3VmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQ29tbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQ29tbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Db21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE5ld0NvbW1lbnQobmV3VmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIHZhbHVlIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0Fuc3dlcmVkXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNBbnN3ZXJlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0Fuc3dlcmVkXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUlzQW5zd2VyZWQoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbnN3ZXJlZFwiLCB0aGlzLmdldElzQW5zd2VyZWQoKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRW1wdHkoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCB2YWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWxpZGF0b3JzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsaWRhdG9ycyh2YWw6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWxpZGF0b3JzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgZ2V0U3VwcG9ydGVkVmFsaWRhdG9ycygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZ2V0VHlwZSgpO1xuICAgIHdoaWxlICghIWNsYXNzTmFtZSkge1xuICAgICAgdmFyIGNsYXNzVmFsaWRhdG9ycyA9ICg8YW55PnNldHRpbmdzLnN1cHBvcnRlZFZhbGlkYXRvcnMpW2NsYXNzTmFtZV07XG4gICAgICBpZiAoISFjbGFzc1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IGNsYXNzVmFsaWRhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHJlcy5zcGxpY2UoMCwgMCwgY2xhc3NWYWxpZGF0b3JzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNsYXNzSW5mbyA9IFNlcmlhbGl6ZXIuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICBjbGFzc05hbWUgPSBjbGFzc0luZm8ucGFyZW50TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGFkZFN1cHBvcnRlZFZhbGlkYXRvcnMoXG4gICAgc3VwcG9ydGVkVmFsaWRhdG9yczogQXJyYXk8c3RyaW5nPixcbiAgICBjbGFzc1ZhbGlkYXRvcnM6IEFycmF5PHN0cmluZz5cbiAgKSB7fVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlLFxuICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcyk7XG4gICAganNvbltcInR5cGVcIl0gPSB0aGlzLmdldFR5cGUoKTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgdmFsaWRhdGlvbiBlcnJvcihzKSBpbiB0aGUgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIHRydWUgdG8gc2hvdyBhbiBlcnJvciBpbiBVSS5cbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZEhhc0Vycm9ycyA9IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgdmFyIGVycm9ycyA9IHRoaXMuY2hlY2tGb3JFcnJvcnMoISFyZWMgJiYgcmVjLmlzT25WYWx1ZUNoYW5nZWQgPT09IHRydWUpO1xuICAgIGlmIChmaXJlQ2FsbGJhY2spIHtcbiAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmJlZm9yZVNldHRpbmdRdWVzdGlvbkVycm9ycyh0aGlzLCBlcnJvcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAob2xkSGFzRXJyb3JzICE9IGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICYmIHJlYyAmJiBmaXJlQ2FsbGJhY2sgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsaWRhdGlvbiBlcnJvcnMgY291bnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRFcnJvckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hhci9zdHJpbmcgZm9yIGEgcmVxdWlyZWQgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsICYmIHRoaXMuaXNSZXF1aXJlZFxuICAgICAgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHRcbiAgICAgIDogXCJcIjtcbiAgfVxuICAvKipcbiAgICogQWRkIGVycm9yIGludG8gdGhlIHF1ZXN0aW9uIGVycm9yIGxpc3QuXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKi9cbiAgcHVibGljIGFkZEVycm9yKGVycm9yOiBTdXJ2ZXlFcnJvciB8IHN0cmluZykge1xuICAgIGlmICghZXJyb3IpIHJldHVybjtcbiAgICBsZXQgbmV3RXJyb3I6IFN1cnZleUVycm9yID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiIHx8IGVycm9yIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBuZXdFcnJvciA9IG5ldyBDdXN0b21FcnJvcig8c3RyaW5nPmVycm9yLCB0aGlzLnN1cnZleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Vycm9yID0gPFN1cnZleUVycm9yPmVycm9yO1xuICAgIH1cbiAgICB0aGlzLmVycm9ycy5wdXNoKG5ld0Vycm9yKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgcGFydGljdWxhciBlcnJvciBmcm9tIHRoZSBxdWVzdGlvbiBlcnJvciBsaXN0LlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICovXG4gIHB1YmxpYyByZW1vdmVFcnJvcihlcnJvcjogU3VydmV5RXJyb3IpIHtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5lcnJvcnM7XG4gICAgdmFyIGluZGV4ID0gZXJyb3JzLmluZGV4T2YoZXJyb3IpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGVycm9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tGb3JFcnJvcnMoaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhbik6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHFFcnJvcnMgPSBuZXcgQXJyYXk8U3VydmV5RXJyb3I+KCk7XG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlICYmICF0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuY29sbGVjdEVycm9ycyhxRXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICB9XG4gICAgcmV0dXJuIHFFcnJvcnM7XG4gIH1cbiAgcHJpdmF0ZSBjb2xsZWN0RXJyb3JzKFxuICAgIHFFcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHRoaXMub25DaGVja0ZvckVycm9ycyhxRXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAocUVycm9ycy5sZW5ndGggPiAwIHx8ICF0aGlzLmNhblJ1blZhbGlkYXRvcnMoaXNPblZhbHVlQ2hhbmdlZCkpIHJldHVybjtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5ydW5WYWxpZGF0b3JzKCk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAvL3ZhbGlkYXRvcnMgbWF5IGNoYW5nZSB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAgICBxRXJyb3JzLmxlbmd0aCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBxRXJyb3JzLnB1c2goZXJyb3JzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHFFcnJvcnMubGVuZ3RoID09IDApIHtcbiAgICAgIHZhciBlcnJvciA9IHRoaXMuZmlyZVN1cnZleVZhbGlkYXRpb24oKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBxRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUnVuVmFsaWRhdG9ycyhpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBmaXJlU3VydmV5VmFsaWRhdGlvbigpOiBTdXJ2ZXlFcnJvciB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrKSByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlQ2FsbGJhY2soKTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS52YWxpZGF0ZVF1ZXN0aW9uKHRoaXMpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIGlmICghaXNPblZhbHVlQ2hhbmdlZCAmJiB0aGlzLmhhc1JlcXVpcmVkRXJyb3IoKSkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IEFuc3dlclJlcXVpcmVkRXJyb3IodGhpcy5yZXF1aXJlZEVycm9yVGV4dCwgdGhpcykpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFzUmVxdWlyZWRFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMuaXNFbXB0eSgpO1xuICB9XG4gIHByaXZhdGUgdmFsaWRhdG9yUnVubmVyOiBWYWxpZGF0b3JSdW5uZXI7XG4gIHByaXZhdGUgaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlID0gZmFsc2U7XG4gIHB1YmxpYyBvbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9yczogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZDtcbiAgcHVibGljIGdldCBpc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1blZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICBpZiAoISF0aGlzLnZhbGlkYXRvclJ1bm5lcikge1xuICAgICAgdGhpcy52YWxpZGF0b3JSdW5uZXIub25Bc3luY0NvbXBsZXRlZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdG9yUnVubmVyID0gbmV3IFZhbGlkYXRvclJ1bm5lcigpO1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLnZhbGlkYXRvclJ1bm5lci5vbkFzeW5jQ29tcGxldGVkID0gKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSA9PiB7XG4gICAgICB0aGlzLmRvT25Bc3luY0NvbXBsZXRlZChlcnJvcnMpO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yUnVubmVyLnJ1bih0aGlzKTtcbiAgfVxuICBwcml2YXRlIGRvT25Bc3luY0NvbXBsZXRlZChlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yc1tpXSk7XG4gICAgfVxuICAgIHRoaXMuaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKSB7XG4gICAgaWYgKCEhdGhpcy5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyAmJiAhdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzKSB7XG4gICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKHRoaXMuZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMCk7XG4gICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlQ2hhbmdlZEluU3VydmV5ID0gZmFsc2U7XG4gIHByb3RlY3RlZCBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdmFyIG9sZEFuc3dlcmVkID0gdGhpcy5pc0Fuc3dlcmVkO1xuICAgIHRoaXMuc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWUpO1xuICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgJiYgdGhpcy5vblZhbHVlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmlzQW5zd2VyZWQgIT0gb2xkQW5zd2VyZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGlzVGV4dFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZyA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZ2V0RGF0YUxvY05vdGlmaWNhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmlzSW5wdXRUZXh0VXBkYXRlID8gXCJ0ZXh0XCIgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzSW5wdXRUZXh0VXBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlICYmIHRoaXMuaXNUZXh0VmFsdWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZVRvRGF0YShuZXdWYWx1ZSk7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvblZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsICYmIHRoaXMuY2FuU2V0VmFsdWVUb1N1cnZleSgpKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVGb3JTdXJ2ZXk7XG4gICAgICB0aGlzLmRhdGEuc2V0VmFsdWUoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0aGlzLmdldERhdGFMb2NOb3RpZmljYXRpb24oKSxcbiAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblNldFZhbHVlVG9TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBzZXROZXdDb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQ29tbWVudCA9IG5ld1ZhbHVlO1xuICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kYXRhLnNldENvbW1lbnQoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0aGlzLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlID8gXCJ0ZXh0XCIgOiBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbGlkTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIG5hbWU7XG4gICAgcmV0dXJuIG5hbWUudHJpbSgpLnJlcGxhY2UoL1tcXHtcXH1dKy9nLCBcIlwiKTtcbiAgfVxuICAvL0lRdWVzdGlvblxuICB1cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy52YWx1ZUZyb21EYXRhQ2FsbGJhY2spIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhQ2FsbGJhY2sobmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnNldFF1ZXN0aW9uVmFsdWUodGhpcy52YWx1ZUZyb21EYXRhKG5ld1ZhbHVlKSk7XG4gIH1cbiAgdXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkobmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgdGhpcy5xdWVzdGlvbkNvbW1lbnQgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgJiZcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIGlmICh1cGRhdGVJc0Fuc3dlcmVkKSB0aGlzLnVwZGF0ZUlzQW5zd2VyZWQoKTtcbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7fVxuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1Zpc2libGUgfHxcbiAgICAgICghdGhpcy5oYXNUaXRsZSAmJiAhc2V0dGluZ3Muc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5UaXRsZSkgfHxcbiAgICAgICh0aGlzLmhpZGVOdW1iZXIgJiYgIXNldHRpbmdzLnNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuTnVtYmVyKVxuICAgICkge1xuICAgICAgdmFsID0gLTE7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCB2YWwpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5vXCIsIHRoaXMuY2FsY05vKCkpO1xuICAgIHJldHVybiB2YWwgPCAwID8gMCA6IDE7XG4gIH1cbiAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VFcnJvcigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZSB2YWx1ZXMgZnJvbSB0aGUgY3VycmVudCBxdWVzdGlvbiwgdGhhdCBlbmQtdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIGVudGVyLlxuICAgKiBGb3IgZXhhbXBsZSB0aGUgdmFsdWUgdGhhdCBkb2Vzbid0IGV4aXN0cyBpbiBhIHJhZGlncm91cC9kcm9wZG93bi9jaGVja2JveCBjaG9pY2VzIG9yIG1hdHJpeCByb3dzL2NvbHVtbnMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7fVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge31cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBhbGwgZXJyb3JzIGluIHRoZSBxdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gIH1cbiAgcHVibGljIGNsZWFyVW51c2VkVmFsdWVzKCkge31cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7fVxuICBjaGVja0JpbmRpbmdzKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuYmluZGluZ3MuaXNFbXB0eSgpIHx8ICF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLmJpbmRpbmdzLmdldFByb3BlcnRpZXNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXNbcHJvcHNbaV1dID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIC8vSUxvY2FsaXphYmxlT3duZXJcbiAgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyID0gbnVsbDtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3VydmV5IGxvY2FsZVxuICAgKiBAc2VlIFN1cnZleU1vZGVsLmxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVxuICAgICAgPyAoPElMb2NhbGl6YWJsZU93bmVyPig8YW55PnRoaXMuc3VydmV5KSkuZ2V0TG9jYWxlKClcbiAgICAgIDogdGhpcy5sb2NPd25lclxuICAgICAgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpXG4gICAgICA6IFwiXCI7XG4gIH1cbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5XG4gICAgICA/IHRoaXMuc3VydmV5LmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKVxuICAgICAgOiB0aGlzLmxvY093bmVyXG4gICAgICA/IHRoaXMubG9jT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFJlbmRlcmVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHR5cGVvZiB0aGlzLnN1cnZleS5nZXRSZW5kZXJlckZvclN0cmluZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRoaXMuc3VydmV5LmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpXG4gICAgICA6IHRoaXMubG9jT3duZXIgJiYgdHlwZW9mIHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyKG5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIHRleHQ7XG4gICAgaWYgKHRoaXMudGV4dFByb2Nlc3NvcilcbiAgICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQodGV4dCwgdGhpcy51c2VEaXNwbGF5VmFsdWVzSW5UaXRsZSk7XG4gICAgaWYgKHRoaXMubG9jT3duZXIpIHJldHVybiB0aGlzLmxvY093bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgcHVibGljIGdldENvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLmdldFJlbmRlcmVyQnlRdWVzdGlvbih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0RlZmF1bHRSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5jdXN0b21XaWRnZXQgfHxcbiAgICAgIHRoaXMucmVuZGVyQXMgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICB0aGlzLmdldENvbXBvbmVudE5hbWUoKSA9PT0gXCJkZWZhdWx0XCJcbiAgICApO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImRlZmF1bHRcIiB9KVxuICByZW5kZXJBczogc3RyaW5nO1xuXG4gIC8vSVN1cnZleUVycm9yT3duZXJcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkgcmV0dXJuIHRoaXMuc3VydmV5LmdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0LCBlcnJvcik7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgLy9JVmFsaWRhdG9yT3duZXJcbiAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXQgdmFsaWRhdGVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBzZXQgdmFsaWRhdGVkVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJxdWVzdGlvblwiLCBbXG4gIFwiIW5hbWVcIixcbiAge1xuICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiY29sbGFwc2VkXCIsIFwiZXhwYW5kZWRcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJ2aXNpYmxlOnN3aXRjaFwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUsIGxheW91dDogXCJyb3dcIiB9LFxuICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgeyBuYW1lOiBcIndpZHRoXCIgfSxcbiAgeyBuYW1lOiBcIm1pbldpZHRoXCIsIGRlZmF1bHQ6IHNldHRpbmdzLm1pbldpZHRoIH0sXG4gIHsgbmFtZTogXCJtYXhXaWR0aFwiLCBkZWZhdWx0OiBzZXR0aW5ncy5tYXhXaWR0aCB9LFxuICB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUsIGxheW91dDogXCJyb3dcIiB9LFxuICB7IG5hbWU6IFwiaW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM10sIGxheW91dDogXCJyb3dcIiB9LFxuICB7XG4gICAgbmFtZTogXCJwYWdlXCIsXG4gICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5wYWdlcy5sZW5ndGggPiAxO1xuICAgIH0sXG4gICAgY2hvaWNlczogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiBzdXJ2ZXlcbiAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBwLm5hbWUsIHRleHQ6IHAudGl0bGUgfTtcbiAgICAgICAgICB9KVxuICAgICAgICA6IFtdO1xuICAgIH0sXG4gIH0sXG4gIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAge1xuICAgIG5hbWU6IFwidGl0bGVMb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwiaGlkZGVuXCJdLFxuICAgIGxheW91dDogXCJyb3dcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiLFxuICAgIGxheW91dDogXCJyb3dcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ1bmRlcklucHV0XCIsIFwidW5kZXJUaXRsZVwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiaGlkZU51bWJlcjpib29sZWFuXCIsXG4gICAgZGVwZW5kc09uOiBcInRpdGxlTG9jYXRpb25cIixcbiAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICgoPFF1ZXN0aW9uPm9iaikudGl0bGVMb2NhdGlvbiA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGFyZW50OiBQYW5lbE1vZGVsID0gb2JqID8gb2JqLnBhcmVudCA6IG51bGw7XG4gICAgICB2YXIgbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50ID1cbiAgICAgICAgIXBhcmVudCB8fCBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPT0gXCJvZmZcIjtcbiAgICAgIGlmICghbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhc3VydmV5IHx8XG4gICAgICAgIHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiIHx8XG4gICAgICAgICghIXBhcmVudCAmJiBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PT0gXCJvbnBhbmVsXCIpXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIFwidmFsdWVOYW1lXCIsXG4gIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gIFwiZGVmYXVsdFZhbHVlOnZhbHVlXCIsXG4gIHtcbiAgICBuYW1lOiBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIGNhdGVnb3J5OiBcImxvZ2ljXCIsXG4gIH0sXG4gIFwiY29ycmVjdEFuc3dlcjp2YWx1ZVwiLFxuICBcImlzUmVxdWlyZWQ6c3dpdGNoXCIsXG4gIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAge1xuICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICB9LFxuICBcInJlYWRPbmx5OnN3aXRjaFwiLFxuICB7XG4gICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImJpbmRpbmdzOmJpbmRpbmdzXCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImJpbmRpbmdzXCIsXG4gICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgcmV0dXJuIG9iai5iaW5kaW5ncy5nZXROYW1lcygpLmxlbmd0aCA+IDA7XG4gICAgfSxcbiAgfSxcbiAgeyBuYW1lOiBcInJlbmRlckFzXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuXSk7XG5TZXJpYWxpemVyLmFkZEFsdGVyTmF0aXZlQ2xhc3NOYW1lKFwicXVlc3Rpb25cIiwgXCJxdWVzdGlvbmJhc2VcIik7XG4iLCJpbXBvcnQgeyBCYXNlLCBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IElRdWVzdGlvbiB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DdXN0b21XaWRnZXQge1xuICBwdWJsaWMgaHRtbFRlbXBsYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBpc0ZpcnN0UmVuZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgd2lkZ2V0SnNvbjogYW55KSB7XG4gICAgdGhpcy5odG1sVGVtcGxhdGUgPSB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA/IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIocXVlc3Rpb246IElRdWVzdGlvbiwgZWw6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRmlyc3RSZW5kZXIpIHtcbiAgICAgIHRoaXMuaXNGaXJzdFJlbmRlciA9IGZhbHNlO1xuICAgICAgcXVlc3Rpb24uc3VydmV5Lm9uTG9jYWxlQ2hhbmdlZEV2ZW50LmFkZCgoKSA9PiB7XG4gICAgICAgIHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xuICAgICAgICB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIpIHRoaXMud2lkZ2V0SnNvbi5hZnRlclJlbmRlcihxdWVzdGlvbiwgZWwpO1xuICB9XG4gIHB1YmxpYyB3aWxsVW5tb3VudChxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudCkgdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XG4gIH1cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShxdWVzdGlvbjogSVF1ZXN0aW9uLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53aWRnZXRKc29uLmdldERpc3BsYXlWYWx1ZSlcbiAgICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uZ2V0RGlzcGxheVZhbHVlKHF1ZXN0aW9uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGlzRml0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xpYnJhcnlMb2FkZWQoKSAmJiB0aGlzLndpZGdldEpzb24uaXNGaXQpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRml0KHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBjYW5TaG93SW5Ub29sYm94KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmdldEFjdGl2YXRlZEJ5KHRoaXMubmFtZSkgIT0gXCJjdXN0b210eXBlXCJcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQgfHwgdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93SW5Ub29sYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCAhPT0gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SW5Ub29sYm94KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMud2lkZ2V0SnNvbi5zaG93SW5Ub29sYm94ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBpbml0KCkge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24uaW5pdCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmluaXQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNMaWJyYXJ5TG9hZGVkKCkgJiYgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNMaWJyYXJ5TG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCkgPT0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlcjtcbiAgfVxuICBwdWJsaWMgZ2V0IHBkZlF1ZXN0aW9uVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUXVlc3Rpb25UeXBlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGRmUmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUmVuZGVyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IG5ldyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCk7XG4gIHByaXZhdGUgd2lkZ2V0c1ZhbHVlczogQXJyYXk8UXVlc3Rpb25DdXN0b21XaWRnZXQ+ID0gW107XG4gIHByaXZhdGUgd2lkZ2V0c0FjdGl2YXRlZEJ5ID0ge307XG5cbiAgcHVibGljIG9uQ3VzdG9tV2lkZ2V0QWRkZWQ6IEV2ZW50PFxuICAgIChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KGN1c3RvbVdpZGdldDogUXVlc3Rpb25DdXN0b21XaWRnZXQpID0+IGFueSwgYW55PigpO1xuXG4gIHB1YmxpYyBnZXQgd2lkZ2V0cygpOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldHNWYWx1ZXM7XG4gIH1cbiAgcHVibGljIGFkZCh3aWRnZXRKc29uOiBhbnksIGFjdGl2YXRlZEJ5OiBzdHJpbmcgPSBcInByb3BlcnR5XCIpIHtcbiAgICB0aGlzLmFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uLCBhY3RpdmF0ZWRCeSk7XG4gIH1cbiAgcHVibGljIGFkZEN1c3RvbVdpZGdldChcbiAgICB3aWRnZXRKc29uOiBhbnksXG4gICAgYWN0aXZhdGVkQnk6IHN0cmluZyA9IFwicHJvcGVydHlcIlxuICApOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgdmFyIG5hbWUgPSB3aWRnZXRKc29uLm5hbWU7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBuYW1lID0gXCJ3aWRnZXRfXCIgKyB0aGlzLndpZGdldHMubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgdmFyIGN1c3RvbVdpZGdldCA9IG5ldyBRdWVzdGlvbkN1c3RvbVdpZGdldChuYW1lLCB3aWRnZXRKc29uKTtcbiAgICB0aGlzLndpZGdldHNWYWx1ZXMucHVzaChjdXN0b21XaWRnZXQpO1xuICAgIGN1c3RvbVdpZGdldC5pbml0KCk7XG4gICAgKDxhbnk+dGhpcykud2lkZ2V0c0FjdGl2YXRlZEJ5W25hbWVdID0gYWN0aXZhdGVkQnk7XG4gICAgY3VzdG9tV2lkZ2V0LmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgdGhpcy5vbkN1c3RvbVdpZGdldEFkZGVkLmZpcmUoY3VzdG9tV2lkZ2V0LCBudWxsKTtcbiAgICByZXR1cm4gY3VzdG9tV2lkZ2V0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3YXkgdGhlIGN1c3RvbSB3aWdldCBpcyBhY3RpdmF0ZWQuIEl0IGNhbiBiZSBhY3RpdmF0ZWQgYnkgYSBwcm9wZXJ0eSAoXCJwcm9wZXJ0eVwiKSwgcXVlc3Rpb24gdHlwZSAoXCJ0eXBlXCIpIG9yIGJ5IG5ldy9jdXN0b20gcXVlc3Rpb24gdHlwZSAoXCJjdXN0b210eXBlXCIpLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZSB0aGUgY3VzdG9tIHdpZGdldCBuYW1lXG4gICAqIEBzZWUgc2V0QWN0aXZhdGVkQnlcbiAgICovXG4gIHB1YmxpYyBnZXRBY3RpdmF0ZWRCeSh3aWRnZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV07XG4gICAgcmV0dXJuIHJlcyA/IHJlcyA6IFwicHJvcGVydHlcIjtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgd2F5IHRoZSBjdXN0b20gd2lnZXQgaXMgYWN0aXZhdGVkLiBUaGUgYWN0aXZhdGlvbiB0eXBlcyBhcmU6IHByb3BlcnR5IChcInByb3BlcnR5XCIpLCBxdWVzdGlvbiB0eXBlIChcInR5cGVcIikgb3IgbmV3L2N1c3RvbSBxdWVzdGlvbiB0eXBlIChcImN1c3RvbXR5cGVcIikuIEEgY3VzdG9tIHdpZ2V0IG1heSBzdXBwb3J0IGFsbCBvciBvbmx5IHNvbWUgb2YgdGhpcyBhY3RpdmF0aW9uIHR5cGVzLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZVxuICAgKiBAcGFyYW0gYWN0aXZhdGVkQnkgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhcmlhbnRzOiBcInByb3BlcnR5XCIsIFwidHlwZVwiIGFuZCBcImN1c3RvbXR5cGVcIlxuICAgKi9cbiAgcHVibGljIHNldEFjdGl2YXRlZEJ5KHdpZGdldE5hbWU6IHN0cmluZywgYWN0aXZhdGVkQnk6IHN0cmluZykge1xuICAgIGlmICghd2lkZ2V0TmFtZSB8fCAhYWN0aXZhdGVkQnkpIHJldHVybjtcbiAgICB2YXIgd2lkZ2V0ID0gdGhpcy5nZXRDdXN0b21XaWRnZXRCeU5hbWUod2lkZ2V0TmFtZSk7XG4gICAgaWYgKCF3aWRnZXQpIHJldHVybjtcbiAgICAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV0gPSBhY3RpdmF0ZWRCeTtcbiAgICB3aWRnZXQuYWN0aXZhdGVkQnlDaGFuZ2VkKGFjdGl2YXRlZEJ5KTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy53aWRnZXRzVmFsdWVzID0gW107XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVdpZGdldEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy53aWRnZXRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tV2lkZ2V0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHNWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNWYWx1ZXNbaV0uaXNGaXQocXVlc3Rpb24pKSByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBJU3VydmV5SW1wbCwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgT3RoZXJFbXB0eUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IENob2ljZXNSZXN0ZnVsIH0gZnJvbSBcIi4vY2hvaWNlc1Jlc3RmdWxcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBJdCBpcyBhIGJhc2UgY2xhc3MgZm9yIGNoZWNrYm94LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBxdWVzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNlbGVjdEJhc2UgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHB1YmxpYyB2aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBmaWx0ZXJlZENob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcbiAgcHJpdmF0ZSBjb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29tbWVudFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgcHJldkNvbW1lbnRWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIG90aGVySXRlbVZhbHVlOiBJdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKFwib3RoZXJcIik7XG4gIHByaXZhdGUgY2hvaWNlc0Zyb21Vcmw6IEFycmF5PEl0ZW1WYWx1ZT47XG4gIHByaXZhdGUgY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0czogYW55O1xuICBwcml2YXRlIGlzQ2hvaWNlc0xvYWRlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBlbmFibGVPbkxvYWRpbmdDaG9pY2VzOiBib29sZWFuO1xuICBwcml2YXRlIGRlcGVuZGVkUXVlc3Rpb25zOiBBcnJheTxRdWVzdGlvblNlbGVjdEJhc2U+ID0gW107XG4gIHByaXZhdGUgbm9uZUl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcIm5vbmVcIik7XG4gIHByaXZhdGUgbmV3SXRlbVZhbHVlOiBJdGVtVmFsdWU7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBub25lSXRlbVRleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibm9uZVRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbm9uZUl0ZW1UZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibm9uZUl0ZW1UZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5ub25lSXRlbVZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLm5vbmVJdGVtVmFsdWUuc2V0TG9jVGV4dChub25lSXRlbVRleHQpO1xuXG4gICAgdGhpcy5jcmVhdGVJdGVtVmFsdWVzKFwiY2hvaWNlc1wiKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY2hvaWNlc1wiLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVySXRlbXMoKSkge1xuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiY2hvaWNlc0Zyb21RdWVzdGlvblwiLCBcImNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXCIsIFwiaGFzTm9uZVwiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImhpZGVJZkNob2ljZXNFbXB0eVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uQ2hvaWNlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2aXNpYmxlQ2hvaWNlc1wiKTtcbiAgICB0aGlzLnNldE5ld1Jlc3RmdWxQcm9wZXJ0eSgpO1xuICAgIHZhciBsb2NPdGhlclRleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvdGhlckVycm9yVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLm90aGVySXRlbVZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLm90aGVySXRlbVZhbHVlLnNldExvY1RleHQobG9jT3RoZXJUZXh0KTtcbiAgICBsb2NPdGhlclRleHQub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMub25CZWZvcmVTZW5kUmVxdWVzdCgpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuZ2V0UmVzdWx0Q2FsbGJhY2sgPSAoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiB2b2lkID0+IHtcbiAgICAgIHRoaXMub25Mb2FkQ2hvaWNlc0Zyb21VcmwoaXRlbXMpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwudXBkYXRlUmVzdWx0Q2FsbGJhY2sgPSAoXG4gICAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICAgIHNlcnZlclJlc3VsdDogYW55XG4gICAgKTogQXJyYXk8SXRlbVZhbHVlPiA9PiB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5LnVwZGF0ZUNob2ljZXNGcm9tU2VydmVyKHRoaXMsIGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyUGxhY2VIb2xkZXJcIiwgdGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzZWxlY3RiYXNlXCI7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kZXBlbmRlZFF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5kZXBlbmRlZFF1ZXN0aW9uc1tpXS5jaG9pY2VzRnJvbVF1ZXN0aW9uID0gXCJcIjtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVGcm9tRGVwZW5kZWRRdWVzdGlvbih0aGlzLmdldFF1ZXN0aW9uV2l0aENob2ljZXMoKSk7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzT3RoZXJTZWxlY3RlZCB8fCAhIXRoaXMuY29tbWVudDtcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGxvY2FsZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jYWxlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmNob2ljZXNPcmRlciAhPT0gXCJub25lXCIpIHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUNob2ljZXMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgaWYgKCEhdGhpcy5jaG9pY2VzRnJvbVVybCkge1xuICAgICAgSXRlbVZhbHVlLmxvY1N0cnNDaGFuZ2VkKHRoaXMuY2hvaWNlc0Zyb21VcmwpO1xuICAgICAgSXRlbVZhbHVlLmxvY1N0cnNDaGFuZ2VkKHRoaXMudmlzaWJsZUNob2ljZXMpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3RoZXIgaXRlbS4gQnkgdXNpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG1heSBjaGFuZ2UgcHJvZ3JhbW1hdGljYWxseSBpdCdzIHZhbHVlIGFuZCB0ZXh0LlxuICAgKiBAc2VlIGhhc090aGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVySXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLm90aGVySXRlbVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSB1c2VyIHNlbGVjdCB0aGUgJ290aGVyJyBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBpc090aGVyU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzT3RoZXIgJiYgdGhpcy5nZXRIYXNPdGhlcih0aGlzLnJlbmRlcmVkVmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBzaG93IHRoZSBcIk5vbmVcIiBpdGVtIG9uIHRoZSBib3R0b20uIElmIGVuZC11c2VyIGNoZWNrcyB0aGlzIGl0ZW0sIGFsbCBvdGhlciBpdGVtcyB3b3VsZCBiZSB1bmNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc05vbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc05vbmVcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzTm9uZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNOb25lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5vbmUgaXRlbS4gQnkgdXNpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG1heSBjaGFuZ2UgcHJvZ3JhbW1hdGljYWxseSBpdCdzIHZhbHVlIGFuZCB0ZXh0LlxuICAgKiBAc2VlIGhhc05vbmVcbiAgICovXG4gIHB1YmxpYyBnZXQgbm9uZUl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5ub25lSXRlbVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIGRpZmZlcmVudCB0ZXh0IGZvciBub25lIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vbmVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJub25lVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm5vbmVJdGVtVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBub25lVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibm9uZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTm9uZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibm9uZVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIEl0IHJ1bnMgYWdhaW5zdCBlYWNoIGNob2ljZXMgaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgdmlzaWJsZSBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBpbnZpc2libGUuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKiBAc2VlIGNob2ljZXNFbmFibGVJZlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzVmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNWaXNpYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzVmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1Zpc2libGVJZlwiLCB2YWwpO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSXQgcnVucyBhZ2FpbnN0IGVhY2ggY2hvaWNlcyBpdGVtIGFuZCBpZiBmb3IgdGhpcyBpdGVtIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgaXRlbSBpcyBlbmFibGVkIG90aGVyd2lzZSB0aGUgaXRlbSBiZWNvbWVzIGRpc2FibGVkLiBQbGVhc2UgdXNlIHtpdGVtfSB0byBnZXQgdGhlIGN1cnJlbnQgaXRlbSB2YWx1ZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHNlZSBjaG9pY2VzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXNFbmFibGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzRW5hYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRW5hYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuSXRlbXNFbmFibGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVGV4dFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvL2ZvciBjb21tZW50cyBhbmQgb3RoZXJzXG4gIH1cbiAgcHJpdmF0ZSBpc1NldHRpbmdEZWZhdWx0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICB0aGlzLmlzU2V0dGluZ0RlZmF1bHRWYWx1ZSA9XG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpICYmXG4gICAgICB0aGlzLmhhc1Vua25vd25WYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHN1cGVyLnNldERlZmF1bHRWYWx1ZSgpO1xuICAgIHRoaXMuaXNTZXR0aW5nRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzTXVsdGlwbGVWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREZWZhdWx0VmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsO1xuICAgIGlmICh0aGlzLmdldElzTXVsdGlwbGVWYWx1ZSgpKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIFt2YWxdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPiAwKSByZXR1cm4gdmFsWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBmaWx0ZXJJdGVtcygpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAhdGhpcy5kYXRhIHx8XG4gICAgICB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZ1xuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHRoaXMucnVuSXRlbXNFbmFibGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gdGhpcy5ydW5JdGVtc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByb3RlY3RlZCBydW5JdGVtc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxDaG9pY2VzUnVubmVyKCk7XG4gICAgdmFyIGhhc0NoYW5nZXMgPSB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZSAmJlxuICAgICAgdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZS5sZW5ndGggPT09IHRoaXMuYWN0aXZlQ2hvaWNlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICAgIHJldHVybiBoYXNDaGFuZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBydW5JdGVtc0VuYWJsZUNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGFueSB7XG4gICAgdGhpcy5zZXRDb25kaXRpb25hbEVuYWJsZUNob2ljZXNSdW5uZXIoKTtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IEl0ZW1WYWx1ZS5ydW5FbmFibGVkQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgICAgdGhpcy5hY3RpdmVDaG9pY2VzLFxuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuYWJsZUl0ZW1DYWxsQmFjayhpdGVtKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWRWYWx1ZXMoKTtcbiAgICB9XG4gICAgdGhpcy5vbkFmdGVyUnVuSXRlbXNFbmFibGVDb25kaXRpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZnRlclJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKCkge31cbiAgcHJvdGVjdGVkIG9uRW5hYmxlSXRlbUNhbGxCYWNrKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc2V0Q29uZGl0aW9uYWxDaG9pY2VzUnVubmVyKCkge1xuICAgIGlmICh0aGlzLmNob2ljZXNWaXNpYmxlSWYpIHtcbiAgICAgIGlmICghdGhpcy5jb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIoXG4gICAgICAgICAgdGhpcy5jaG9pY2VzVmlzaWJsZUlmXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMuY2hvaWNlc1Zpc2libGVJZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEVuYWJsZUNob2ljZXNSdW5uZXIoKSB7XG4gICAgaWYgKHRoaXMuY2hvaWNlc0VuYWJsZUlmKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcihcbiAgICAgICAgICB0aGlzLmNob2ljZXNFbmFibGVJZlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMuY2hvaWNlc0VuYWJsZUlmO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lciA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZSA9IFtdO1xuICAgIHJldHVybiBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgICAgdGhpcy5hY3RpdmVDaG9pY2VzLFxuICAgICAgdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKSxcbiAgICAgIHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICAhdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZ1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEhhc090aGVyKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbCA9PT0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh0aGlzLnZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzdGZ1bCgpOiBDaG9pY2VzUmVzdGZ1bCB7XG4gICAgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bCgpO1xuICB9XG4gIHByaXZhdGUgc2V0TmV3UmVzdGZ1bFByb3BlcnR5KCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNCeVVybFwiLCB0aGlzLmNyZWF0ZVJlc3RmdWwoKSk7XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwub3duZXIgPSB0aGlzO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmxvYWRpbmdPd25lciA9IHRoaXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQ29tbWVudCgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY29tbWVudFZhbHVlKSByZXR1cm4gdGhpcy5jb21tZW50VmFsdWU7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCB8fCB0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpXG4gICAgICByZXR1cm4gc3VwZXIuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWVudFZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNTZXR0aW5nQ29tbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Db21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5oYXNDb21tZW50IHx8IHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSlcbiAgICAgIHN1cGVyLnNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZSk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuaXNTZXR0aW5nQ29tbWVudCAmJiBuZXdWYWx1ZSAhPSB0aGlzLmNvbW1lbnRWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbW1lbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgIXRoaXMuaXNSZW5kZXJlZFZhbHVlU2V0dGluZykge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YSh0aGlzLnJlbmRlcmVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nQ29tbWVudCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZSgpIHtcbiAgICBzdXBlci5jbGVhclZhbHVlKCk7XG4gICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyZWRWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVmFsdWVcIiwgdmFsKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGEodmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IGJvb2xlYW4gPSB0cnVlXG4gICkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCBuZXdWYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRWYWx1ZVwiLCB0aGlzLnJlbmRyZWRWYWx1ZUZyb21EYXRhKG5ld1ZhbHVlKSk7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCB8fCAhdXBkYXRlQ29tbWVudCkgcmV0dXJuO1xuICAgIHZhciBpc090aGVyU2VsID0gdGhpcy5pc090aGVyU2VsZWN0ZWQ7XG4gICAgaWYgKGlzT3RoZXJTZWwgJiYgISF0aGlzLnByZXZDb21tZW50VmFsdWUpIHtcbiAgICAgIHZhciBvbGRDb21tZW50ID0gdGhpcy5wcmV2Q29tbWVudFZhbHVlO1xuICAgICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jb21tZW50ID0gb2xkQ29tbWVudDtcbiAgICB9XG4gICAgaWYgKCFpc090aGVyU2VsICYmICEhdGhpcy5jb21tZW50KSB7XG4gICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSB7XG4gICAgICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHRoaXMuY29tbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgIGlmIChcbiAgICAgICghdGhpcy5jaG9pY2VzQnlVcmwuaXNSdW5uaW5nICYmXG4gICAgICAgICF0aGlzLmNob2ljZXNCeVVybC5pc1dhaXRpbmdGb3JQYXJhbWV0ZXJzKSB8fFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgbGV0IGNob2ljZWl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5hY3RpdmVDaG9pY2VzLCB2YWwpO1xuICAgIGlmICghIWNob2ljZWl0ZW0pIHtcbiAgICAgIHJldHVybiBjaG9pY2VpdGVtLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIudmFsdWVGcm9tRGF0YSh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZWRWYWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLCB0cnVlLCBmYWxzZSkpIHJldHVybiB0aGlzLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgICB0aGlzLmNvbW1lbnQgPSB2YWw7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlICYmIHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCkpIHtcbiAgICAgIHZhbCA9IHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Vua25vd25WYWx1ZShcbiAgICB2YWw6IGFueSxcbiAgICBpbmNsdWRlT3RoZXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpc0ZpbHRlcmVkQ2hvaWNlczogYm9vbGVhbiA9IHRydWUsXG4gICAgY2hlY2tFbXB0eVZhbHVlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjaGVja0VtcHR5VmFsdWUgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmNsdWRlT3RoZXIgJiYgdmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaGFzTm9uZSAmJiB2YWwgPT0gdGhpcy5ub25lSXRlbS52YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjaG9pY2VzID0gaXNGaWx0ZXJlZENob2ljZXNcbiAgICAgID8gdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKVxuICAgICAgOiB0aGlzLmFjdGl2ZUNob2ljZXM7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShjaG9pY2VzLCB2YWwpID09IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVmFsdWVEaXNhYmxlZCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHZhciBpdGVtVmFsdWUgPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKSwgdmFsKTtcbiAgICByZXR1cm4gISFpdGVtVmFsdWUgJiYgIWl0ZW1WYWx1ZS5pc0VuYWJsZWQ7XG4gIH1cbiAgLyoqXG4gICAqIElmIHRoZSBjbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrIGlzIHNldCwgaXQgaXMgdXNlZCB0byBjbGVhciBpbmNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZGVmYXVsdCBiZWhhdmlvdXIuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXNDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGZpbGwgdGhlIGNob2ljZXMgZnJvbSBhIFJFU1RmdWwgc2VydmljZS5cbiAgICogQHNlZSBjaG9pY2VzXG4gICAqIEBzZWUgQ2hvaWNlc1Jlc3RmdWxcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzQnlVcmwoKTogQ2hvaWNlc1Jlc3RmdWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzQnlVcmxcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzQnlVcmwodmFsOiBDaG9pY2VzUmVzdGZ1bCkge1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXROZXdSZXN0ZnVsUHJvcGVydHkoKTtcbiAgICB0aGlzLmNob2ljZXNCeVVybC5mcm9tSlNPTih2YWwudG9KU09OKCkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpdGVtcy4gRXZlcnkgaXRlbSBoYXMgdmFsdWUgYW5kIHRleHQuIElmIHRleHQgaXMgZW1wdHksIHRoZSB2YWx1ZSBpcyByZW5kZXJlZC4gVGhlIGl0ZW0gdGV4dCBzdXBwb3J0cyBtYXJrZG93bi5cbiAgICogQHNlZSBjaG9pY2VzQnlVcmxcbiAgICogQHNlZSBjaG9pY2VzRnJvbVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGdldCBjaG9pY2VzIGZyb20gdGhlIHNwZWNpZmllZCBxdWVzdGlvbiBpbnN0ZWFkIG9mIGRlZmluaW5nIHRoZW0gaW4gdGhlIGN1cnJlbnQgcXVlc3Rpb24uIFRoaXMgYXZvaWRzIGR1cGxpY2F0aW9uIG9mIGNob2ljZXMgZGVjbGFyYXRpb24gaW4geW91ciBzdXJ2ZXkgZGVmaW5pdGlvbi5cbiAgICogQnkgc2V0dGluZyB0aGlzIHByb3BlcnR5LCB0aGUgXCJjaG9pY2VzXCIsIFwiY2hvaWNlc1Zpc2libGVJZlwiLCBcImNob2ljZXNFbmFibGVJZlwiIGFuZCBcImNob2ljZXNPcmRlclwiIHByb3BlcnRpZXMgYmVjb21lIGludmlzaWJsZSwgYmVjYXVzZSB0aGVzZSBxdWVzdGlvbiBjaGFyYWN0ZXJpc3RpY3MgZGVwZW5kIG9uIGFjdGlvbnMgaW4gYW5vdGhlciAoc3BlY2lmaWVkKSBxdWVzdGlvbi5cbiAgICogVXNlIHRoZSBgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVgIHByb3BlcnR5IHRvIGZpbHRlciBjaG9pY2VzIG9idGFpbmVkIGZyb20gdGhlIHNwZWNpZmllZCBxdWVzdGlvbi5cbiAgICogQHNlZSBjaG9pY2VzXG4gICAqIEBzZWUgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc0Zyb21RdWVzdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc0Zyb21RdWVzdGlvbih2YWw6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25XaXRoQ2hvaWNlcygpO1xuICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICBxdWVzdGlvbi5yZW1vdmVGcm9tRGVwZW5kZWRRdWVzdGlvbih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgYWRkSW50b0RlcGVuZGVkUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSkge1xuICAgIGlmICghcXVlc3Rpb24gfHwgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuaW5kZXhPZih0aGlzKSA+IC0xKSByZXR1cm47XG4gICAgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMucHVzaCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZUZyb21EZXBlbmRlZFF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UpIHtcbiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuaW5kZXhPZih0aGlzKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgYmVjb21lcyB2aXNpYmxlIHdoZW4gdGhlIGBjaG9pY2VzRnJvbVF1ZXN0aW9uYCBwcm9wZXJ0eSBpcyBzZWxlY3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJhbGxcIiAoYWxsIHZpc2libGUgY2hvaWNlcyBmcm9tIGFub3RoZXIgcXVlc3Rpb24gYXJlIGRpc3BsYXllZCBhcyB0aGV5IGFyZSkuXG4gICAqIFlvdSBjYW4gc2V0IHRoaXMgcHJvcGVydHkgdG8gXCJzZWxlY3RlZFwiIG9yIFwidW5zZWxlY3RlZFwiIHRvIGRpc3BsYXkgb25seSBzZWxlY3RlZCBvciB1bnNlbGVjdGVkIGNob2ljZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGNob2ljZXNGcm9tUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSB0aGUgcXVlc3Rpb24gaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSBjaG9pY2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBoaWRlSWZDaG9pY2VzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZkNob2ljZXNFbXB0eVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlSWZDaG9pY2VzRW1wdHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmQ2hvaWNlc0VtcHR5XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBrZWVwSW5jb3JyZWN0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtlZXBJbmNvcnJlY3RWYWx1ZXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwia2VlcEluY29ycmVjdFZhbHVlc1wiLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsZWFzZSB1c2Ugc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb24gdGhlIHN1cnZleSBsZXZlbC4gVGhpcyBwcm9wZXJ0eSBpcyBkZXByaWNhdGVkIGFuZCBpbnZpc2libGUgaW4gU3VydmV5IENyZWF0b3IuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGVudGVyZWQgdGV4dCBpbiB0aGUgb3RoZXJzIGlucHV0IGluIHRoZSBjaGVja2JveC9yYWRpb2dyb3VwL2Ryb3Bkb3duIGFyZSBzdG9yZWQgYXMgXCJxdWVzdGlvbiBuYW1lIFwiICsgXCItQ29tbWVudFwiLiBUaGUgdmFsdWUgaXRzZWxmIGlzIFwicXVlc3Rpb24gbmFtZVwiOiBcIm90aGVyc1wiLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gc3RvcmUgdGhlIGVudGVyZWQgdGV4dCBkaXJlY3RseSBpbiB0aGUgXCJxdWVzdGlvbiBuYW1lXCIga2V5LlxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBcImRlZmF1bHRcIiwgdHJ1ZSwgZmFsc2VcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5zdG9yZU90aGVyc0FzQ29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCBcImRlZmF1bHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdG9yZU90aGVyc0FzQ29tbWVudCh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlbmRlciBpdGVtcyBpbiBhIHNwZWNpZmljIG9yZGVyOiBcImFzY1wiLCBcImRlc2NcIiwgXCJyYW5kb21cIi4gRGVmYXVsdCB2YWx1ZSBpcyBcIm5vbmVcIi5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc09yZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNPcmRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWwgPT0gdGhpcy5jaG9pY2VzT3JkZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzT3JkZXJcIiwgdmFsKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgZGlmZmVyZW50IHRleHQgZm9yIG90aGVyIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwib3RoZXJUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyVGV4dFwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICBnZXQgbG9jT3RoZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgcGxhY2UgaG9sZGVyIHRleHQgZm9yIG90aGVyIG9yIGNvbW1lbnQgZmllbGQgIC5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3RoZXJQbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyUGxhY2VIb2xkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlclBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvdGhlclBsYWNlSG9sZGVyXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY090aGVyUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJQbGFjZUhvbGRlclwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRleHQgdGhhdCBzaG93cyB3aGVuIHRoZSBvdGhlciBpdGVtIGlzIGNob29zZWQgYnkgdGhlIG90aGVyIGlucHV0IGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwib3RoZXJFcnJvclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlclJlcXVpcmVkRXJyb3JcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgb3RoZXJFcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyRXJyb3JUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY090aGVyRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyRXJyb3JUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpdGVtcyBhcyB0aGV5IHdpbGwgYmUgcmVuZGVyZWQuIElmIG5lZWRlZCBpdGVtcyBhcmUgc29ydGVkIGFuZCB0aGUgb3RoZXIgaXRlbSBpcyBhZGRlZC5cbiAgICogQHNlZSBoYXNPdGhlclxuICAgKiBAc2VlIGNob2ljZXNPcmRlclxuICAgKiBAc2VlIGVuYWJsZWRDaG9pY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlQ2hvaWNlc1wiLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVuYWJsZWQgaXRlbXMgYXMgdGhleSB3aWxsIGJlIHJlbmRlcmVkLiBUaGUgZGlzYWJsZWQgaXRlbXMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAc2VlIGhhc090aGVyXG4gICAqIEBzZWUgY2hvaWNlc09yZGVyXG4gICAqIEBzZWUgdmlzaWJsZUNob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgZW5hYmxlZENob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLmlzRW5hYmxlZCkgcmVzLnB1c2goaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVWaXNpYmxlQ2hvaWNlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZSA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XG4gICAgdmFyIGNhbGNWYWx1ZSA9IHRoaXMuY2FsY1Zpc2libGVDaG9pY2VzKCk7XG4gICAgaWYgKCFjYWxjVmFsdWUpIGNhbGNWYWx1ZSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsY1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdWYWx1ZS5wdXNoKGNhbGNWYWx1ZVtpXSk7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVDaG9pY2VzXCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGNhbGNWaXNpYmxlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICBpZiAodGhpcy5jYW5Vc2VGaWx0ZXJlZENob2ljZXMoKSkgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDaG9pY2VzKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMuc29ydFZpc2libGVDaG9pY2VzKHRoaXMuZ2V0RmlsdGVyZWRDaG9pY2VzKCkuc2xpY2UoKSk7XG4gICAgdGhpcy5hZGRUb1Zpc2libGVDaG9pY2VzKHJlcywgdGhpcy5pc0FkZERlZmF1bHRJdGVtcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlRmlsdGVyZWRDaG9pY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5pc0FkZERlZmF1bHRJdGVtcyAmJlxuICAgICAgIXRoaXMuaGFzTm9uZSAmJlxuICAgICAgIXRoaXMuaGFzT3RoZXIgJiZcbiAgICAgIHRoaXMuY2hvaWNlc09yZGVyID09IFwibm9uZVwiXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWRkVG9WaXNpYmxlQ2hvaWNlcyhpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgaXNBZGRBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNBZGRBbGwpIHtcbiAgICAgIGlmICghdGhpcy5uZXdJdGVtVmFsdWUpIHtcbiAgICAgICAgdGhpcy5uZXdJdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKFwibmV3aXRlbVwiKTsgLy9UT0RPXG4gICAgICB9XG4gICAgICBpdGVtcy5wdXNoKHRoaXMubmV3SXRlbVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VwcG9ydE90aGVyKCkgJiYgKGlzQWRkQWxsIHx8IHRoaXMuaGFzT3RoZXIpKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMub3RoZXJJdGVtKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VwcG9ydE5vbmUoKSAmJiAoaXNBZGRBbGwgfHwgdGhpcy5oYXNOb25lKSkge1xuICAgICAgaXRlbXMucHVzaCh0aGlzLm5vbmVJdGVtKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZvciBpbnRlcm5hbCB1c2UgaW4gU3VydmV5SlMgQ3JlYXRvciBWMi5cbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1Jbkxpc3QoaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKGl0ZW0gPT09IHRoaXMub3RoZXJJdGVtKSByZXR1cm4gdGhpcy5oYXNPdGhlcjtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5ub25lSXRlbSkgcmV0dXJuIHRoaXMuaGFzTm9uZTtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5uZXdJdGVtVmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzQWRkRGVmYXVsdEl0ZW1zKCkge1xuICAgIHJldHVybiAoXG4gICAgICBzZXR0aW5ncy5zdXBwb3J0Q3JlYXRvclYyICYmIHRoaXMuaXNEZXNpZ25Nb2RlICYmICF0aGlzLnBhcmVudFF1ZXN0aW9uXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlcz86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICAgIGluY2x1ZGVRdWVzdGlvblR5cGVzOiBmYWxzZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgdmFyIHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogW3RoaXMudmFsdWVdO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSAocXVlc3Rpb25QbGFpbkRhdGEuZGF0YSB8fCBbXSkuY29uY2F0KFxuICAgICAgICB2YWx1ZXMubWFwKChkYXRhVmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgdmFyIGNob2ljZSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCBkYXRhVmFsdWUpO1xuICAgICAgICAgIHZhciBjaG9pY2VEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgICAgbmFtZTogaW5kZXgsXG4gICAgICAgICAgICB0aXRsZTogXCJDaG9pY2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhVmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShcbiAgICAgICAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlcyxcbiAgICAgICAgICAgICAgZGF0YVZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICghIWNob2ljZSkge1xuICAgICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKChjYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjaG9pY2VEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID1cbiAgICAgICAgICAgICAgICBjaG9pY2VbY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgdGhpcy5vdGhlckl0ZW1WYWx1ZSA9PT0gY2hvaWNlKSB7XG4gICAgICAgICAgICBjaG9pY2VEYXRhSXRlbS5pc090aGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGNob2ljZURhdGFJdGVtLmRpc3BsYXlWYWx1ZSA9IHRoaXMuY29tbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNob2ljZURhdGFJdGVtO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHZhbHVlLiBJZiB0aGUgdmFsdWUgaXMgbnVsbCB0aGVuIHJldHVybnMgZW1wdHkgc3RyaW5nLiBJZiAnb3RoZXInIGlzIHNlbGVjdGVkIHRoZW4gcmV0dXJucyB0aGUgdGV4dCBmb3Igb3RoZXIgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzRGlzcGxheVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHVuZGVmaW5lZCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENob2ljZXNEaXNwbGF5VmFsdWUoaXRlbXM6IEl0ZW1WYWx1ZVtdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbVZhbHVlLnZhbHVlKVxuICAgICAgcmV0dXJuIHRoaXMuY29tbWVudCA/IHRoaXMuY29tbWVudCA6IHRoaXMubG9jT3RoZXJUZXh0LnRleHRPckh0bWw7XG4gICAgdmFyIHN0ciA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICByZXR1cm4gc3RyID09IFwiXCIgJiYgdmFsID8gdmFsIDogc3RyO1xuICB9XG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlXG4gICAgICA/IHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWVcbiAgICAgIDogdGhpcy5hY3RpdmVDaG9pY2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uV2l0aENob2ljZXMoKTtcbiAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgdGhpcy5hZGRJbnRvRGVwZW5kZWRRdWVzdGlvbihxdWVzdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzRnJvbVF1ZXN0aW9uKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc0Zyb21VcmwgPyB0aGlzLmNob2ljZXNGcm9tVXJsIDogdGhpcy5nZXRDaG9pY2VzKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRRdWVzdGlvbldpdGhDaG9pY2VzKCk6IFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gICAgaWYgKCF0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24gfHwgIXRoaXMuc3VydmV5KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiBhbnkgPSB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZSh0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pO1xuICAgIHJldHVybiAhIXJlcyAmJiAhIXJlcy52aXNpYmxlQ2hvaWNlcyAmJiByZXMgIT09IHRoaXMgPyByZXMgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzRnJvbVF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIHJlczogQXJyYXk8SXRlbVZhbHVlPiA9IFtdO1xuICAgIHZhciBpc1NlbGVjdGVkID1cbiAgICAgIHRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUgPT0gXCJzZWxlY3RlZFwiXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUgPT0gXCJ1bnNlbGVjdGVkXCJcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2hvaWNlcyA9IHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNCdWlsdEluQ2hvaWNlKGNob2ljZXNbaV0sIHF1ZXN0aW9uKSkgY29udGludWU7XG4gICAgICBpZiAoaXNTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcy5wdXNoKGNob2ljZXNbaV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBpdGVtc1NlbGVjdGVkID0gcXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQoY2hvaWNlc1tpXSk7XG4gICAgICBpZiAoKGl0ZW1zU2VsZWN0ZWQgJiYgaXNTZWxlY3RlZCkgfHwgKCFpdGVtc1NlbGVjdGVkICYmICFpc1NlbGVjdGVkKSkge1xuICAgICAgICByZXMucHVzaChjaG9pY2VzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhc0FjdGl2ZUNob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIGlmICghY2hvaWNlcyB8fCBjaG9pY2VzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICBjaG9pY2VzID0gdGhpcy52aXNpYmxlQ2hvaWNlcztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNCdWlsdEluQ2hvaWNlKGNob2ljZXNbaV0sIHRoaXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBpc0J1aWx0SW5DaG9pY2UoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm5vbmVJdGVtIHx8XG4gICAgICBpdGVtID09PSBxdWVzdGlvbi5vdGhlckl0ZW0gfHxcbiAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm5ld0l0ZW1WYWx1ZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcztcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cHBvcnRQcm9wZXJ0eShcImhhc090aGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Tm9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cHBvcnRQcm9wZXJ0eShcImhhc05vbmVcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGlzU3VwcG9ydFByb3BlcnR5KHByb3BOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaXNEZXNpZ25Nb2RlIHx8XG4gICAgICBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLmdldFR5cGUoKSwgcHJvcE5hbWUpLnZpc2libGVcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmICghdGhpcy5oYXNPdGhlciB8fCAhdGhpcy5pc090aGVyU2VsZWN0ZWQgfHwgdGhpcy5jb21tZW50KSByZXR1cm47XG4gICAgZXJyb3JzLnB1c2gobmV3IE90aGVyRW1wdHlFcnJvcih0aGlzLm90aGVyRXJyb3JUZXh0LCB0aGlzKSk7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5ydW5DaG9pY2VzQnlVcmwoKTtcbiAgICBpZiAodGhpcy5pc0FkZERlZmF1bHRJdGVtcykge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlQ2hvaWNlcygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0U3VydmV5Q29yZSh2YWx1ZTogSVN1cnZleSkge1xuICAgIHN1cGVyLnNldFN1cnZleUNvcmUodmFsdWUpO1xuICAgIGlmICghIXZhbHVlICYmICEhdGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpIHtcbiAgICBpZiAodGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zdG9yZU90aGVyc0FzQ29tbWVudCA9PT0gdHJ1ZSB8fFxuICAgICAgKHRoaXMuc3RvcmVPdGhlcnNBc0NvbW1lbnQgPT0gXCJkZWZhdWx0XCIgJiZcbiAgICAgICAgKHRoaXMuc3VydmV5ICE9IG51bGwgPyB0aGlzLnN1cnZleS5zdG9yZU90aGVyc0FzQ29tbWVudCA6IHRydWUpKSB8fFxuICAgICAgKCF0aGlzLmNob2ljZXNCeVVybC5pc0VtcHR5ICYmICF0aGlzLmNob2ljZXNGcm9tVXJsKVxuICAgICk7XG4gIH1cbiAgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMucnVuQ2hvaWNlc0J5VXJsKCk7XG4gICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIGlmIChuYW1lICE9IHRoaXMuZ2V0VmFsdWVOYW1lKCkpIHtcbiAgICAgIHRoaXMucnVuQ2hvaWNlc0J5VXJsKCk7XG4gICAgfVxuICAgIGlmICghIW5hbWUgJiYgbmFtZSA9PSB0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlVmFsdWVGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB2YXIgbmV3Q29tbWVudCA9IFwiXCI7XG4gICAgaWYgKFxuICAgICAgdGhpcy5oYXNPdGhlciAmJlxuICAgICAgIXRoaXMuaXNSdW5uaW5nQ2hvaWNlcyAmJlxuICAgICAgIXRoaXMuY2hvaWNlc0J5VXJsLmlzUnVubmluZyAmJlxuICAgICAgdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUobmV3VmFsdWUpICYmICF0aGlzLmdldEhhc090aGVyKG5ld1ZhbHVlKSkge1xuICAgICAgICBuZXdDb21tZW50ID0gdGhpcy5nZXRDb21tZW50RnJvbVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnNldE90aGVyVmFsdWVJbnRvVmFsdWUobmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWUpO1xuICAgIGlmICghIW5ld0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0TmV3Q29tbWVudChuZXdDb21tZW50KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbW1lbnRGcm9tVmFsdWUobmV3VmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRPdGhlclZhbHVlSW50b1ZhbHVlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm90aGVySXRlbS52YWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzUnVubmluZ0Nob2ljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBydW5DaG9pY2VzQnlVcmwoKSB7XG4gICAgaWYgKCF0aGlzLmNob2ljZXNCeVVybCB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNSdW5uaW5nQ2hvaWNlcylcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gdGhpcy5zdXJ2ZXlJbXBsXG4gICAgICA/IHRoaXMuc3VydmV5SW1wbC5nZXRUZXh0UHJvY2Vzc29yKClcbiAgICAgIDogdGhpcy50ZXh0UHJvY2Vzc29yO1xuICAgIGlmICghcHJvY2Vzc29yKSBwcm9jZXNzb3IgPSB0aGlzLnN1cnZleTtcbiAgICBpZiAoIXByb2Nlc3NvcikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdGhpcy5pc0Nob2ljZXNMb2FkZWQgfHwgdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eTtcbiAgICB0aGlzLmlzUnVubmluZ0Nob2ljZXMgPSB0cnVlO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLnJ1bihwcm9jZXNzb3IpO1xuICAgIHRoaXMuaXNSdW5uaW5nQ2hvaWNlcyA9IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgaXNGaXJzdExvYWRDaG9pY2VzRnJvbVVybCA9IHRydWU7XG4gIHByb3RlY3RlZCBvbkJlZm9yZVNlbmRSZXF1ZXN0KCkge1xuICAgIGlmIChzZXR0aW5ncy5kaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWIgPT09IHRydWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgdGhpcy5lbmFibGVPbkxvYWRpbmdDaG9pY2VzID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVhZE9ubHkgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkQ2hvaWNlc0Zyb21VcmwoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pIHtcbiAgICBpZiAodGhpcy5lbmFibGVPbkxvYWRpbmdDaG9pY2VzKSB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwgJiYgdGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2godGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuICAgIHZhciBuZXdDaG9pY2VzID0gbnVsbDtcbiAgICB2YXIgY2hlY2tDYWNoZWRWYWx1ZXNPbkV4aXN0aW5nID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRmlyc3RMb2FkQ2hvaWNlc0Zyb21VcmwgJiZcbiAgICAgICF0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgJiZcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGNoZWNrQ2FjaGVkVmFsdWVzT25FeGlzdGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKSkge1xuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gdGhpcy52YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pc0ZpcnN0TG9hZENob2ljZXNGcm9tVXJsID0gZmFsc2U7XG4gICAgdmFyIGNhY2hlZFZhbHVlcyA9IHRoaXMuY3JlYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyxcbiAgICAgIGNoZWNrQ2FjaGVkVmFsdWVzT25FeGlzdGluZ1xuICAgICk7XG4gICAgaWYgKGFycmF5ICYmIChhcnJheS5sZW5ndGggPiAwIHx8IHRoaXMuY2hvaWNlc0J5VXJsLmFsbG93RW1wdHlSZXNwb25zZSkpIHtcbiAgICAgIG5ld0Nob2ljZXMgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xuICAgICAgSXRlbVZhbHVlLnNldERhdGEobmV3Q2hvaWNlcywgYXJyYXkpO1xuICAgIH1cbiAgICBpZiAoISFuZXdDaG9pY2VzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0Nob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmV3Q2hvaWNlc1tpXS5sb2NPd25lciA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hvaWNlc0Zyb21VcmwgPSBuZXdDaG9pY2VzO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgaWYgKG5ld0Nob2ljZXMpIHtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgICAgY2FjaGVkVmFsdWVzLFxuICAgICAgICBuZXdDaG9pY2VzXG4gICAgICApO1xuICAgICAgaWYgKCEhbmV3VmFsdWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgICB2YXIgaGFzQ2hhbmdlZCA9ICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUudmFsdWUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkobmV3VmFsdWUudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldFF1ZXN0aW9uVmFsdWUodW5kZWZpbmVkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSBoYXNDaGFuZ2VkO1xuICAgICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hvaWNlc0xvYWRlZCgpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICB2YWw6IGFueSxcbiAgICBjaGVja09uRXhpc3Rpbmc6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5jcmVhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKHZhbFtpXSwgdHJ1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIGlzRXhpc3RzID0gY2hlY2tPbkV4aXN0aW5nID8gIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCkgOiB0cnVlO1xuICAgIHJldHVybiB7IHZhbHVlOiB2YWwsIGlzRXhpc3RzOiBpc0V4aXN0cyB9O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICB2YWw6IGFueSxcbiAgICBuZXdDaG9pY2VzOiBBcnJheTxJdGVtVmFsdWU+XG4gICk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiBudWxsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1cGRhdGVkVmFsdWUgPSB0aGlzLnVwZGF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMoXG4gICAgICAgICAgdmFsW2ldLFxuICAgICAgICAgIG5ld0Nob2ljZXNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHVwZGF0ZWRWYWx1ZSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodXBkYXRlZFZhbHVlLnZhbHVlKSkge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHVwZGF0ZWRWYWx1ZS52YWx1ZTtcbiAgICAgICAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShuZXdDaG9pY2VzLCB1cGRhdGVkVmFsdWUudmFsdWUpO1xuICAgICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnB1c2gobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyB2YWx1ZTogcmVzIH07XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9XG4gICAgICB2YWwuaXNFeGlzdHMgJiYgdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLnZhbHVlKSA/IG51bGwgOiB2YWwudmFsdWU7XG4gICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUobmV3Q2hvaWNlcywgdmFsdWUpO1xuICAgIGlmICghIWl0ZW0pIHtcbiAgICAgIHZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIH07XG4gIH1cbiAgcHJpdmF0ZSBpc1VwZGF0aW5nQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zID0gZmFsc2U7XG4gIHByb3RlY3RlZCB1cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucykgcmV0dXJuO1xuICAgIHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucyA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zW2ldLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zW2ldLnVwZGF0ZUNob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucygpO1xuICAgIH1cbiAgICB0aGlzLmlzVXBkYXRpbmdDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMgPSBmYWxzZTtcbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKTtcbiAgICBpZiAoISF0aGlzLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICB0aGlzLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKSB7XG4gICAgaWYgKHRoaXMuaGlkZUlmQ2hvaWNlc0VtcHR5KSB7XG4gICAgICB2YXIgZmlsdGVyZWRDaG9pY2VzID0gdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9ICFmaWx0ZXJlZENob2ljZXMgfHwgZmlsdGVyZWRDaG9pY2VzLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc29ydFZpc2libGVDaG9pY2VzKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIG9yZGVyID0gdGhpcy5jaG9pY2VzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAob3JkZXIgPT0gXCJhc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAxKTtcbiAgICBpZiAob3JkZXIgPT0gXCJkZXNjXCIpIHJldHVybiB0aGlzLnNvcnRBcnJheShhcnJheSwgLTEpO1xuICAgIGlmIChvcmRlciA9PSBcInJhbmRvbVwiKSByZXR1cm4gdGhpcy5yYW5kb21pemVBcnJheShhcnJheSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIHByaXZhdGUgc29ydEFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+LCBtdWx0OiBudW1iZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICBpZiAoYS5jYWxjdWxhdGVkVGV4dCA8IGIuY2FsY3VsYXRlZFRleHQpIHJldHVybiAtMSAqIG11bHQ7XG4gICAgICBpZiAoYS5jYWxjdWxhdGVkVGV4dCA+IGIuY2FsY3VsYXRlZFRleHQpIHJldHVybiAxICogbXVsdDtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgcmFuZG9taXplQXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemVBcnJheTxJdGVtVmFsdWU+KGFycmF5KTtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMua2VlcEluY29ycmVjdFZhbHVlcyB8fCB0aGlzLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uQ291bnRCeVZhbHVlTmFtZSh0aGlzLmdldFZhbHVlTmFtZSgpKSA+IDFcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmNob2ljZXNCeVVybCAmJlxuICAgICAgIXRoaXMuY2hvaWNlc0J5VXJsLmlzRW1wdHkgJiZcbiAgICAgICghdGhpcy5jaG9pY2VzRnJvbVVybCB8fCB0aGlzLmNob2ljZXNGcm9tVXJsLmxlbmd0aCA9PSAwKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWVJZkludmlzaWJsZSgpIHtcbiAgICBzdXBlci5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdGVtIGlzIHNlbGVjdGVkXG4gICAqIEBwYXJhbSBpdGVtIGNoZWNrYm94IG9yIHJhZGlvIGl0ZW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNsZWFyRGlzYWJsZWRWYWx1ZXMoKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5zdXJ2ZXkuY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zKSByZXR1cm47XG4gICAgdGhpcy5jbGVhckRpc2FibGVkVmFsdWVzQ29yZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKHRoaXMuY2FuQ2xlYXJWYWx1ZUFuVW5rbm93KHZhbCkpIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuQ2xlYXJWYWx1ZUFuVW5rbm93KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgJiYgdGhpcy5pc090aGVyU2VsZWN0ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJEaXNhYmxlZFZhbHVlc0NvcmUoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZURpc2FibGVkKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XG4gICAgc3VwZXIuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICBpZiAoIXRoaXMuaXNPdGhlclNlbGVjdGVkICYmICF0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldENvbHVtbkNsYXNzKCkge1xuICAgIHZhciBjb2x1bW5DbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5jb2x1bW47XG4gICAgaWYgKHRoaXMuaGFzQ29sdW1ucykge1xuICAgICAgY29sdW1uQ2xhc3MgKz0gXCIgc3YtcS1jb2x1bW4tXCIgKyB0aGlzLmNvbENvdW50O1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uQ2xhc3M7XG4gIH1cbiAgZ2V0SXRlbUluZGV4KGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDaG9pY2VzLmluZGV4T2YoaXRlbSk7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIGxldCBpdGVtQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbTtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc1JlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZDtcbiAgICBjb25zdCBpc0NoZWNrZWQgPVxuICAgICAgdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSB8fFxuICAgICAgKHRoaXMuaXNPdGhlclNlbGVjdGVkICYmIHRoaXMub3RoZXJJdGVtLnZhbHVlID09PSBpdGVtLnZhbHVlKTtcbiAgICBjb25zdCBhbGxvd0hvdmVyID1cbiAgICAgICFpc0Rpc2FibGVkICYmICFpc0NoZWNrZWQgJiYgISghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSk7XG4gICAgY29uc3QgaXNOb25lID0gaXRlbSA9PT0gdGhpcy5ub25lSXRlbTtcbiAgICBpZiAoIXRoaXMuaGFzQ29sdW1ucykge1xuICAgICAgaXRlbUNsYXNzICs9XG4gICAgICAgIHRoaXMuY29sQ291bnQgPT09IDBcbiAgICAgICAgICA/IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1JbmxpbmVcbiAgICAgICAgICA6IFwiIHN2LXEtY29sLVwiICsgdGhpcy5jb2xDb3VudDtcbiAgICB9XG4gICAgaWYgKGlzRGlzYWJsZWQgJiYgISF0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkKVxuICAgICAgaXRlbUNsYXNzICs9IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcbiAgICBpZiAoaXNDaGVja2VkICYmICEhdGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkKVxuICAgICAgaXRlbUNsYXNzICs9IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuICAgIGlmIChhbGxvd0hvdmVyICYmICEhdGhpcy5jc3NDbGFzc2VzLml0ZW1Ib3ZlcilcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgaWYgKGlzTm9uZSAmJiAhIXRoaXMuY3NzQ2xhc3Nlcy5pdGVtTm9uZSlcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtTm9uZTtcbiAgICByZXR1cm4gaXRlbUNsYXNzO1xuICB9XG4gIGdldExhYmVsQ2xhc3MoaXRlbTogSXRlbVZhbHVlKSB7XG4gICAgdmFyIGxhYmVsQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMubGFiZWw7XG4gICAgaWYgKHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgIGxhYmVsQ2xhc3MgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMubGFiZWxDaGVja2VkO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWxDbGFzcztcbiAgfVxuICBnZXRDb250cm9sTGFiZWxDbGFzcyhpdGVtOiBJdGVtVmFsdWUpIHtcbiAgICB2YXIgY29udHJvbExhYmVsQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKSB7XG4gICAgICBjb250cm9sTGFiZWxDbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWxDaGVja2VkO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbExhYmVsQ2xhc3M7XG4gIH1cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgdmFyIGNvbHVtbnMgPSBbXTtcbiAgICB2YXIgY29sQ291bnQgPSB0aGlzLmNvbENvdW50O1xuICAgIGlmICh0aGlzLmhhc0NvbHVtbnMgJiYgdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc2V0dGluZ3Muc2hvd0l0ZW1zSW5PcmRlciA9PSBcImNvbHVtblwiKSB7XG4gICAgICAgIHZhciBwcmV2SW5kZXggPSAwO1xuICAgICAgICB2YXIgbGVmdEVsZW1lbnRzQ291bnQgPSB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aCAlIGNvbENvdW50O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHtcbiAgICAgICAgICB2YXIgY29sdW1uID0gW107XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBqID0gcHJldkluZGV4O1xuICAgICAgICAgICAgaiA8IHByZXZJbmRleCArIE1hdGguZmxvb3IodGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggLyBjb2xDb3VudCk7XG4gICAgICAgICAgICBqKytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbHVtbi5wdXNoKHRoaXMudmlzaWJsZUNob2ljZXNbal0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGVmdEVsZW1lbnRzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBsZWZ0RWxlbWVudHNDb3VudC0tO1xuICAgICAgICAgICAgY29sdW1uLnB1c2godGhpcy52aXNpYmxlQ2hvaWNlc1tqXSk7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByZXZJbmRleCA9IGo7XG4gICAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykge1xuICAgICAgICAgIHZhciBjb2x1bW4gPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoOyBqICs9IGNvbENvdW50KSB7XG4gICAgICAgICAgICBjb2x1bW4ucHVzaCh0aGlzLnZpc2libGVDaG9pY2VzW2pdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cbiAgZ2V0IGhhc0NvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sQ291bnQgPiAxO1xuICB9XG4gIHB1YmxpYyBjaG9pY2VzTG9hZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuaXNDaG9pY2VzTG9hZGVkID0gdHJ1ZTtcbiAgICBsZXQgb2xkSXNSZWFkeTogYm9vbGVhbiA9IHRoaXMuaXNSZWFkeVZhbHVlO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm9uUmVhZHlDaGFuZ2VkICYmXG4gICAgICB0aGlzLm9uUmVhZHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgaXNSZWFkeTogdHJ1ZSxcbiAgICAgICAgb2xkSXNSZWFkeTogb2xkSXNSZWFkeSxcbiAgICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtOiBJdGVtVmFsdWUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICByZXR1cm4gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnROYW1lKGl0ZW0sIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKGl0ZW06IEl0ZW1WYWx1ZSk6IGFueSB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHJldHVybiBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudERhdGEoaXRlbSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG59XG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLiBJdCBpbnRyb2R1Y2VkIGEgY29sQ291bnQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94QmFzZSBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciByYWRpb2dyb3VwIGFuZCBjaGVja2JveCBxdWVzdGlvbnMuIEl0ZW1zIGFyZSByZW5kcmVkIGluIG9uZSBsaW5lIGlmIHRoZSB2YWx1ZSBpcyAwLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCB0aGlzLmlzRmxvd0xheW91dCA/IDAgOiAxKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gNSB8fCB0aGlzLmlzRmxvd0xheW91dCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIHZhbHVlKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25QYXJlbnRDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uUGFyZW50Q2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmlzRmxvd0xheW91dCkge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblBhcmVudFF1ZXN0aW9uQ2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBrZXlzLnB1c2goXCJjaG9pY2VzXCIpO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNlbGVjdGJhc2VcIixcbiAgW1xuICAgIHsgbmFtZTogXCJoYXNDb21tZW50OnN3aXRjaFwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbW1lbnRUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzQ29tbWVudFwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc0NvbW1lbnQ7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIsXG4gICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfSxcbiAgICBcImNob2ljZXNGcm9tUXVlc3Rpb246cXVlc3Rpb25fc2VsZWN0YmFzZVwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVbXVwiLFxuICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIik7XG4gICAgICB9LFxuICAgICAgZGVwZW5kc09uOiBcImNob2ljZXNGcm9tUXVlc3Rpb25cIixcbiAgICAgIHZpc2libGVJZjogKG9iajogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiAhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJhbGxcIixcbiAgICAgIGNob2ljZXM6IFtcImFsbFwiLCBcInNlbGVjdGVkXCIsIFwidW5zZWxlY3RlZFwiXSxcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gISFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNPcmRlclwiLFxuICAgICAgZGVmYXVsdDogXCJub25lXCIsXG4gICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSxcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gIW9iai5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlc0J5VXJsOnJlc3RmdWxsXCIsXG4gICAgICBjbGFzc05hbWU6IFwiQ2hvaWNlc1Jlc3RmdWxcIixcbiAgICAgIG9uR2V0VmFsdWU6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouY2hvaWNlc0J5VXJsLmdldERhdGEoKTtcbiAgICAgIH0sXG4gICAgICBvblNldFZhbHVlOiBmdW5jdGlvbihvYmo6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgICBvYmouY2hvaWNlc0J5VXJsLnNldERhdGEodmFsdWUpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwiaGlkZUlmQ2hvaWNlc0VtcHR5OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNFbmFibGVJZjpjb25kaXRpb25cIixcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gIW9iai5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwiaGFzT3RoZXI6Ym9vbGVhblwiLFxuICAgIFwiaGFzTm9uZTpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJvdGhlclBsYWNlSG9sZGVyXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJQbGFjZUhvbGRlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc090aGVyXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3RoZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJub25lVGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY05vbmVUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzTm9uZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc05vbmU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJvdGhlclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNPdGhlclwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc090aGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwib3RoZXJFcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlckVycm9yVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc090aGVyXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3RoZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIHRydWUsIGZhbHNlXSxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG4gIG51bGwsXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjaGVja2JveGJhc2VcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiAxLFxuICAgICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDVdLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gIF0sXG4gIG51bGwsXG4gIFwic2VsZWN0YmFzZVwiXG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIGJvb2xlYW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsRmFsc2VcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsVHJ1ZVwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmxvY0xhYmVsRmFsc2Uub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiAhIXRleHRcbiAgICAgICAgPyB0ZXh0XG4gICAgICAgIDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImJvb2xlYW5VbmNoZWNrZWRMYWJlbFwiKTtcbiAgICB9O1xuICAgIHRoaXMubG9jTGFiZWxUcnVlLm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0XG4gICAgICAgID8gdGV4dFxuICAgICAgICA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJib29sZWFuQ2hlY2tlZExhYmVsXCIpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFzICE9PSBcImNoZWNrYm94XCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gY2hlY2sgd2lsbCBiZSByZW5kZXJlZCBpbiBpbmRldGVybWluYXRlIG1vZGUuIHZhbHVlIGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEdldC9zZXQgcXVlc3Rpb24gdmFsdWUgaW4gMyBtb2RlczogaW5kZXRlcm1pbmF0ZSAodmFsdWUgaXMgZW1wdHkpLCB0cnVlIChjaGVjayBpcyBzZXQpIGFuZCBmYWxzZSAoY2hlY2sgaXMgdW5zZXQpLlxuICAgKiBAc2VlIHZhbHVlVHJ1ZVxuICAgKiBAc2VlIHZhbHVlRmFsc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tlZFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PSB0aGlzLmdldFZhbHVlVHJ1ZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hlY2tlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldENoZWNrZWRWYWx1ZSh2YWwpO1xuICB9XG4gIHByaXZhdGUgc2V0Q2hlY2tlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsID09IHRydWUgPyB0aGlzLmdldFZhbHVlVHJ1ZSgpIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGNoZWNrOiBcImluZGV0ZXJtaW5hdGVcIiAtIGRlZmF1bHQgKHZhbHVlIGlzIGVtcHR5L251bGwpLCBcInRydWVcIiAtIHZhbHVlIGVxdWFscyB2YWx1ZVRydWUgb3IgdHJ1ZSwgXCJmYWxzZVwiIC0gdmFsdWUgZXF1YWxzIHZhbHVlRmFsc2Ugb3IgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB2YWwgPSBcInRydWVcIjtcbiAgICBpZiAodmFsID09PSBmYWxzZSkgdmFsID0gXCJmYWxzZVwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZVwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlID09IFwiaW5kZXRlcm1pbmF0ZVwiKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlID09IFwidHJ1ZVwiXG4gICAgICA/IHRoaXMuZ2V0VmFsdWVUcnVlKClcbiAgICAgIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpdGxlIHx8IHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMubG9jTGFiZWwudGV4dClcbiAgICAgID8gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpXG4gICAgICA6IHRoaXMubG9jTGFiZWw7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjaGVja2JveCBsYWJlbC4gSWYgaXQgaXMgZW1wdHkgYW5kIHNob3dUaXRsZSBpcyBmYWxzZSB0aGVuIHRpdGxlIGlzIHJlbmRlcmVkXG4gICAqIEBzZWUgc2hvd1RpdGxlXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGxvY2FsaXphYmxlOiB0cnVlIH0pXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgZ2V0IGxvY0Rpc3BsYXlMYWJlbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgaWYgKHRoaXMubG9jTGFiZWwudGV4dCkgcmV0dXJuIHRoaXMubG9jTGFiZWw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpdGxlID8gdGhpcy5sb2NMYWJlbCA6IHRoaXMubG9jVGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHksIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgbGFiZWwgZm9yIHN0YXRlIHdoZW4gY2hlY2sgaXMgc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbFRydWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsYWJlbFRydWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBsYWJlbFRydWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsVHJ1ZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NMYWJlbFRydWUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxUcnVlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IGxhYmVsIGZvciBzdGF0ZSB3aGVuIGNoZWNrIGlzIHVuc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbEZhbHNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxGYWxzZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxhYmVsRmFsc2UodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsRmFsc2VcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTGFiZWxGYWxzZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbEZhbHNlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gc2hvdyB0aGUgcXVlc3Rpb24gdGl0bGUuIEl0IGlzIGhpZGRlbiBieSBkZWZhdWx0LlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgc2hvd1RpdGxlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmcm9tIHRydWUgd2hlbiBjaGVjayBpcyBzZXQuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICB2YWx1ZVRydWU6IGFueTtcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gZmFsc2Ugd2hlbiBjaGVjayBpcyB1bnNldC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHZhbHVlRmFsc2U6IGFueTtcblxuICBwcml2YXRlIGdldFZhbHVlVHJ1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlVHJ1ZSA/IHRoaXMudmFsdWVUcnVlIDogdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRmFsc2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZUZhbHNlID8gdGhpcy52YWx1ZUZhbHNlIDogZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJ0cnVlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKHRydWUpO1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcImZhbHNlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKGZhbHNlKTtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJpbmRldGVybWluYXRlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSB0aGlzLmdldFZhbHVlVHJ1ZSgpKSByZXR1cm4gdGhpcy5sb2NMYWJlbFRydWUudGV4dE9ySHRtbDtcbiAgICByZXR1cm4gdGhpcy5sb2NMYWJlbEZhbHNlLnRleHRPckh0bWw7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJib29sZWFuXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwibGFiZWw6dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTGFiZWxcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibGFiZWxUcnVlOnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMYWJlbFRydWVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibGFiZWxGYWxzZTp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTGFiZWxGYWxzZVwiLFxuICAgIH0sXG4gICAgXCJzaG93VGl0bGU6Ym9vbGVhblwiLFxuICAgIFwidmFsdWVUcnVlXCIsXG4gICAgXCJ2YWx1ZUZhbHNlXCIsXG4gICAgeyBuYW1lOiBcInJlbmRlckFzXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQm9vbGVhbk1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJvb2xlYW5cIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkJvb2xlYW5Nb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciwgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5cbmV4cG9ydCBjbGFzcyBCdXR0b25Hcm91cEl0ZW1WYWx1ZSBleHRlbmRzIEl0ZW1WYWx1ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbHVlOiBhbnksXG4gICAgdGV4dDogc3RyaW5nID0gbnVsbCxcbiAgICBwcm90ZWN0ZWQgdHlwZU5hbWUgPSBcImJ1dHRvbmdyb3VwaXRlbXZhbHVlXCJcbiAgKSB7XG4gICAgc3VwZXIodmFsdWUsIHRleHQsIHR5cGVOYW1lKTtcbiAgfVxuICAvKlxuICAgIEl0ZW0gaWNvbiBwcm9wZXJ0eVxuICAqL1xuICBAcHJvcGVydHkoKVxuICBpY29uTmFtZTogc3RyaW5nO1xuICAvKlxuICAgIEJ5IGRlZmF1bHQgaWNvbiBzaXplIGlzIDI0LlxuICAgIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSBpdGVtIGljb24gc2l6ZS4gIFxuICAqL1xuICBAcHJvcGVydHkoKVxuICBpY29uU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCBpdGVtIGNhcHRpb24gaXMgdmlzaWJsZS5cbiAgICogU2V0IGl0ICdmYWxzZScgdG8gaGlkZSBpdGVtIGNhcHRpb24uXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBzaG93Q2FwdGlvbjogYm9vbGVhbjtcbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnR5cGVOYW1lID8gdGhpcy50eXBlTmFtZSA6IFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIjtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgYnV0dG9uIGdyb3VwIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJ1dHRvbmdyb3VwXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1WYWx1ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImJ1dHRvbmdyb3VwXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXM6YnV0dG9uZ3JvdXBpdGVtdmFsdWVbXVwiLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94YmFzZVwiXG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImJ1dHRvbmdyb3VwaXRlbXZhbHVlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwic2hvd0NhcHRpb246Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImljb25OYW1lOnRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJpY29uU2l6ZTpudW1iZXJcIiB9LFxuICBdLFxuICAodmFsdWU6IGFueSkgPT4gbmV3IEJ1dHRvbkdyb3VwSXRlbVZhbHVlKHZhbHVlKSxcbiAgXCJpdGVtdmFsdWVcIlxuKTtcblxuLy8gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCBuYW1lID0+IHtcbi8vICAgdmFyIHEgPSBuZXcgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsKG5hbWUpO1xuLy8gICBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7XG4vLyAgIHJldHVybiBxO1xuLy8gfSk7XG5cbmV4cG9ydCBjbGFzcyBCdXR0b25Hcm91cEl0ZW1Nb2RlbCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxuICAgIHB1YmxpYyBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcHVibGljIGluZGV4OiBudW1iZXJcbiAgKSB7fVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpY29uTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmljb25OYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgaWNvblNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5pY29uU2l6ZSB8fCAyNDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dDYXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uc2hvd0NhcHRpb24gfHwgdGhpcy5pdGVtLnNob3dDYXB0aW9uID09PSB1bmRlZmluZWQ7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWQ7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLml0ZW0pO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICF0aGlzLml0ZW0uaXNFbmFibGVkO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyB0aGlzLnF1ZXN0aW9uLmlkO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgdGhpcy5pbmRleDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Vycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlc2NyaWJlZEJ5KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0IGxhYmVsQ2xhc3MoKSB7XG4gICAgbGV0IGNzcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVNlbGVjdGVkO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucmVhZE9ubHkgJiYgIXRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIGNzcyArPSBcIiBcIiArIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgfHwgIXRoaXMuaXRlbS5pc0VuYWJsZWQpIHtcbiAgICAgIGNzcyArPSBcIiBcIiArIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiBjc3M7XG4gIH1cbiAgcHVibGljIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsQ2xhc3MsXG4gICAgICBpY29uOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUljb24sXG4gICAgICBjb250cm9sOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICBjYXB0aW9uOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNhcHRpb24sXG4gICAgICBkZWNvcmF0b3I6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgIH07XG4gIH1cbiAgcHVibGljIG9uQ2hhbmdlKCkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25DaGVja2JveEJhc2UsXG4gIFF1ZXN0aW9uU2VsZWN0QmFzZSxcbn0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgY2hlY2tib3ggcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcbiAgcHJpdmF0ZSBzZWxlY3RBbGxJdGVtVmFsdWU6IEl0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoXCJzZWxlY3RhbGxcIik7XG4gIHByaXZhdGUgaW52aXNpYmxlT2xkVmFsdWVzOiBhbnkgPSB7fTtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIHNlbGVjdEFsbEl0ZW1UZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwic2VsZWN0QWxsVGV4dFwiLFxuICAgICAgdGhpcyxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHNlbGVjdEFsbEl0ZW1UZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwic2VsZWN0QWxsSXRlbVRleHRcIik7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdEFsbEl0ZW0ubG9jT3duZXIgPSB0aGlzO1xuICAgIHRoaXMuc2VsZWN0QWxsSXRlbS5zZXRMb2NUZXh0KHNlbGVjdEFsbEl0ZW1UZXh0KTtcblxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImhhc1NlbGVjdEFsbFwiLCBcInNlbGVjdEFsbFRleHRcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJpYVJvbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJncm91cFwiO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY2hlY2tib3hcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHtcbiAgICBzdXBlci5vbkNyZWF0aW5nKCk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInJlbmRlcmVkVmFsdWVcIik7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiXzBcIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0IGFsbCBpdGVtLiBCeSB1c2luZyB0aGlzIHByb3BlcnR5LCB5b3UgbWF5IGNoYW5nZSBwcm9ncmFtbWF0aWNhbGx5IGl0J3MgdmFsdWUgYW5kIHRleHQuXG4gICAqIEBzZWUgaGFzU2VsZWN0QWxsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdEFsbEl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RBbGxJdGVtVmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgZGlmZmVyZW50IHRleHQgZm9yIFNlbGVjdCBBbGwgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0QWxsVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwic2VsZWN0QWxsVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInNlbGVjdEFsbEl0ZW1UZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdEFsbFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInNlbGVjdEFsbFRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jU2VsZWN0QWxsVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJzZWxlY3RBbGxUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBzaG93IHRoZSBcIlNlbGVjdCBBbGxcIiBpdGVtIG9uIHRoZSB0b3AuIElmIGVuZC11c2VyIGNoZWNrcyB0aGlzIGl0ZW0sIHRoZW4gYWxsIGl0ZW1zIGFyZSBjaGVja2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNTZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc1NlbGVjdEFsbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoYXNTZWxlY3RBbGwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzU2VsZWN0QWxsXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkXG4gICAqIEBzZWUgdG9nZ2xlU2VsZWN0QWxsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKHRoaXMubm9uZUl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGFsbEl0ZW1Db3VudCA9IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoO1xuICAgIGlmICh0aGlzLmhhc090aGVyKSBhbGxJdGVtQ291bnQtLTtcbiAgICBpZiAodGhpcy5oYXNOb25lKSBhbGxJdGVtQ291bnQtLTtcbiAgICBpZiAodGhpcy5oYXNTZWxlY3RBbGwpIGFsbEl0ZW1Db3VudC0tO1xuICAgIHZhciBzZWxlY3RlZENvdW50ID0gdmFsLmxlbmd0aDtcbiAgICBpZiAodGhpcy5pc0l0ZW1TZWxlY3RlZCh0aGlzLm90aGVySXRlbSkpIHNlbGVjdGVkQ291bnQtLTtcbiAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA9PT0gYWxsSXRlbUNvdW50O1xuICB9XG4gIHB1YmxpYyBzZXQgaXNBbGxTZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEl0IHdpbGwgc2VsZWN0IGFsbCBpdGVtcywgZXhjZXB0IG90aGVyIGFuZCBub25lLiBJZiBhbGwgaXRlbXMgaGF2ZSBiZWVuIGFscmVhZHkgc2VsZWN0ZWQgdGhlbiBpdCB3aWxsIGNsZWFyIHRoZSB2YWx1ZVxuICAgKiBAc2VlIGlzQWxsU2VsZWN0ZWRcbiAgICogQHNlZSBzZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkID0gIXRoaXMuaXNBbGxTZWxlY3RlZDtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0IGFsbCBpdGVtcywgZXhjZXB0IG90aGVyIGFuZCBub25lLlxuICAgKi9cbiAgcHVibGljIHNlbGVjdEFsbCgpIHtcbiAgICB2YXIgdmFsID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMudmlzaWJsZUNob2ljZXNbaV07XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0gPT09IHRoaXMubm9uZUl0ZW0gfHxcbiAgICAgICAgaXRlbSA9PT0gdGhpcy5vdGhlckl0ZW0gfHxcbiAgICAgICAgaXRlbSA9PT0gdGhpcy5zZWxlY3RBbGxJdGVtXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFsLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdGVtIGlzIGNoZWNrZWRcbiAgICogQHBhcmFtIGl0ZW0gY2hlY2tib3ggaXRlbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW0pIHJldHVybiB0aGlzLmlzQWxsU2VsZWN0ZWQ7XG4gICAgdmFyIHZhbCA9IHRoaXMucmVuZGVyZWRWYWx1ZTtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsW2ldLCBpdGVtLnZhbHVlKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgZGlmZmVyZW50IHRvIDAgdG8gbGltaXQgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBjaG9pY2VzIGluIHRoZSBjaGVja2JveC5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4U2VsZWN0ZWRDaG9pY2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFNlbGVjdGVkQ2hvaWNlc1wiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFNlbGVjdGVkQ2hvaWNlcyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwKSB2YWwgPSAwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFNlbGVjdGVkQ2hvaWNlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSBjaGVja2JveC4gUmV0dXJucyBlbXB0eSBhcnJheSBpZiB0aGUgdmFsdWUgaXMgZW1wdHlcbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBbXTtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB2YWxbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgb25FbmFibGVJdGVtQ2FsbEJhY2soaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3VsZENoZWNrTWF4U2VsZWN0ZWRDaG9pY2VzKCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBvbkFmdGVyUnVuSXRlbXNFbmFibGVDb25kaXRpb24oKSB7XG4gICAgaWYgKHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzIDwgMSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGxJdGVtLnNldElzRW5hYmxlZChcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RlZENob2ljZXMgPj0gdGhpcy5hY3RpdmVDaG9pY2VzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIHtcbiAgICAgIHRoaXMub3RoZXJJdGVtLnNldElzRW5hYmxlZChcbiAgICAgICAgIXRoaXMuc2hvdWxkQ2hlY2tNYXhTZWxlY3RlZENob2ljZXMoKSB8fCB0aGlzLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzaG91bGRDaGVja01heFNlbGVjdGVkQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5tYXhTZWxlY3RlZENob2ljZXMgPCAxKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGxlbiA9ICFBcnJheS5pc0FycmF5KHZhbCkgPyAwIDogdmFsLmxlbmd0aDtcbiAgICByZXR1cm4gbGVuID49IHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzO1xuICB9XG4gIGdldEl0ZW1DbGFzcyhpdGVtOiBhbnkpIHtcbiAgICBsZXQgdmFsID0gdGhpcy52YWx1ZTsgLy90cmlnZ2VyIGRlcGVuZGVuY2llcyBmcm9tIGtvVmFsdWUgZm9yIGtub2Nrb3V0XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHN1cGVyLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgICBjb25zdCBpc1NlbGVjdEFsbCA9IGl0ZW0gPT09IHRoaXMuc2VsZWN0QWxsSXRlbTtcbiAgICBpZiAoaXNTZWxlY3RBbGwgJiYgISF0aGlzLmNzc0NsYXNzZXMuaXRlbVNlbGVjdEFsbClcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtU2VsZWN0QWxsO1xuICAgIHJldHVybiBpdGVtQ2xhc3M7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCkge1xuICAgICAgdGhpcy5pbnZpc2libGVPbGRWYWx1ZXMgPSBbXTtcbiAgICB9XG4gICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSBbXTtcbiAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9IFtdO1xuICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmhhc05vbmUpIHtcbiAgICAgIHZhciBwcmV2Tm9uZUluZGV4ID0gdGhpcy5ub25lSW5kZXhJbkFycmF5KHZhbHVlKTtcbiAgICAgIHZhciBuZXdOb25lSW5kZXggPSB0aGlzLm5vbmVJbmRleEluQXJyYXkobmV3VmFsdWUpO1xuICAgICAgaWYgKHByZXZOb25lSW5kZXggPiAtMSkge1xuICAgICAgICBpZiAobmV3Tm9uZUluZGV4ID4gLTEgJiYgbmV3VmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZShuZXdOb25lSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3Tm9uZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoMCwgbmV3VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMubm9uZUl0ZW0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnNldE5ld1ZhbHVlKHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhKG5ld1ZhbHVlKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzTXVsdGlwbGVWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29tbWVudEZyb21WYWx1ZShuZXdWYWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgaW5kID0gdGhpcy5nZXRGaXJzdFVua25vd25JbmRleChuZXdWYWx1ZSk7XG4gICAgaWYgKGluZCA8IDApIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBuZXdWYWx1ZVtpbmRdO1xuICB9XG4gIHByb3RlY3RlZCBzZXRPdGhlclZhbHVlSW50b1ZhbHVlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciBpbmQgPSB0aGlzLmdldEZpcnN0VW5rbm93bkluZGV4KG5ld1ZhbHVlKTtcbiAgICBpZiAoaW5kIDwgMCkgcmV0dXJuIG5ld1ZhbHVlO1xuICAgIG5ld1ZhbHVlLnNwbGljZShpbmQsIDEsIHRoaXMub3RoZXJJdGVtLnZhbHVlKTtcbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRGaXJzdFVua25vd25JbmRleChuZXdWYWx1ZTogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSByZXR1cm4gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaGFzVW5rbm93blZhbHVlKG5ld1ZhbHVlW2ldKSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcml2YXRlIG5vbmVJbmRleEluQXJyYXkodmFsOiBhbnkpIHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gLTE7XG4gICAgdmFyIG5vbmVWYWx1ZSA9IHRoaXMubm9uZUl0ZW0udmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWxbaV0gPT0gbm9uZVZhbHVlKSByZXR1cm4gaTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VGaWx0ZXJlZENob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc1NlbGVjdEFsbCAmJiBzdXBlci5jYW5Vc2VGaWx0ZXJlZENob2ljZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3VwcG9ydFNlbGVjdEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cHBvcnRQcm9wZXJ0eShcImhhc1NlbGVjdEFsbFwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWRkVG9WaXNpYmxlQ2hvaWNlcyhpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgaXNBZGRBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zdXBwb3J0U2VsZWN0QWxsKCkgJiYgKGlzQWRkQWxsIHx8IHRoaXMuaGFzU2VsZWN0QWxsKSkge1xuICAgICAgaXRlbXMudW5zaGlmdCh0aGlzLnNlbGVjdEFsbEl0ZW0pO1xuICAgIH1cbiAgICBzdXBlci5hZGRUb1Zpc2libGVDaG9pY2VzKGl0ZW1zLCBpc0FkZEFsbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQnVpbHRJbkNob2ljZShcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbSA9PT0gKDxRdWVzdGlvbkNoZWNrYm94QmFzZT5xdWVzdGlvbikuc2VsZWN0QWxsSXRlbSB8fFxuICAgICAgc3VwZXIuaXNCdWlsdEluQ2hvaWNlKGl0ZW0sIHF1ZXN0aW9uKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEZvciBpbnRlcm5hbCB1c2UgaW4gU3VydmV5SlMgQ3JlYXRvciBWMi5cbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1Jbkxpc3QoaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKGl0ZW0gPT0gdGhpcy5zZWxlY3RBbGxJdGVtKSByZXR1cm4gdGhpcy5oYXNTZWxlY3RBbGw7XG4gICAgcmV0dXJuIHN1cGVyLmlzSXRlbUluTGlzdChpdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dCwgdmFsdWUpO1xuICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbFN0ciA9IHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShpdGVtcywgdmFsdWVbaV0pO1xuICAgICAgaWYgKHZhbFN0cikge1xuICAgICAgICBpZiAoc3RyKSBzdHIgKz0gXCIsIFwiO1xuICAgICAgICBzdHIgKz0gdmFsU3RyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKSB7XG4gICAgdGhpcy5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKGZhbHNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJEaXNhYmxlZFZhbHVlc0NvcmUoKSB7XG4gICAgdGhpcy5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKHRydWUpO1xuICB9XG4gIHByaXZhdGUgaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNsZWFySW5jb3JyZWN0QW5kRGlzYWJsZWRWYWx1ZXMoY2xlYXJEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIHJlc3RvcmVkVmFsdWVzID0gdGhpcy5yZXN0b3JlVmFsdWVzRnJvbUludmlzaWJsZSgpO1xuICAgIGlmICghdmFsICYmIHJlc3RvcmVkVmFsdWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSB0cnVlO1xuICAgICAgaWYgKCFjbGVhckRpc2FibGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0ID0gZmFsc2U7XG4gICAgICBpZiAocmVzdG9yZWRWYWx1ZXMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgIHZhbCA9IFtdO1xuICAgIH1cbiAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzVW5rb3duID0gdGhpcy5jYW5DbGVhclZhbHVlQW5Vbmtub3codmFsW2ldKTtcbiAgICAgIGlmIChcbiAgICAgICAgKCFjbGVhckRpc2FibGVkICYmICFpc1Vua293bikgfHxcbiAgICAgICAgKGNsZWFyRGlzYWJsZWQgJiYgIXRoaXMuaXNWYWx1ZURpc2FibGVkKHZhbFtpXSkpXG4gICAgICApIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaCh2YWxbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmIChpc1Vua293bikge1xuICAgICAgICAgIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzW3ZhbFtpXV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdG9yZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1ZhbHVlLnB1c2gocmVzdG9yZWRWYWx1ZXNbaV0pO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaGFzQ2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCA9IHRydWU7XG4gICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVWYWx1ZXNGcm9tSW52aXNpYmxlKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgdmlzSXRlbXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2aXNJdGVtc1tpXS52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmludmlzaWJsZU9sZFZhbHVlc1t2YWxdKSB7XG4gICAgICAgIHJlcy5wdXNoKHZhbCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmludmlzaWJsZU9sZFZhbHVlc1t2YWxdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICB2YXIganNvbiA9IHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICBpZiAob3BlcmF0b3IgPT0gXCJjb250YWluc1wiIHx8IG9wZXJhdG9yID09IFwibm90Y29udGFpbnNcIikge1xuICAgICAganNvbltcInR5cGVcIl0gPSBcInJhZGlvZ3JvdXBcIjtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHVibGljIGlzQW5zd2VyQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSGVscGVycy5pc0FycmF5Q29udGFpbnNFcXVhbCh0aGlzLnZhbHVlLCB0aGlzLmNvcnJlY3RBbnN3ZXIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWVXaXRoT3RoZXJzKCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdmFsLmluZGV4T2YodGhpcy5vdGhlckl0ZW0udmFsdWUpID49IDA7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsKSByZXR1cm4gdmFsO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gW3N1cGVyLnZhbHVlRnJvbURhdGEodmFsKV07XG4gICAgbGV0IHZhbHVlID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaG9pY2VpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMuYWN0aXZlQ2hvaWNlcywgdmFsW2ldKTtcbiAgICAgIGlmICghIWNob2ljZWl0ZW0pIHtcbiAgICAgICAgdmFsdWUucHVzaChjaG9pY2VpdGVtLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSB2YWwgPSBbXTtcbiAgICBpZiAoIXRoaXMuaGFzQWN0aXZlQ2hvaWNlcykgcmV0dXJuIHZhbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbFtpXSA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkgcmV0dXJuIHZhbDtcbiAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWxbaV0sIHRydWUsIGZhbHNlKSkge1xuICAgICAgICB0aGlzLmNvbW1lbnQgPSB2YWxbaV07XG4gICAgICAgIHZhciBuZXdWYWwgPSB2YWwuc2xpY2UoKTtcbiAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5vdGhlckl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZWRWYWx1ZVRvRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsIHx8ICF2YWwubGVuZ3RoKSByZXR1cm4gdmFsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpKSB7XG4gICAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xuICAgICAgICAgIG5ld1ZhbFtpXSA9IHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNoZWNrYm94XCIsXG4gIFtcbiAgICBcImhhc1NlbGVjdEFsbDpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcIm1heFNlbGVjdGVkQ2hvaWNlczpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NTZWxlY3RBbGxUZXh0XCIgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwiY2hlY2tib3hiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRiYXNlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBjb21tZW50IHF1ZXN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNvbW1lbnRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uVGV4dEJhc2Uge1xuICAvKipcbiAgICogVGhlIGh0bWwgcm93cyBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3ModmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBodG1sIGNvbHMgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2xzKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNvbW1lbnRcIixcbiAgW1xuICAgIHsgbmFtZTogXCJtYXhMZW5ndGg6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcImNvbHM6bnVtYmVyXCIsIGRlZmF1bHQ6IDUwIH0sXG4gICAgeyBuYW1lOiBcInJvd3M6bnVtYmVyXCIsIGRlZmF1bHQ6IDQgfSxcbiAgICB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRleHRVcGRhdGVNb2RlXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJvbkJsdXJcIiwgXCJvblR5cGluZ1wiXSxcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKFwiXCIpO1xuICB9LFxuICBcInRleHRiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciwgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24gfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQge1xuICBJU3VydmV5SW1wbCxcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXksXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUGFuZWwsXG4gIElFbGVtZW50XG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0UHJvY2Vzc29yIH0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50UXVlc3Rpb25KU09OIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBqc29uOiBhbnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgICAgIG5hbWUsXG4gICAgICBbXSxcbiAgICAgIGZ1bmN0aW9uKGpzb246IGFueSkge1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50Q29sbGVjdGlvbi5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICAgICAhIWpzb24gPyBqc29uLm5hbWUgOiBcIlwiLFxuICAgICAgICAgIHNlbGZcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBcInF1ZXN0aW9uXCJcbiAgICApO1xuICAgIHRoaXMub25Jbml0KCk7XG4gIH1cbiAgcHVibGljIG9uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkluaXQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25Jbml0KCk7XG4gIH1cbiAgcHVibGljIG9uQ3JlYXRlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkNyZWF0ZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25DcmVhdGVkKHF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgb25Mb2FkZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25Mb2FkZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25Mb2FkZWQocXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXIpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25BZnRlclJlbmRlcihxdWVzdGlvbiwgaHRtbEVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGVsZW1lbnQ6IFF1ZXN0aW9uLFxuICAgIGh0bWxFbGVtZW50OiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChxdWVzdGlvbiwgZWxlbWVudCwgaHRtbEVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBvblByb3BlcnR5Q2hhbmdlZChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vblByb3BlcnR5Q2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vblByb3BlcnR5Q2hhbmdlZChxdWVzdGlvbiwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBRdWVzdGlvbiwgbmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25WYWx1ZUNoYW5nZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25WYWx1ZUNoYW5nZWQocXVlc3Rpb24sIG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgb25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChxdWVzdGlvbiwge1xuICAgICAgb2JqOiBpdGVtLFxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5qc29uLmVsZW1lbnRzSlNPTiB8fCAhIXRoaXMuanNvbi5jcmVhdGVFbGVtZW50cztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q29sbGVjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IENvbXBvbmVudENvbGxlY3Rpb24gPSBuZXcgQ29tcG9uZW50Q29sbGVjdGlvbigpO1xuICBwcml2YXRlIGN1c3RvbVF1ZXN0aW9uVmFsdWVzOiBBcnJheTxDb21wb25lbnRRdWVzdGlvbkpTT04+ID0gW107XG4gIHB1YmxpYyBvbkNyZWF0ZUNvbXBvc2l0ZTogKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkpTT046IENvbXBvbmVudFF1ZXN0aW9uSlNPTlxuICApID0+IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWw7XG4gIHB1YmxpYyBvbkNyZWF0ZUN1c3RvbTogKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkpTT046IENvbXBvbmVudFF1ZXN0aW9uSlNPTlxuICApID0+IFF1ZXN0aW9uQ3VzdG9tTW9kZWw7XG4gIHB1YmxpYyBvbkFkZGluZ0pzb246IChuYW1lOiBzdHJpbmcsIGlzQ29tcG9zaXRlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwdWJsaWMgYWRkKGpzb246IGFueSkge1xuICAgIGlmICghanNvbikgcmV0dXJuO1xuICAgIGxldCBuYW1lID0ganNvbi5uYW1lO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgXCJBdHRyaWJ1dGUgbmFtZSBpcyBtaXNzZWRcIjtcbiAgICB9XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoISF0aGlzLmdldEN1c3RvbVF1ZXN0aW9uQnlOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyBcIlRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBjdXN0b20gcXVlc3Rpb24gd2l0aCBuYW1lICdcIiArXG4gICAgICAgIG5hbWUgK1xuICAgICAgICBcIidcIjtcbiAgICB9XG4gICAgaWYgKCEhU2VyaWFsaXplci5maW5kQ2xhc3MobmFtZSkpIHtcbiAgICAgIHRocm93IFwiVGhlcmUgaXMgYWxyZWFkeSBjbGFzcyB3aXRoIG5hbWUgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tUXVlc3Rpb24gPSBuZXcgQ29tcG9uZW50UXVlc3Rpb25KU09OKG5hbWUsIGpzb24pO1xuICAgIGlmICghIXRoaXMub25BZGRpbmdKc29uKVxuICAgICAgdGhpcy5vbkFkZGluZ0pzb24obmFtZSwgY3VzdG9tUXVlc3Rpb24uaXNDb21wb3NpdGUpO1xuICAgIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMucHVzaChjdXN0b21RdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtcygpOiBBcnJheTxDb21wb25lbnRRdWVzdGlvbkpTT04+IHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tUXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogQ29tcG9uZW50UXVlc3Rpb25KU09OIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzW2ldLm5hbWUgPT0gbmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIFNlcmlhbGl6ZXIucmVtb3ZlQ2xhc3ModGhpcy5jdXN0b21RdWVzdGlvblZhbHVlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcyA9IFtdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb24ge1xuICAgIGlmICghIXF1ZXN0aW9uSlNPTi5pc0NvbXBvc2l0ZSlcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbXBvc2l0ZU1vZGVsKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9zaXRlTW9kZWwoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uSlNPTjogQ29tcG9uZW50UXVlc3Rpb25KU09OXG4gICk6IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwge1xuICAgIGlmICghIXRoaXMub25DcmVhdGVDb21wb3NpdGUpXG4gICAgICByZXR1cm4gdGhpcy5vbkNyZWF0ZUNvbXBvc2l0ZShuYW1lLCBxdWVzdGlvbkpTT04pO1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Db21wb3NpdGVNb2RlbChuYW1lLCBxdWVzdGlvbkpTT04pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDdXN0b21Nb2RlbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb25DdXN0b21Nb2RlbCB7XG4gICAgaWYgKCEhdGhpcy5vbkNyZWF0ZUN1c3RvbSkgcmV0dXJuIHRoaXMub25DcmVhdGVDdXN0b20obmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElTdXJ2ZXlJbXBsLCBJU3VydmV5RGF0YSwgSVBhbmVsIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwdWJsaWMgY3VzdG9tUXVlc3Rpb246IENvbXBvbmVudFF1ZXN0aW9uSlNPTikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXModGhpcyk7XG4gICAgU3VydmV5RWxlbWVudC5DcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZVdyYXBwZXIoKTtcbiAgICBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQ3JlYXRlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmN1c3RvbVF1ZXN0aW9uID8gdGhpcy5jdXN0b21RdWVzdGlvbi5uYW1lIDogXCJjdXN0b21cIjtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICBpZiAoISF0aGlzLmdldEVsZW1lbnQoKSkge1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7fVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbiAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIuaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbiAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgaXRlbSxcbiAgICAgICAgaXRlbS5vd25lclByb3BlcnR5TmFtZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmV3VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIHZhciBlbCA9IHRoaXMuZ2V0RWxlbWVudCgpO1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHN1cGVyLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0RWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50O1xuICBwcm90ZWN0ZWQgaW5pdEVsZW1lbnQoZWw6IFN1cnZleUVsZW1lbnQpIHtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBlbC5kaXNhYmxlRGVzaWduQWN0aW9ucyA9IHRydWU7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5pbml0RWxlbWVudCh0aGlzLmdldEVsZW1lbnQoKSk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICBpZiAoISF0aGlzLmdldEVsZW1lbnQoKSkge1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkub25TdXJ2ZXlMb2FkKCk7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uTG9hZGVkKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgLy9EbyBub3RoaW5nXG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGVsOiBhbnkpIHtcbiAgICBzdXBlci5hZnRlclJlbmRlcihlbCk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkFmdGVyUmVuZGVyKHRoaXMsIGVsKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgfVxuICAvL0lTdXJ2ZXlJbXBsXG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgLy8gICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIC8vIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgfVxuICAvL0lTdXJ2ZXlEYXRhXG4gIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnksXG4gICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQ/OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB2YXIgbmV3TmFtZSA9IHRoaXMuY29udmVydERhdGFOYW1lKG5hbWUpO1xuICAgIHRoaXMuZGF0YS5zZXRWYWx1ZShcbiAgICAgIG5ld05hbWUsXG4gICAgICB0aGlzLmNvbnZlcnREYXRhVmFsdWUobmFtZSwgbmV3VmFsdWUpLFxuICAgICAgbG9jTm90aWZpY2F0aW9uLFxuICAgICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWRcbiAgICApO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25WYWx1ZUNoYW5nZWQodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVOYW1lKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhVmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0VmFyaWFibGUobmFtZSkgOiBudWxsO1xuICB9XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm47XG4gICAgdGhpcy5kYXRhLnNldFZhcmlhYmxlKG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldENvbW1lbnQodGhpcy5nZXRWYWx1ZU5hbWUoKSkgOiBcIlwiO1xuICB9XG4gIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nLCBsb2NOb3RpZmljYXRpb246IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpLCBuZXdWYWx1ZSwgbG9jTm90aWZpY2F0aW9uKTtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0QWxsVmFsdWVzKCkgOiB7fTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpIDoge307XG4gIH1cbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpIDoge307XG4gIH1cbiAgLy9JUGFuZWxcbiAgYWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlcikge31cbiAgcmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJsZWZ0XCI7XG4gIH1cbiAgZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRJbmRleCgpO1xuICB9XG4gIGdldENoaWxkcmVuTGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJvd1wiO1xuICB9XG4gIGVsZW1lbnRXaWR0aENoYW5nZWQoZWw6IElFbGVtZW50KSB7fVxuICBnZXQgZWxlbWVudHMoKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaW5kZXhPZihlbDogSUVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBlbnN1cmVSb3dzVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ3VzdG9tTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZSB7XG4gIHByaXZhdGUgcXVlc3Rpb25XcmFwcGVyOiBRdWVzdGlvbjtcbiAgcHVibGljIGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7XG4gICAgdGhpcy5xdWVzdGlvbldyYXBwZXIgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEVsZW1lbnQoKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFF1ZXN0aW9uO1xuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlcyA9IHRoaXMuY29udGVudFF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29udGVudFF1ZXN0aW9uLmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh0aGlzLmNvbnRlbnRRdWVzdGlvbi5lcnJvcnNbaV0pO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmVzID0gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLmZvY3VzKG9uRXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5mb2N1cyhvbkVycm9yKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBjb250ZW50UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uV3JhcHBlcjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHZhciBqc29uID0gdGhpcy5jdXN0b21RdWVzdGlvbi5qc29uO1xuICAgIHZhciByZXMgPSBudWxsO1xuICAgIGlmICghIWpzb24ucXVlc3Rpb25KU09OKSB7XG4gICAgICB2YXIgcVR5cGUgPSBqc29uLnF1ZXN0aW9uSlNPTi50eXBlO1xuICAgICAgaWYgKCFxVHlwZSB8fCAhU2VyaWFsaXplci5maW5kQ2xhc3MocVR5cGUpKVxuICAgICAgICB0aHJvdyBcInR5cGUgYXR0cmlidXRlIGluIHF1ZXN0aW9uSlNPTiBpcyBlbXB0eSBvciBpbmNvcnJlY3RcIjtcbiAgICAgIHJlcyA9IDxRdWVzdGlvbj5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHFUeXBlKTtcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnQocmVzKTtcbiAgICAgIHJlcy5mcm9tSlNPTihqc29uLnF1ZXN0aW9uSlNPTik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIWpzb24uY3JlYXRlUXVlc3Rpb24pIHtcbiAgICAgICAgcmVzID0ganNvbi5jcmVhdGVRdWVzdGlvbigpO1xuICAgICAgICB0aGlzLmluaXRFbGVtZW50KHJlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIXJlcyAmJiAhcmVzLm5hbWUpIHtcbiAgICAgIHJlcy5uYW1lID0gXCJxdWVzdGlvblwiO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRRdWVzdGlvbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSAmJiAhdGhpcy5jb250ZW50UXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb250ZW50UXVlc3Rpb24udmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGF0YU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKSByZXR1cm4gc3VwZXIuY29udmVydERhdGFOYW1lKG5hbWUpO1xuICAgIHZhciBuZXdOYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCksXG4gICAgICB0aGlzLmdldFZhbHVlTmFtZSgpXG4gICAgKTtcbiAgICByZXR1cm4gbmV3TmFtZS5pbmRleE9mKHRoaXMuZ2V0VmFsdWVOYW1lKCkpID09IDBcbiAgICAgID8gbmV3TmFtZVxuICAgICAgOiBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhVmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0RGF0YU5hbWUobmFtZSkgPT0gc3VwZXIuY29udmVydERhdGFOYW1lKG5hbWUpXG4gICAgICA/IHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlXG4gICAgICA6IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmNvbnRlbnRRdWVzdGlvbiAmJlxuICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZSwgbmV3VmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZTtcbiAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWVDb3JlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGluaXRFbGVtZW50KGVsOiBTdXJ2ZXlFbGVtZW50KSB7XG4gICAgc3VwZXIuaW5pdEVsZW1lbnQoZWwpO1xuICAgIGlmICghIWVsKSB7XG4gICAgICAoPFF1ZXN0aW9uPmVsKS5wYXJlbnQgPSB0aGlzO1xuICAgICAgKDxRdWVzdGlvbj5lbCkuYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrID0gKFxuICAgICAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgICAgIGVsZW1lbnQ6IGFueVxuICAgICAgKSA9PiB7XG4gICAgICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzc0NvcmUoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIGNzc0NsYXNzZXMgPSB0aGlzLmNvbnRlbnRRdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIH1cbiAgICBzdXBlci51cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuY29udGVudFF1ZXN0aW9uXG4gICAgICA/IHRoaXMuY29udGVudFF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlBc1RleHQsIHZhbHVlKVxuICAgICAgOiBzdXBlci5nZXREaXNwbGF5VmFsdWVDb3JlKGtleUFzVGV4dCwgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIFF1ZXN0aW9uQ29tcG9zaXRlVGV4dFByb2Nlc3NvciBleHRlbmRzIFF1ZXN0aW9uVGV4dFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb21wb3NpdGU6IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwsXG4gICAgcHJvdGVjdGVkIHZhcmlhYmxlTmFtZTogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHZhcmlhYmxlTmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9zaXRlLnN1cnZleTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZS5jb250ZW50UGFuZWw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgSXRlbVZhcmlhYmxlTmFtZSA9IFwiY29tcG9zaXRlXCI7XG4gIHByaXZhdGUgcGFuZWxXcmFwcGVyOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIHRleHRQcm9jZXNzaW5nOiBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3I7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgcHVibGljIGN1c3RvbVF1ZXN0aW9uOiBDb21wb25lbnRRdWVzdGlvbkpTT04pIHtcbiAgICBzdXBlcihuYW1lLCBjdXN0b21RdWVzdGlvbik7XG4gICAgdGhpcy50ZXh0UHJvY2Vzc2luZyA9IG5ldyBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3IoXG4gICAgICB0aGlzLFxuICAgICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlV3JhcHBlcigpIHtcbiAgICB0aGlzLnBhbmVsV3JhcHBlciA9IHRoaXMuY3JlYXRlUGFuZWwoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb21wb3NpdGVcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbXBvc2l0ZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRQYW5lbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbFdyYXBwZXI7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICBpZiAoIXRoaXMuY29udGVudFBhbmVsKSByZXR1cm4gcmVzO1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRQYW5lbC5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCBmYWxzZSwgcmVjKSB8fCByZXM7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRDc3MocmVOZXc/OiBib29sZWFuKSB7XG4gICAgc3VwZXIudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgaWYgKHRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICB0aGlzLmNvbnRlbnRQYW5lbC51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICB9XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3Npbmc7XG4gIH1cbiAgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmNvbnRlbnRQYW5lbC5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICB9XG4gIH1cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgICByZXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9IFwib2ZmXCI7XG4gICAgcmVzLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdmFyIGpzb24gPSB0aGlzLmN1c3RvbVF1ZXN0aW9uLmpzb247XG4gICAgaWYgKCEhanNvbi5lbGVtZW50c0pTT04pIHtcbiAgICAgIHJlcy5mcm9tSlNPTih7IGVsZW1lbnRzOiBqc29uLmVsZW1lbnRzSlNPTiB9KTtcbiAgICB9XG4gICAgaWYgKCEhanNvbi5jcmVhdGVFbGVtZW50cykge1xuICAgICAganNvbi5jcmVhdGVFbGVtZW50cyhyZXMsIHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmluaXRFbGVtZW50KHJlcyk7XG4gICAgcmVzLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIHRoaXMuc2V0QWZ0ZXJSZW5kZXJDYWxsYmFja3MocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgdGhpcy5jb250ZW50UGFuZWwucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgfVxuICAgIHN1cGVyLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgdGhpcy5jb250ZW50UGFuZWwucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgICB0aGlzLnNldElzQ29udGVudEVsZW1lbnQodGhpcy5jb250ZW50UGFuZWwpO1xuICAgIH1cbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgfVxuICBwcml2YXRlIHNldElzQ29udGVudEVsZW1lbnQocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICBwYW5lbC5pc0NvbnRlbnRFbGVtZW50ID0gdHJ1ZTtcbiAgICB2YXIgZWxlbWVudHMgPSBwYW5lbC5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgIHRoaXMuc2V0SXNDb250ZW50RWxlbWVudCg8UGFuZWxNb2RlbD5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoPFF1ZXN0aW9uPmVsKS5pc0NvbnRlbnRFbGVtZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLnNldFZpc2libGVJbmRleCh2YWwpO1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiAhIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICByZXMgKz0gdGhpcy5jb250ZW50UGFuZWwuc2V0VmlzaWJsZUluZGV4KHZhbCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICghIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICB2YXIgb2xkQ29tcG9zaXRlID0gdmFsdWVzW1F1ZXN0aW9uQ29tcG9zaXRlTW9kZWwuSXRlbVZhcmlhYmxlTmFtZV07XG4gICAgICB2YWx1ZXNbXG4gICAgICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwuSXRlbVZhcmlhYmxlTmFtZVxuICAgICAgXSA9IHRoaXMuY29udGVudFBhbmVsLmdldFZhbHVlKCk7XG4gICAgICB0aGlzLmNvbnRlbnRQYW5lbC5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXTtcbiAgICAgIGlmICghIW9sZENvbXBvc2l0ZSkge1xuICAgICAgICB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXSA9IG9sZENvbXBvc2l0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICByZXR1cm4gISF2YWwgPyB2YWxbbmFtZV0gOiBudWxsO1xuICB9XG4gIHByaXZhdGUgc2V0dGluZ05ld1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIGxvY05vdGlmaWNhdGlvbjogYW55LFxuICAgIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkPzogYm9vbGVhblxuICApOiBhbnkge1xuICAgIGlmICh0aGlzLnNldHRpbmdOZXdWYWx1ZSkgcmV0dXJuO1xuICAgIHN1cGVyLnNldFZhbHVlKG5hbWUsIG5ld1ZhbHVlLCBsb2NOb3RpZmljYXRpb24sIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAoIXRoaXMuY29udGVudFBhbmVsKSByZXR1cm47XG4gICAgdmFyIHEgPSB0aGlzLmNvbnRlbnRQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAoISFxICYmICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IHRydWU7XG4gICAgICBxLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRQYW5lbCkgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmNvbnRlbnRQYW5lbC5xdWVzdGlvbnM7XG4gICAgdmFyIHByZWZpeE5hbWUgPSB0aGlzLm5hbWU7XG4gICAgdmFyIHByZWZpeFRleHQgPSB0aGlzLnRpdGxlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICBuYW1lOiBwcmVmaXhOYW1lICsgXCIuXCIgKyBxdWVzdGlvbnNbaV0ubmFtZSxcbiAgICAgICAgdGV4dDogcHJlZml4VGV4dCArIFwiLlwiICsgcXVlc3Rpb25zW2ldLnRpdGxlLFxuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb25zW2ldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGF0YVZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkgJiYgIXRoaXMuaXNFZGl0aW5nU3VydmV5RWxlbWVudCkge1xuICAgICAgZGVsZXRlIHZhbFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsW25hbWVdID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IHRydWU7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHF1ZXN0aW9uc1tpXS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgIHF1ZXN0aW9uc1tpXS52YWx1ZSA9ICEhbmV3VmFsdWUgPyBuZXdWYWx1ZVtrZXldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnNldHRpbmdOZXdWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleUFzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb250ZW50UGFuZWxcbiAgICAgID8gdGhpcy5jb250ZW50UGFuZWwuZ2V0RGlzcGxheVZhbHVlKGtleUFzVGV4dClcbiAgICAgIDogc3VwZXIuZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQsIHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHNldEFmdGVyUmVuZGVyQ2FsbGJhY2tzKHBhbmVsOiBQYW5lbE1vZGVsKSB7XG4gICAgaWYgKCFwYW5lbCB8fCAhdGhpcy5jdXN0b21RdWVzdGlvbikgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnMgPSBwYW5lbC5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sgPSAoXG4gICAgICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICAgICAgZWxlbWVudDogYW55XG4gICAgICApID0+IHtcbiAgICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICBlbGVtZW50XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBkcm9wZG93biBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25TZWxlY3RCYXNlIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJjaG9pY2VzTWluXCIsIFwiY2hvaWNlc01heFwiLCBcImNob2ljZXNTdGVwXCJdLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciB0byBzaG93IG9wdGlvbnMgY2FwdGlvbiBpdGVtICgnQ2hvb3NlLi4uJykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dPcHRpb25zQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd09wdGlvbnNDYXB0aW9uXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd09wdGlvbnNDYXB0aW9uKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dPcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIG9wdGlvbnMgY2FwdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSBsb2NhbGl6YXRpb24gc3RyaW5ncy5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvcHRpb25zQ2FwdGlvblwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImRyb3Bkb3duXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy52aXNpYmxlQ2hvaWNlcywgdGhpcy52YWx1ZSk7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBtaW5NYXhDaG9pY2VzID0gPEFycmF5PEl0ZW1WYWx1ZT4+W107XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBpdGVtcyA9IHN1cGVyLmdldENob2ljZXMoKTtcbiAgICBpZiAodGhpcy5jaG9pY2VzTWF4IDw9IHRoaXMuY2hvaWNlc01pbikgcmV0dXJuIGl0ZW1zO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChpdGVtc1tpXSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggIT09XG4gICAgICAgICh0aGlzLmNob2ljZXNNYXggLSB0aGlzLmNob2ljZXNNaW4pIC8gdGhpcy5jaG9pY2VzU3RlcCArIDFcbiAgICApIHtcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcyA9IFtdO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSB0aGlzLmNob2ljZXNNaW47XG4gICAgICAgIGkgPD0gdGhpcy5jaG9pY2VzTWF4O1xuICAgICAgICBpICs9IHRoaXMuY2hvaWNlc1N0ZXBcbiAgICAgICkge1xuICAgICAgICB0aGlzLm1pbk1heENob2ljZXMucHVzaChuZXcgSXRlbVZhbHVlKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLm1pbk1heENob2ljZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGFuZCBjaG9pY2VzTWF4IHByb3BlcnR5IHRvIGF1dG9tYXRpY2FsbHkgYWRkIGNob2ljZXMuIEZvciBleGFtcGxlIGNob2ljZXNNaW4gPSAxIGFuZCBjaG9pY2VzTWF4ID0gMTAgd2lsbCBnZW5lcmF0ZSB0ZW4gYWRkaXRpb25hbCBjaG9pY2VzIGZyb20gMSB0byAxMC5cbiAgICogQHNlZSBjaG9pY2VzTWF4XG4gICAqIEBzZWUgY2hvaWNlc1N0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc01pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzTWluXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc01pbih2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgYW5kIGNob2ljZXNNYXggcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGQgY2hvaWNlcy4gRm9yIGV4YW1wbGUgY2hvaWNlc01pbiA9IDEgYW5kIGNob2ljZXNNYXggPSAxMCB3aWxsIGdlbmVyYXRlIHRlbiBhZGRpdGlvbmFsIGNob2ljZXMgZnJvbSAxIHRvIDEwLlxuICAgKiBAc2VlIGNob2ljZXNNaW5cbiAgICogQHNlZSBjaG9pY2VzU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzTWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNYXhcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzTWF4KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01heFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiBJdCB0ZWxscyB0aGUgdmFsdWUgb2YgdGhlIGl0ZXJhdG9yIGJldHdlZW4gY2hvaWNlc01pbiBhbmQgY2hvaWNlc01heCBwcm9wZXJ0aWVzLlxuICAgKiBJZiBjaG9pY2VzTWluID0gMTAsIGNob2ljZXNNYXggPSAzMCBhbmQgY2hvaWNlc1N0ZXAgPSAxMCB0aGVuIHlvdSB3aWxsIGhhdmUgb25seSB0aHJlZSBhZGRpdGlvbmFsIGNob2ljZXM6IFsxMCwgMjAsIDMwXS5cbiAgICogQHNlZSBjaG9pY2VzTWluXG4gICAqIEBzZWUgY2hvaWNlc01heFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzU3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzU3RlcFwiLCAxKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNTdGVwKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDEpIHZhbCA9IDE7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1N0ZXBcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogRHJvcGRvd24gYXV0byBjb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBhdXRvQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXV0b0NvbXBsZXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldENvbnRyb2xDbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLmNzc0NsYXNzZXM7XG4gICAgbGV0IHJlc3VsdCA9XG4gICAgICBjc3NDbGFzc2VzLmNvbnRyb2wgK1xuICAgICAgKHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgPyBcIiBcIiArIGNzc0NsYXNzZXMub25FcnJvciA6IFwiXCIpO1xuICAgIGlmICh0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIGNzc0NsYXNzZXMuY29udHJvbERpc2FibGVkO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImRyb3Bkb3duXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY09wdGlvbnNDYXB0aW9uXCIgfSxcbiAgICB7IG5hbWU6IFwic2hvd09wdGlvbnNDYXB0aW9uOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzTWluOm51bWJlclwiLCBkZWZhdWx0OiAwIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNNYXg6bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcbiAgICB7IG5hbWU6IFwiY2hvaWNlc1N0ZXA6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIG1pblZhbHVlOiAxIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJhdXRvQ29tcGxldGVcIixcbiAgICAgIGRhdGFMaXN0OiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImhvbm9yaWZpYy1wcmVmaXhcIixcbiAgICAgICAgXCJnaXZlbi1uYW1lXCIsXG4gICAgICAgIFwiYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgIFwiZmFtaWx5LW5hbWVcIixcbiAgICAgICAgXCJob25vcmlmaWMtc3VmZml4XCIsXG4gICAgICAgIFwibmlja25hbWVcIixcbiAgICAgICAgXCJvcmdhbml6YXRpb24tdGl0bGVcIixcbiAgICAgICAgXCJ1c2VybmFtZVwiLFxuICAgICAgICBcIm5ldy1wYXNzd29yZFwiLFxuICAgICAgICBcImN1cnJlbnQtcGFzc3dvcmRcIixcbiAgICAgICAgXCJvcmdhbml6YXRpb25cIixcbiAgICAgICAgXCJzdHJlZXQtYWRkcmVzc1wiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTFcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUyXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lM1wiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWw0XCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDNcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsMlwiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwxXCIsXG4gICAgICAgIFwiY291bnRyeVwiLFxuICAgICAgICBcImNvdW50cnktbmFtZVwiLFxuICAgICAgICBcInBvc3RhbC1jb2RlXCIsXG4gICAgICAgIFwiY2MtbmFtZVwiLFxuICAgICAgICBcImNjLWdpdmVuLW5hbWVcIixcbiAgICAgICAgXCJjYy1hZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgICAgXCJjYy1mYW1pbHktbmFtZVwiLFxuICAgICAgICBcImNjLW51bWJlclwiLFxuICAgICAgICBcImNjLWV4cFwiLFxuICAgICAgICBcImNjLWV4cC1tb250aFwiLFxuICAgICAgICBcImNjLWV4cC15ZWFyXCIsXG4gICAgICAgIFwiY2MtY3NjXCIsXG4gICAgICAgIFwiY2MtdHlwZVwiLFxuICAgICAgICBcInRyYW5zYWN0aW9uLWN1cnJlbmN5XCIsXG4gICAgICAgIFwidHJhbnNhY3Rpb24tYW1vdW50XCIsXG4gICAgICAgIFwibGFuZ3VhZ2VcIixcbiAgICAgICAgXCJiZGF5XCIsXG4gICAgICAgIFwiYmRheS1kYXlcIixcbiAgICAgICAgXCJiZGF5LW1vbnRoXCIsXG4gICAgICAgIFwiYmRheS15ZWFyXCIsXG4gICAgICAgIFwic2V4XCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwicGhvdG9cIixcbiAgICAgICAgXCJ0ZWxcIixcbiAgICAgICAgXCJ0ZWwtY291bnRyeS1jb2RlXCIsXG4gICAgICAgIFwidGVsLW5hdGlvbmFsXCIsXG4gICAgICAgIFwidGVsLWFyZWEtY29kZVwiLFxuICAgICAgICBcInRlbC1sb2NhbFwiLFxuICAgICAgICBcInRlbC1sb2NhbC1wcmVmaXhcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWwtc3VmZml4XCIsXG4gICAgICAgIFwidGVsLWV4dGVuc2lvblwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwiaW1wcFwiLFxuICAgICAgXSxcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJzZWxlY3RiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImRyb3Bkb3duXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhbiBxdWVzdGlvbiB0aGF0IHJlbmRlcnMgZW1wdHkgXCJkaXZcIiB0YWcuIEl0IHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciBzb21lIGN1c3RvbSB3aWRnZXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVtcHR5TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZW1wdHlcIjtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImVtcHR5XCIsXG4gIFtdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkVtcHR5TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGV4cHJlc3Npb24gcXVlc3Rpb24uIEl0IGlzIGEgcmVhZC1vbmx5IHF1ZXN0aW9uLiBJdCBjYWxjdWxhdGVzIHZhbHVlIGJhc2VkIG9uIGVweHJlc3Npb24gcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgcHJpdmF0ZSBleHByZXNzaW9uSXNSdW5uaW5nOiBib29sZWFuO1xuICBwcml2YXRlIGV4cHJlc3Npb25SdW5uZXI6IEV4cHJlc3Npb25SdW5uZXI7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJmb3JtYXRcIiwgdGhpcyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJleHByZXNzaW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuZXhwcmVzc2lvblJ1bm5lcikge1xuICAgICAgICBzZWxmLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcihzZWxmLmV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhwcmVzc2lvblwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBkaXNwbGF5IHRoZSB2YWx1ZSBpbiB5b3VyIG93biBmb3JtYXQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBcInswfVwiIHN1YnN0cmluZyBpbiB5b3VyIHN0cmluZywgdG8gZGlzcGxheSB0aGUgYWN0dWFsIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGdldCBmb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJmb3JtYXRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBmb3JtYXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImZvcm1hdFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NGb3JtYXQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZm9ybWF0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgRXhwcmVzc2lvbiB0aGF0IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBxdWVzdGlvbiB2YWx1ZS4gWW91IG1heSB1c2Ugc3RhbmRhcmQgb3BlcmF0b3JzIGxpa2UgKywgLSwgKiBhbmQgLywgc3F1YXJlcyAoKS4gSGVyZSBpcyB0aGUgZXhhbXBsZSBvZiBhY2Nlc3NpbmcgdGhlIHF1ZXN0aW9uIHZhbHVlIHtxdWVzdGlvbm5hbWV9LlxuICAgKiA8YnIvPkV4YW1wbGU6IFwiKHtxdWFudGl0eX0gKiB7cHJpY2V9KSAqICgxMDAgLSB7ZGlzY291bnR9KSAvIDEwMFwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGxvY0NhbGN1bGF0aW9uKCkge1xuICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IHRydWU7XG4gIH1cbiAgcHVibGljIHVubG9jQ2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmV4cHJlc3Npb24gfHxcbiAgICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyB8fFxuICAgICAgKCF0aGlzLnJ1bklmUmVhZE9ubHkgJiYgdGhpcy5pc1JlYWRPbmx5KVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmV4cHJlc3Npb25SdW5uZXIpIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgdGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byB1c2UgaWYgZGlzcGxheVN0eWxlIGlzIG5vdCBcIm5vbmVcIi4gUG9zc2libGUgdmFsdWVzIGFyZSBmcm9tIDAgdG8gMjAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIC0xIGFuZCBpdCBtZWFucyB0aGF0IHRoaXMgcHJvcGVydHkgaXMgbm90IHVzZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heGltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwgLTEpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4aW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDIwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdG8gdXNlIGlmIGRpc3BsYXlTdHlsZSBpcyBub3QgXCJub25lXCIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZnJvbSAwIHRvIDIwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAtMSBhbmQgaXQgbWVhbnMgdGhhdCB0aGlzIHByb3BlcnR5IGlzIG5vdCB1c2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbmltdW1GcmFjdGlvbkRpZ2l0cyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgcnVuSWZSZWFkT25seVZhbHVlOiBib29sZWFuO1xuICBwdWJsaWMgZ2V0IHJ1bklmUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucnVuSWZSZWFkT25seVZhbHVlID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgcnVuSWZSZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJ1bklmUmVhZE9ubHlWYWx1ZSA9IHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpID8gdGhpcy5kZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgIHZhciBzdHIgPSB0aGlzLmdldFZhbHVlQXNTdHIodmFsKTtcbiAgICAgIHJlcyA9ICF0aGlzLmZvcm1hdCA/IHN0ciA6ICg8YW55PnRoaXMuZm9ybWF0KVtcImZvcm1hdFwiXShzdHIpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgcmVzID0gdGhpcy5zdXJ2ZXkuZ2V0RXhwcmVzc2lvbkRpc3BsYXlWYWx1ZSh0aGlzLCB2YWwsIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFlvdSBtYXkgc2V0IHRoaXMgcHJvcGVydHkgdG8gXCJkZWNpbWFsXCIsIFwiY3VycmVuY3lcIiwgXCJwZXJjZW50XCIgb3IgXCJkYXRlXCIuIElmIHlvdSBzZXQgaXQgdG8gXCJjdXJyZW5jeVwiLCB5b3UgbWF5IHVzZSB0aGUgY3VycmVuY3kgcHJvcGVydHkgdG8gZGlzcGxheSB0aGUgdmFsdWUgaW4gY3VycmVuY3kgZGlmZmVyZW50IGZyb20gVVNELlxuICAgKiBAc2VlIGN1cnJlbmN5XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRpc3BsYXlTdHlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5U3R5bGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkaXNwbGF5U3R5bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5U3R5bGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGRpc3BsYXkgdGhlIHZhbHVlIGluIHRoZSBjdXJyZW5jeSBkaWZmZXJlbiBmcm9tIFVTRC4gVGhlIGRpc3BsYXlTdHlwZSBzaG91bGQgYmUgc2V0IHRvIFwiY3VycmVuY3lcIi5cbiAgICogQHNlZSBkaXNwbGF5U3R5bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVuY3lcIik7XG4gIH1cbiAgcHVibGljIHNldCBjdXJyZW5jeSh2YWw6IHN0cmluZykge1xuICAgIGlmIChnZXRDdXJyZWN5Q29kZXMoKS5pbmRleE9mKHZhbCkgPCAwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVuY3lcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogXHREZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSBncm91cGluZyBzZXBhcmF0b3JzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgcHVibGljIGdldCB1c2VHcm91cGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXNlR3JvdXBpbmdcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB1c2VHcm91cGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ1c2VHcm91cGluZ1wiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUFzU3RyKHZhbDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5U3R5bGUgPT0gXCJkYXRlXCIpIHtcbiAgICAgIHZhciBkID0gbmV3IERhdGUodmFsKTtcbiAgICAgIGlmICghIWQgJiYgISFkLnRvTG9jYWxlRGF0ZVN0cmluZykgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc3BsYXlTdHlsZSAhPSBcIm5vbmVcIiAmJiBIZWxwZXJzLmlzTnVtYmVyKHZhbCkpIHtcbiAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmdldExvY2FsZSgpO1xuICAgICAgaWYgKCFsb2NhbGUpIGxvY2FsZSA9IFwiZW5cIjtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdHlsZTogdGhpcy5kaXNwbGF5U3R5bGUsXG4gICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LFxuICAgICAgICB1c2VHcm91cGluZzogdGhpcy51c2VHcm91cGluZyxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPiAtMSkge1xuICAgICAgICAoPGFueT5vcHRpb25zKVtcIm1heGltdW1GcmFjdGlvbkRpZ2l0c1wiXSA9IHRoaXMubWF4aW11bUZyYWN0aW9uRGlnaXRzO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWluaW11bUZyYWN0aW9uRGlnaXRzID4gLTEpIHtcbiAgICAgICAgKDxhbnk+b3B0aW9ucylbXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIl0gPSB0aGlzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cztcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWwudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbC50b1N0cmluZygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZWN5Q29kZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gIHJldHVybiBbXG4gICAgXCJBRURcIixcbiAgICBcIkFGTlwiLFxuICAgIFwiQUxMXCIsXG4gICAgXCJBTURcIixcbiAgICBcIkFOR1wiLFxuICAgIFwiQU9BXCIsXG4gICAgXCJBUlNcIixcbiAgICBcIkFVRFwiLFxuICAgIFwiQVdHXCIsXG4gICAgXCJBWk5cIixcbiAgICBcIkJBTVwiLFxuICAgIFwiQkJEXCIsXG4gICAgXCJCRFRcIixcbiAgICBcIkJHTlwiLFxuICAgIFwiQkhEXCIsXG4gICAgXCJCSUZcIixcbiAgICBcIkJNRFwiLFxuICAgIFwiQk5EXCIsXG4gICAgXCJCT0JcIixcbiAgICBcIkJPVlwiLFxuICAgIFwiQlJMXCIsXG4gICAgXCJCU0RcIixcbiAgICBcIkJUTlwiLFxuICAgIFwiQldQXCIsXG4gICAgXCJCWU5cIixcbiAgICBcIkJaRFwiLFxuICAgIFwiQ0FEXCIsXG4gICAgXCJDREZcIixcbiAgICBcIkNIRVwiLFxuICAgIFwiQ0hGXCIsXG4gICAgXCJDSFdcIixcbiAgICBcIkNMRlwiLFxuICAgIFwiQ0xQXCIsXG4gICAgXCJDTllcIixcbiAgICBcIkNPUFwiLFxuICAgIFwiQ09VXCIsXG4gICAgXCJDUkNcIixcbiAgICBcIkNVQ1wiLFxuICAgIFwiQ1VQXCIsXG4gICAgXCJDVkVcIixcbiAgICBcIkNaS1wiLFxuICAgIFwiREpGXCIsXG4gICAgXCJES0tcIixcbiAgICBcIkRPUFwiLFxuICAgIFwiRFpEXCIsXG4gICAgXCJFR1BcIixcbiAgICBcIkVSTlwiLFxuICAgIFwiRVRCXCIsXG4gICAgXCJFVVJcIixcbiAgICBcIkZKRFwiLFxuICAgIFwiRktQXCIsXG4gICAgXCJHQlBcIixcbiAgICBcIkdFTFwiLFxuICAgIFwiR0hTXCIsXG4gICAgXCJHSVBcIixcbiAgICBcIkdNRFwiLFxuICAgIFwiR05GXCIsXG4gICAgXCJHVFFcIixcbiAgICBcIkdZRFwiLFxuICAgIFwiSEtEXCIsXG4gICAgXCJITkxcIixcbiAgICBcIkhSS1wiLFxuICAgIFwiSFRHXCIsXG4gICAgXCJIVUZcIixcbiAgICBcIklEUlwiLFxuICAgIFwiSUxTXCIsXG4gICAgXCJJTlJcIixcbiAgICBcIklRRFwiLFxuICAgIFwiSVJSXCIsXG4gICAgXCJJU0tcIixcbiAgICBcIkpNRFwiLFxuICAgIFwiSk9EXCIsXG4gICAgXCJKUFlcIixcbiAgICBcIktFU1wiLFxuICAgIFwiS0dTXCIsXG4gICAgXCJLSFJcIixcbiAgICBcIktNRlwiLFxuICAgIFwiS1BXXCIsXG4gICAgXCJLUldcIixcbiAgICBcIktXRFwiLFxuICAgIFwiS1lEXCIsXG4gICAgXCJLWlRcIixcbiAgICBcIkxBS1wiLFxuICAgIFwiTEJQXCIsXG4gICAgXCJMS1JcIixcbiAgICBcIkxSRFwiLFxuICAgIFwiTFNMXCIsXG4gICAgXCJMWURcIixcbiAgICBcIk1BRFwiLFxuICAgIFwiTURMXCIsXG4gICAgXCJNR0FcIixcbiAgICBcIk1LRFwiLFxuICAgIFwiTU1LXCIsXG4gICAgXCJNTlRcIixcbiAgICBcIk1PUFwiLFxuICAgIFwiTVJPXCIsXG4gICAgXCJNVVJcIixcbiAgICBcIk1WUlwiLFxuICAgIFwiTVdLXCIsXG4gICAgXCJNWE5cIixcbiAgICBcIk1YVlwiLFxuICAgIFwiTVlSXCIsXG4gICAgXCJNWk5cIixcbiAgICBcIk5BRFwiLFxuICAgIFwiTkdOXCIsXG4gICAgXCJOSU9cIixcbiAgICBcIk5PS1wiLFxuICAgIFwiTlBSXCIsXG4gICAgXCJOWkRcIixcbiAgICBcIk9NUlwiLFxuICAgIFwiUEFCXCIsXG4gICAgXCJQRU5cIixcbiAgICBcIlBHS1wiLFxuICAgIFwiUEhQXCIsXG4gICAgXCJQS1JcIixcbiAgICBcIlBMTlwiLFxuICAgIFwiUFlHXCIsXG4gICAgXCJRQVJcIixcbiAgICBcIlJPTlwiLFxuICAgIFwiUlNEXCIsXG4gICAgXCJSVUJcIixcbiAgICBcIlJXRlwiLFxuICAgIFwiU0FSXCIsXG4gICAgXCJTQkRcIixcbiAgICBcIlNDUlwiLFxuICAgIFwiU0RHXCIsXG4gICAgXCJTRUtcIixcbiAgICBcIlNHRFwiLFxuICAgIFwiU0hQXCIsXG4gICAgXCJTTExcIixcbiAgICBcIlNPU1wiLFxuICAgIFwiU1JEXCIsXG4gICAgXCJTU1BcIixcbiAgICBcIlNURFwiLFxuICAgIFwiU1ZDXCIsXG4gICAgXCJTWVBcIixcbiAgICBcIlNaTFwiLFxuICAgIFwiVEhCXCIsXG4gICAgXCJUSlNcIixcbiAgICBcIlRNVFwiLFxuICAgIFwiVE5EXCIsXG4gICAgXCJUT1BcIixcbiAgICBcIlRSWVwiLFxuICAgIFwiVFREXCIsXG4gICAgXCJUV0RcIixcbiAgICBcIlRaU1wiLFxuICAgIFwiVUFIXCIsXG4gICAgXCJVR1hcIixcbiAgICBcIlVTRFwiLFxuICAgIFwiVVNOXCIsXG4gICAgXCJVWUlcIixcbiAgICBcIlVZVVwiLFxuICAgIFwiVVpTXCIsXG4gICAgXCJWRUZcIixcbiAgICBcIlZORFwiLFxuICAgIFwiVlVWXCIsXG4gICAgXCJXU1RcIixcbiAgICBcIlhBRlwiLFxuICAgIFwiWEFHXCIsXG4gICAgXCJYQVVcIixcbiAgICBcIlhCQVwiLFxuICAgIFwiWEJCXCIsXG4gICAgXCJYQkNcIixcbiAgICBcIlhCRFwiLFxuICAgIFwiWENEXCIsXG4gICAgXCJYRFJcIixcbiAgICBcIlhPRlwiLFxuICAgIFwiWFBEXCIsXG4gICAgXCJYUEZcIixcbiAgICBcIlhQVFwiLFxuICAgIFwiWFNVXCIsXG4gICAgXCJYVFNcIixcbiAgICBcIlhVQVwiLFxuICAgIFwiWFhYXCIsXG4gICAgXCJZRVJcIixcbiAgICBcIlpBUlwiLFxuICAgIFwiWk1XXCIsXG4gICAgXCJaV0xcIixcbiAgXTtcbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJleHByZXNzaW9uXCIsXG4gIFtcbiAgICBcImV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIHsgbmFtZTogXCJmb3JtYXRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Zvcm1hdFwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkaXNwbGF5U3R5bGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImRlY2ltYWxcIiwgXCJjdXJyZW5jeVwiLCBcInBlcmNlbnRcIiwgXCJkYXRlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjdXJyZW5jeVwiLFxuICAgICAgY2hvaWNlczogKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVjeUNvZGVzKCk7XG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogXCJVU0RcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcIm1pbmltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwidXNlR3JvdXBpbmc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImlzUmVxdWlyZWRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVhZE9ubHlcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZXF1aXJlZElmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZXhwcmVzc2lvblwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBVcGxvYWRpbmdGaWxlRXJyb3IsIEV4Y2VlZFNpemVFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgZmlsZSBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GaWxlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByaXZhdGUgaXNVcGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBxdWVzdGlvbiBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHF1ZXN0aW9uIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnN0YXRlIG5ldyBxdWVzdGlvbiBzdGF0ZSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvblN0YXRlQ2hhbmdlZDogRXZlbnRCYXNlPFF1ZXN0aW9uRmlsZU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgUXVlc3Rpb25GaWxlTW9kZWxcbiAgPigpO1xuICBwdWJsaWMgcHJldmlld1ZhbHVlOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgY3VycmVudFN0YXRlID0gXCJlbXB0eVwiO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZpbGVcIjtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKHRoaXMsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgbnVsbCwgKCkgPT4ge30pO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyB0aGUgcHJldmlldyBmb3IgdGhlIGltYWdlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJldmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UHJldmlldyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gYWxsb3cgc2VsZWN0IG11bHRpcGxlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd011bHRpcGxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd011bHRpcGxlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93TXVsdGlwbGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dNdWx0aXBsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgaGVpZ2h0LlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUhlaWdodFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlSGVpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIHdpZHRoLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZVdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZVdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBY2NlcHRlZCBmaWxlIHR5cGVzLiBQYXNzZWQgdG8gdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBvZiB0aGUgZmlsZSBpbnB1dCB0YWcuIFNlZSBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvYXR0X2lucHV0X2FjY2VwdC5hc3AgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWNjZXB0ZWRUeXBlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhY2NlcHRlZFR5cGVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWNjZXB0ZWRUeXBlcyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFjY2VwdGVkVHlwZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzZXJpYWxpemUgZmlsZSBjb250ZW50IGFzIHRleHQgaW4gdGhlIHN1cnZleS5kYXRhLlxuICAgKiBJbiB0aGlzIGNhc2UsIHlvdSBoYXZlIHRvIHdyaXRlIHRoZSBjb2RlIG9uVXBsb2FkRmlsZXMgZXZlbnQgdG8gc3RvcmUgdGhlIGZpbGUgY29udGVudC5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5vblVwbG9hZEZpbGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0b3JlRGF0YUFzVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVEYXRhQXNUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RvcmVEYXRhQXNUZXh0KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlRGF0YUFzVGV4dFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byB3YWl0IHVudGlsIGZpbGVzIHdpbGwgYmUgdXBsb2FkZWQgdG8geW91ciBzZXJ2ZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdhaXRGb3JVcGxvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndhaXRGb3JVcGxvYWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgd2FpdEZvclVwbG9hZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3YWl0Rm9yVXBsb2FkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGltYWdlcyBwcmV2aWV3LlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0ltYWdlc1ByZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93SW1hZ2VzUHJldmlld1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93SW1hZ2VzUHJldmlldyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0ltYWdlc1ByZXZpZXdcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0dXAgdGhlIG1heGltdW0gYWxsb3dlZCBmaWxlIHNpemUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2l6ZVwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFNpemUodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhTaXplXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldHVwIGNvbmZpcm1hdGlvbiB0byByZW1vdmUgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmVlZENvbmZpcm1SZW1vdmVGaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuZWVkQ29uZmlybVJlbW92ZUZpbGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBuZWVkQ29uZmlybVJlbW92ZUZpbGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmVlZENvbmZpcm1SZW1vdmVGaWxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW1vdmUgZmlsZSBjb25maXJtYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBnZXRDb25maXJtUmVtb3ZlTWVzc2FnZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiY29uZmlybVJlbW92ZUZpbGVcIilcbiAgICAgIFtcImZvcm1hdFwiXShmaWxlTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW1vdmUgYWxsIGZpbGVzIGNvbmZpcm1hdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgZ2V0IGNvbmZpcm1SZW1vdmVBbGxNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjb25maXJtUmVtb3ZlQWxsRmlsZXNcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBubyBmaWxlIGNob3NlbiBjYXB0aW9uIGZvciBtb2Rlcm4gdGhlbWUuXG4gICAqL1xuICBnZXQgbm9GaWxlQ2hvc2VuQ2FwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibm9GaWxlQ2hvc2VuXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY2hvb3NlIGZpbGVzIGJ1dHRvbiBjYXB0aW9uIGZvciBtb2Rlcm4gdGhlbWUuXG4gICAqL1xuICBnZXQgY2hvb3NlQnV0dG9uQ2FwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvb3NlRmlsZUNhcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjbGVhbiBmaWxlcyBidXR0b24gY2FwdGlvbi5cbiAgICovXG4gIGdldCBjbGVhbkJ1dHRvbkNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFuQ2FwdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlbW92ZSBmaWxlIGJ1dHRvbiBjYXB0aW9uLlxuICAgKi9cbiAgZ2V0IHJlbW92ZUZpbGVDYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVGaWxlQ2FwdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGlucHV0IHRpdGxlIHZhbHVlLlxuICAgKi9cbiAgZ2V0IGlucHV0VGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc1VwbG9hZGluZykgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJsb2FkaW5nRmlsZVwiKTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvb3NlRmlsZVwiKTtcbiAgICByZXR1cm4gXCIgXCI7XG4gIH1cbiAgLyoqXG4gICAqIENsZWFyIHZhbHVlIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoZG9uZUNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgIHRoaXMudmFsdWUsXG4gICAgICBudWxsLFxuICAgICAgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAhIWRvbmVDYWxsYmFjayAmJiBkb25lQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBmaWxlIGl0ZW0gcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlKGNvbnRlbnQ6IHsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuY2xlYXJGaWxlcyhcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlLFxuICAgICAgY29udGVudC5uYW1lLFxuICAgICAgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2xkVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gb2xkVmFsdWUuZmlsdGVyKChmKSA9PiBmLm5hbWUgIT09IGNvbnRlbnQubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogTG9hZCBtdWx0aXBsZSBmaWxlcyBwcm9ncmFtbWF0aWNhbGx5LlxuICAgKiBAcGFyYW0gZmlsZXNcbiAgICovXG4gIHB1YmxpYyBsb2FkRmlsZXMoZmlsZXM6IEZpbGVbXSkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBpZiAoIXRoaXMuYWxsRmlsZXNPayhmaWxlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlQ2hhbmdlZChcImxvYWRpbmdcIik7XG5cbiAgICB2YXIgbG9hZEZpbGVzUHJvYyA9ICgpID0+IHtcbiAgICAgIHZhciBjb250ZW50ID0gPEFycmF5PGFueT4+W107XG4gICAgICBpZiAodGhpcy5zdG9yZURhdGFBc1RleHQpIHtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5jb25jYXQoW1xuICAgICAgICAgICAgICB7IG5hbWU6IGZpbGUubmFtZSwgdHlwZTogZmlsZS50eXBlLCBjb250ZW50OiBmaWxlUmVhZGVyLnJlc3VsdCB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPT09IGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gKHRoaXMudmFsdWUgfHwgW10pLmNvbmNhdChjb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICB0aGlzLnN1cnZleS51cGxvYWRGaWxlcyh0aGlzLCB0aGlzLm5hbWUsIGZpbGVzLCAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSB8fCBbXSkuY29uY2F0KFxuICAgICAgICAgICAgICAgIGRhdGEubWFwKChyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHIuZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiByLmZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogci5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlKSB7XG4gICAgICBsb2FkRmlsZXNQcm9jKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXIobG9hZEZpbGVzUHJvYyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjYW5QcmV2aWV3SW1hZ2UoZmlsZUl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93SW1hZ2VzUHJldmlldyAmJiAhIWZpbGVJdGVtICYmIHRoaXMuaXNGaWxlSW1hZ2UoZmlsZUl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5wcmV2aWV3VmFsdWUgPSBbXTtcbiAgICB2YXIgc3RhdGUgPVxuICAgICAgKCFBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiAhIW5ld1ZhbHVlKSB8fFxuICAgICAgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDApXG4gICAgICAgID8gdGhpcy5zaG93UHJldmlld1xuICAgICAgICAgID8gXCJsb2FkaW5nXCJcbiAgICAgICAgICA6IFwibG9hZGVkXCJcbiAgICAgICAgOiBcImVtcHR5XCI7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQoc3RhdGUpO1xuICAgIGlmICghdGhpcy5zaG93UHJldmlldyB8fCAhbmV3VmFsdWUpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWVzID0gQXJyYXkuaXNBcnJheShuZXdWYWx1ZSlcbiAgICAgID8gbmV3VmFsdWVcbiAgICAgIDogISFuZXdWYWx1ZVxuICAgICAgPyBbbmV3VmFsdWVdXG4gICAgICA6IFtdO1xuXG4gICAgaWYgKHRoaXMuc3RvcmVEYXRhQXNUZXh0KSB7XG4gICAgICBuZXdWYWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSB2YWx1ZS5jb250ZW50IHx8IHZhbHVlO1xuICAgICAgICB0aGlzLnByZXZpZXdWYWx1ZSA9IHRoaXMucHJldmlld1ZhbHVlLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoc3RhdGUgPT09IFwibG9hZGluZ1wiKSB0aGlzLnN0YXRlQ2hhbmdlZChcImxvYWRlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIHZhciBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuZG93bmxvYWRGaWxlKHRoaXMubmFtZSwgdmFsdWUsIChzdGF0dXMsIGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJldmlld1ZhbHVlID0gdGhpcy5wcmV2aWV3VmFsdWUuY29uY2F0KFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBkYXRhLFxuICAgICAgICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdWYWx1ZS5sZW5ndGggPT09IG5ld1ZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlZChcImxvYWRlZFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nICYmIHRoaXMud2FpdEZvclVwbG9hZCkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIG5ldyBVcGxvYWRpbmdGaWxlRXJyb3IoXG4gICAgICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInVwbG9hZGluZ0ZpbGVcIiksXG4gICAgICAgICAgdGhpc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc3RhdGVDaGFuZ2VkKHN0YXRlOiBzdHJpbmcpIHtcbiAgICBpZiAoc3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICB0aGlzLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSBcImxvYWRlZFwiKSB7XG4gICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlZC5maXJlKHRoaXMsIHsgc3RhdGU6IHN0YXRlIH0pO1xuICB9XG4gIHByaXZhdGUgYWxsRmlsZXNPayhmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9yTGVuZ3RoID0gdGhpcy5lcnJvcnMgPyB0aGlzLmVycm9ycy5sZW5ndGggOiAwO1xuICAgIChmaWxlcyB8fCBbXSkuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgaWYgKHRoaXMubWF4U2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhTaXplKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IEV4Y2VlZFNpemVFcnJvcih0aGlzLm1heFNpemUsIHRoaXMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JMZW5ndGggPT09IHRoaXMuZXJyb3JzLmxlbmd0aDtcbiAgfVxuICBwcml2YXRlIGlzRmlsZUltYWdlKGZpbGU6IHtcbiAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICB9KTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWxlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaW1hZ2VQcmVmaXggPSBcImRhdGE6aW1hZ2VcIjtcbiAgICB2YXIgc3ViU3RyID0gZmlsZS5jb250ZW50ICYmIGZpbGUuY29udGVudC5zdWJzdHIoMCwgaW1hZ2VQcmVmaXgubGVuZ3RoKTtcbiAgICBzdWJTdHIgPSBzdWJTdHIgJiYgc3ViU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlc3VsdCA9XG4gICAgICBzdWJTdHIgPT09IGltYWdlUHJlZml4IHx8XG4gICAgICAoISFmaWxlLnR5cGUgJiYgZmlsZS50eXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImltYWdlL1wiKSA9PT0gMCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSAmJiAhdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IGZhbHNlO1xuICAgICAgdmFyIHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogW3RoaXMudmFsdWVdO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IHZhbHVlcy5tYXAoKGRhdGFWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBpbmRleCxcbiAgICAgICAgICB0aXRsZTogXCJGaWxlXCIsXG4gICAgICAgICAgdmFsdWU6IChkYXRhVmFsdWUuY29udGVudCAmJiBkYXRhVmFsdWUuY29udGVudCkgfHwgZGF0YVZhbHVlLFxuICAgICAgICAgIGRpc3BsYXlWYWx1ZTogKGRhdGFWYWx1ZS5uYW1lICYmIGRhdGFWYWx1ZS5uYW1lKSB8fCBkYXRhVmFsdWUsXG4gICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZmlsZVwiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc0NvbW1lbnQ6c3dpdGNoXCIsIGxheW91dDogXCJyb3dcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29tbWVudFRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNDb21tZW50XCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzQ29tbWVudDtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tbWVudFRleHRcIixcbiAgICAgIGxheW91dDogXCJyb3dcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzaG93UHJldmlldzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcImFsbG93TXVsdGlwbGU6Ym9vbGVhblwiLFxuICAgIHsgbmFtZTogXCJhbGxvd0ltYWdlc1ByZXZpZXc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgXCJpbWFnZUhlaWdodFwiLFxuICAgIFwiaW1hZ2VXaWR0aFwiLFxuICAgIFwiYWNjZXB0ZWRUeXBlc1wiLFxuICAgIHsgbmFtZTogXCJzdG9yZURhdGFBc1RleHQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcIndhaXRGb3JVcGxvYWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIFwibWF4U2l6ZTpudW1iZXJcIixcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJuZWVkQ29uZmlybVJlbW92ZUZpbGU6Ym9vbGVhblwiLCB2aXNpYmxlOiB0cnVlLCBkZWZhdWx0OiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImZpbGVcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGVNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBodG1sIHF1ZXN0aW9uLiBVbmxpa2Ugb3RoZXIgcXVlc3Rpb25zIGl0IGRvZXNuJ3QgaGF2ZSB2YWx1ZSBhbmQgdGl0bGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkh0bWxNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTm9uVmFsdWUge1xuICBwdWJsaWMgaWdub3JlSHRtbFByb2dyZXNzaW5nOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgbG9jSHRtbCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIGxvY0h0bWwub25HZXRUZXh0Q2FsbGJhY2sgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgIXRoaXMuaWdub3JlSHRtbFByb2dyZXNzaW5nXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc0h0bWwoc3RyKVxuICAgICAgICA6IHN0cjtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaHRtbFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlnbm9yZUh0bWxQcm9ncmVzc2luZykgcmV0dXJuIHRleHQ7XG4gICAgcmV0dXJuIHN1cGVyLmdldFByb2Nlc3NlZFRleHQodGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBodG1sIHRvIGRpc3BsYXkgaXRcbiAgICovXG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0h0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZEh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc0h0bWwodGhpcy5odG1sKSA6IHRoaXMuaHRtbDtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJodG1sXCIsXG4gIFt7IG5hbWU6IFwiaHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NIdG1sXCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25IdG1sTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibm9udmFsdWVcIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaHRtbFwiLCBuYW1lID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBpbWFnZSBxdWVzdGlvbi4gVGhpcyBxdWVzdGlvbiBoYXNuJ3QgYW55IGZ1bmN0aW9uYWxpdHkgYW5kIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHN1cnZleS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSW1hZ2VNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTm9uVmFsdWUge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIsIHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwidGV4dFwiLCB0aGlzLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJpbWFnZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBVUkwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlTGluaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlTGluayh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaW1hZ2VMaW5rXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0ltYWdlTGluaygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJpbWFnZUxpbmtcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBhbHQgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0ZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaW1hZ2VcIixcbiAgW1xuICAgIHsgbmFtZTogXCJpbWFnZUxpbmtcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0ltYWdlTGlua1wiIH0sXG4gICAgeyBuYW1lOiBcInRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RleHRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29udGVudE1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiaW1hZ2VcIixcbiAgICAgIGNob2ljZXM6IFtcImltYWdlXCIsIFwidmlkZW9cIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImltYWdlRml0XCIsXG4gICAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJjb250YWluXCIsIFwiY292ZXJcIiwgXCJmaWxsXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImltYWdlSGVpZ2h0Om51bWJlclwiLCBkZWZhdWx0OiAxNTAsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcImltYWdlV2lkdGg6bnVtYmVyXCIsIGRlZmF1bHQ6IDIwMCwgbWluVmFsdWU6IDAgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZU1vZGVsKFwiXCIpO1xuICB9LFxuICBcIm5vbnZhbHVlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlTW9kZWwobmFtZSk7XG59KTtcbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ2hlY2tib3hCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuZXhwb3J0IGNsYXNzIEltYWdlSXRlbVZhbHVlIGV4dGVuZHMgSXRlbVZhbHVlIGltcGxlbWVudHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTogYW55LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIHR5cGVOYW1lID0gXCJpbWFnZWl0ZW12YWx1ZVwiXG4gICkge1xuICAgIHN1cGVyKHZhbHVlLCB0ZXh0LCB0eXBlTmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImltYWdlTGlua1wiLCB0aGlzLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnR5cGVOYW1lID8gdGhpcy50eXBlTmFtZSA6IFwiaXRlbXZhbHVlXCI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBvciB2aWRlbyBsaW5rIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUxpbmsoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJpbWFnZUxpbmtcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUxpbmsodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NJbWFnZUxpbmsoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIpO1xuICB9XG4gIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IHRleHQ7XG4gIH1cbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gIH1cbiAgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCkgOiB0ZXh0O1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBzZWxlY3QgaW1hZ2UgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY29sQ291bnQgPSAwO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmNyZWF0ZUl0ZW1WYWx1ZSA9ICh2YWx1ZTogYW55KSA9PlxuICAgICAgbmV3IEltYWdlSXRlbVZhbHVlKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImltYWdlcGlja2VyXCI7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1WYWx1ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaW1hZ2VpdGVtdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnROb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogTXVsdGkgc2VsZWN0IG9wdGlvbi4gSWYgc2V0IHRvIHRydWUsIHRoZW4gYWxsb3dzIHRvIHNlbGVjdCBtdWx0aXBsZSBpbWFnZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG11bHRpU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtdWx0aVNlbGVjdFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBtdWx0aVNlbGVjdChuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm11bHRpU2VsZWN0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgY2hlY2tlZFxuICAgKiBAcGFyYW0gaXRlbSBpbWFnZSBwaWNrZXIgaXRlbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHZhbCwgaXRlbS52YWx1ZSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldLCB0cnVlKSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSB2YWwubGVuZ3RoKSByZXR1cm47XG4gICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgbGFiZWwgdW5kZXIgdGhlIGltYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TGFiZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dMYWJlbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TGFiZWwobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TGFiZWxcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyZW5kZXJlZFZhbHVlXCIpO1xuICAgICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHZhciB2YWx1ZSA9IHN1cGVyLmdldFZhbHVlQ29yZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gdmFsO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gW3ZhbF07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsVG9BcnJheUZvck11bHRTZWxlY3QodmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZWl0ZW12YWx1ZVwiLFxuICBbXSxcbiAgKHZhbHVlOiBhbnkpID0+IG5ldyBJbWFnZUl0ZW1WYWx1ZSh2YWx1ZSksXG4gIFwiaXRlbXZhbHVlXCJcbik7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VpdGVtdmFsdWVcIiwge1xuICBuYW1lOiBcImltYWdlTGlua1wiLFxuICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSW1hZ2VMaW5rXCIsXG59KTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZXBpY2tlclwiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJoYXNOb25lXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb250ZW50TW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJpbWFnZVwiLFxuICAgICAgY2hvaWNlczogW1wiaW1hZ2VcIiwgXCJ2aWRlb1wiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VGaXRcIixcbiAgICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImNvbnRhaW5cIiwgXCJjb3ZlclwiLCBcImZpbGxcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VIZWlnaHQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDE1MCwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VXaWR0aDpudW1iZXJcIiwgZGVmYXVsdDogMjAwLCBtaW5WYWx1ZTogMCB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwic2hvd0xhYmVsOmJvb2xlYW5cIixcbiAgZGVmYXVsdDogZmFsc2UsXG59KTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsXG4gIGRlZmF1bHQ6IDAsXG4gIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0LCA1XSxcbn0pO1xuU2VyaWFsaXplci5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgbmFtZTogXCJtdWx0aVNlbGVjdDpib29sZWFuXCIsXG4gIGRlZmF1bHQ6IGZhbHNlLFxufSk7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VwaWNrZXJcIiwge1xuICBuYW1lOiBcImNob2ljZXM6aW1hZ2VpdGVtdmFsdWVbXVwiLFxufSk7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsKG5hbWUpO1xuICAvL3EuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsIH0gZnJvbSBcIi4vbWFydGl4QmFzZVwiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgUmVxdWlyZWRJbkFsbFJvd3NFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nLCBJTG9jYWxpemFibGVPd25lciB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl9kcm9wZG93blwiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhEYXRhIHtcbiAgb25NYXRyaXhSb3dDaGFuZ2VkKHJvdzogTWF0cml4Um93TW9kZWwpOiB2b2lkO1xuICBnZXRDb3JyZWN0ZWRSb3dWYWx1ZSh2YWx1ZTogYW55KTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Um93TW9kZWwgZXh0ZW5kcyBCYXNlIHtcbiAgcHJpdmF0ZSBkYXRhOiBJTWF0cml4RGF0YTtcbiAgcHJpdmF0ZSBpdGVtOiBJdGVtVmFsdWU7XG4gIHB1YmxpYyBjZWxsQ2xpY2s6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcHVibGljIGZ1bGxOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogSU1hdHJpeERhdGEsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jZWxsQ2xpY2sgPSAoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwidmFsdWVcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YSkgdGhpcy5kYXRhLm9uTWF0cml4Um93Q2hhbmdlZCh0aGlzKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0udGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuZGF0YS5nZXRDb3JyZWN0ZWRSb3dWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHZhciBjc3NDbGFzc2VzID0gKDxhbnk+dGhpcy5kYXRhKS5jc3NDbGFzc2VzO1xuICAgIHZhciByb3dDbGFzcyA9ICEhY3NzQ2xhc3Nlcy5yb3cgPyBjc3NDbGFzc2VzLnJvdyA6IFwiXCI7XG4gICAgdmFyIHJvd0Vycm9yQ2xhc3MgPSAhIWNzc0NsYXNzZXMucm93RXJyb3IgPyBjc3NDbGFzc2VzLnJvd0Vycm9yIDogXCJcIjtcbiAgICB2YXIgaGFzRXJyb3IgPSAhISg8YW55PnRoaXMuZGF0YSkuZ2V0RXJyb3JCeVR5cGUoXCJyZXF1aXJlZGluYWxscm93c2Vycm9yXCIpO1xuXG4gICAgdmFyIGNsYXNzZXMgPSByb3dDbGFzcztcbiAgICBpZiAoISFyb3dFcnJvckNsYXNzICYmIGhhc0Vycm9yICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudmFsdWUpKSB7XG4gICAgICBpZiAoISFjbGFzc2VzKSBjbGFzc2VzICs9IFwiIFwiO1xuICAgICAgY2xhc3NlcyArPSByb3dFcnJvckNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNYXRyaXhDZWxsc093bmVyIGV4dGVuZHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBnZXRSb3dzKCk6IEFycmF5PGFueT47XG4gIGdldENvbHVtbnMoKTogQXJyYXk8YW55Pjtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGxzIHtcbiAgcHJpdmF0ZSB2YWx1ZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGNlbGxzT3duZXI6IElNYXRyaXhDZWxsc093bmVyKSB7fVxuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5sZW5ndGggPT0gMDtcbiAgfVxuICBwdWJsaWMgc2V0Q2VsbFRleHQocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWw6IHN0cmluZykge1xuICAgIHJvdyA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKHJvdywgdGhpcy5yb3dzKTtcbiAgICBjb2x1bW4gPSB0aGlzLmdldENlbGxSb3dDb2x1bW5WYWx1ZShjb2x1bW4sIHRoaXMuY29sdW1ucyk7XG4gICAgaWYgKCFyb3cgfHwgIWNvbHVtbikgcmV0dXJuO1xuICAgIGlmICh2YWwpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZXNbcm93XSkgdGhpcy52YWx1ZXNbcm93XSA9IHt9O1xuICAgICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0pXG4gICAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXSA9IHRoaXMuY3JlYXRlU3RyaW5nKCk7XG4gICAgICB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0udGV4dCA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudmFsdWVzW3Jvd10gJiYgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dKSB7XG4gICAgICAgIHZhciBsb2MgPSB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICAgIGxvYy50ZXh0ID0gXCJcIjtcbiAgICAgICAgaWYgKGxvYy5pc0VtcHR5KSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZXNbcm93XSkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1tyb3ddO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55LCB2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0Q2VsbFRleHQoc2V0dGluZ3MubWF0cml4RGVmYXVsdFJvd05hbWUsIGNvbHVtbiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbExvY1RleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJvdyA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKHJvdywgdGhpcy5yb3dzKTtcbiAgICBjb2x1bW4gPSB0aGlzLmdldENlbGxSb3dDb2x1bW5WYWx1ZShjb2x1bW4sIHRoaXMuY29sdW1ucyk7XG4gICAgaWYgKCFyb3cgfHwgIWNvbHVtbikgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd11bY29sdW1uXSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdENlbGxMb2NUZXh0KGNvbHVtbjogYW55LCB2YWw6IHN0cmluZyk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDZWxsTG9jVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICB2YXIgY2VsbFRleHQgPSB0aGlzLmdldENlbGxMb2NUZXh0KHJvdywgY29sdW1uKTtcbiAgICBpZiAoY2VsbFRleHQgJiYgIWNlbGxUZXh0LmlzRW1wdHkpIHJldHVybiBjZWxsVGV4dDtcbiAgICBjZWxsVGV4dCA9IHRoaXMuZ2V0Q2VsbExvY1RleHQoc2V0dGluZ3MubWF0cml4RGVmYXVsdFJvd05hbWUsIGNvbHVtbik7XG4gICAgaWYgKGNlbGxUZXh0ICYmICFjZWxsVGV4dC5pc0VtcHR5KSByZXR1cm4gY2VsbFRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gXCJudW1iZXJcIikge1xuICAgICAgY29sdW1uID1cbiAgICAgICAgY29sdW1uID49IDAgJiYgY29sdW1uIDwgdGhpcy5jb2x1bW5zLmxlbmd0aFxuICAgICAgICAgID8gdGhpcy5jb2x1bW5zW2NvbHVtbl1cbiAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmxvY1RleHQpIHJldHVybiBjb2x1bW4ubG9jVGV4dDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbFRleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5nZXRDZWxsTG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYy5jYWxjdWxhdGVkVGV4dCA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldERlZmF1bHRDZWxsVGV4dChjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q2VsbExvY1RleHQoc2V0dGluZ3MubWF0cml4RGVmYXVsdFJvd05hbWUsIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYy5jYWxjdWxhdGVkVGV4dCA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldENlbGxEaXNwbGF5VGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYy5jYWxjdWxhdGVkVGV4dCA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCByb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNlbGxzT3duZXIgPyB0aGlzLmNlbGxzT3duZXIuZ2V0Um93cygpIDogW107XG4gIH1cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNlbGxzT3duZXIgPyB0aGlzLmNlbGxzT3duZXIuZ2V0Q29sdW1ucygpIDogW107XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsUm93Q29sdW1uVmFsdWUodmFsOiBhbnksIHZhbHVlczogQXJyYXk8YW55Pik6IGFueSB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKHZhbCA8IDAgfHwgdmFsID49IHZhbHVlcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgdmFsID0gdmFsdWVzW3ZhbF0udmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWwudmFsdWUpIHJldHVybiB2YWwudmFsdWU7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0SnNvbigpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkpIHJldHVybiBudWxsO1xuICAgIHZhciByZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIHJvdyBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgdmFyIHJlc1JvdzogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICB2YXIgcm93VmFsdWVzID0gdGhpcy52YWx1ZXNbcm93XTtcbiAgICAgIGZvciAodmFyIGNvbCBpbiByb3dWYWx1ZXMpIHtcbiAgICAgICAgcmVzUm93W2NvbF0gPSByb3dWYWx1ZXNbY29sXS5nZXRKc29uKCk7XG4gICAgICB9XG4gICAgICByZXNbcm93XSA9IHJlc1JvdztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgZm9yICh2YXIgcm93IGluIHZhbHVlKSB7XG4gICAgICBpZiAocm93ID09IFwicG9zXCIpIGNvbnRpbnVlO1xuICAgICAgdmFyIHJvd1ZhbHVlcyA9IHZhbHVlW3Jvd107XG4gICAgICB0aGlzLnZhbHVlc1tyb3ddID0ge307XG4gICAgICBmb3IgKHZhciBjb2wgaW4gcm93VmFsdWVzKSB7XG4gICAgICAgIGlmIChjb2wgPT0gXCJwb3NcIikgY29udGludWU7XG4gICAgICAgIHZhciBsb2MgPSB0aGlzLmNyZWF0ZVN0cmluZygpO1xuICAgICAgICBsb2Muc2V0SnNvbihyb3dWYWx1ZXNbY29sXSk7XG4gICAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sXSA9IGxvYztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLmNlbGxzT3duZXIsIHRydWUpO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBzaW1wbGUgbWF0cml4IHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhNb2RlbFxuICBleHRlbmRzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPE1hdHJpeFJvd01vZGVsLCBJdGVtVmFsdWU+XG4gIGltcGxlbWVudHMgSU1hdHJpeERhdGEsIElNYXRyaXhDZWxsc093bmVyIHtcbiAgcHJpdmF0ZSBpc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY2VsbHNWYWx1ZTogTWF0cml4Q2VsbHM7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jZWxsc1ZhbHVlID0gbmV3IE1hdHJpeENlbGxzKHRoaXMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY29sdW1uc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYub25Db2x1bW5zQ2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJyb3dzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCFzZWxmLmZpbHRlckl0ZW1zKCkpIHtcbiAgICAgICAgc2VsZi5vblJvd3NDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImhpZGVJZlJvd3NFbXB0eVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgaWYgeW91IHdhbnQgYSB1c2VyIHRvIGFuc3dlciBhbGwgcm93cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxSb3dSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbGxSb3dSZXF1aXJlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc0FsbFJvd1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQWxsUm93UmVxdWlyZWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvd3MubGVuZ3RoID4gMDtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVuZGVyIGl0ZW1zIGluIGEgc3BlY2lmaWMgb3JkZXI6IFwicmFuZG9tXCIgb3IgXCJpbml0aWFsXCIuIERlZmF1bHQgaXMgXCJpbml0aWFsXCIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3NPcmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzT3JkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCByb3dzT3JkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodmFsID09IHRoaXMucm93c09yZGVyKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c09yZGVyXCIsIHZhbCk7XG4gICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSB0aGUgcXVlc3Rpb24gaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSByb3dzIGluIHRoZSBtYXRyaXguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhpZGVJZlJvd3NFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmUm93c0VtcHR5XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVJZlJvd3NFbXB0eSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoaWRlSWZSb3dzRW1wdHlcIiwgdmFsKTtcbiAgfVxuICBnZXRSb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvd3M7XG4gIH1cbiAgZ2V0Q29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucztcbiAgfVxuICBwdWJsaWMgYWRkQ29sdW1uKHZhbHVlOiBhbnksIHRleHQ/OiBzdHJpbmcpOiBJdGVtVmFsdWUge1xuICAgIHZhciBjb2wgPSBuZXcgSXRlbVZhbHVlKHZhbHVlLCB0ZXh0KTtcbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xuICAgIHJldHVybiBjb2w7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1DbGFzcyhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB2YXIgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB2YXIgYWxsb3dIb3ZlciA9ICFpc0NoZWNrZWQgJiYgIWlzRGlzYWJsZWQ7XG4gICAgdmFyIGNlbGxEaXNhYmxlZENsYXNzID0gdGhpcy5oYXNDZWxsVGV4dFxuICAgICAgPyB0aGlzLmNzc0NsYXNzZXMuY2VsbFRleHREaXNhYmxlZFxuICAgICAgOiB0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkO1xuXG4gICAgdmFyIGNlbGxTZWxlY3RlZENsYXNzID0gdGhpcy5oYXNDZWxsVGV4dFxuICAgICAgPyB0aGlzLmNzc0NsYXNzZXMuY2VsbFRleHRTZWxlY3RlZFxuICAgICAgOiB0aGlzLmNzc0NsYXNzZXMuaXRlbUNoZWNrZWQ7XG5cbiAgICB2YXIgaXRlbUhvdmVyQ2xhc3MgPSAhdGhpcy5oYXNDZWxsVGV4dCA/IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXIgOiBcIlwiO1xuXG4gICAgdmFyIGNlbGxDbGFzcyA9IHRoaXMuaGFzQ2VsbFRleHRcbiAgICAgID8gdGhpcy5jc3NDbGFzc2VzLmNlbGxUZXh0XG4gICAgICA6IHRoaXMuY3NzQ2xhc3Nlcy5sYWJlbDtcblxuICAgIGxldCBpdGVtQ2xhc3MgPVxuICAgICAgdGhpcy5oYXNDZWxsVGV4dCAmJiAhIXRoaXMuY3NzQ2xhc3Nlcy5jZWxsXG4gICAgICAgID8gdGhpcy5jc3NDbGFzc2VzLmNlbGwgKyBcIiBcIlxuICAgICAgICA6IFwiXCI7XG4gICAgaXRlbUNsYXNzICs9XG4gICAgICBjZWxsQ2xhc3MgK1xuICAgICAgKGlzQ2hlY2tlZCA/IFwiIFwiICsgY2VsbFNlbGVjdGVkQ2xhc3MgOiBcIlwiKSArXG4gICAgICAoaXNEaXNhYmxlZCA/IFwiIFwiICsgY2VsbERpc2FibGVkQ2xhc3MgOiBcIlwiKSArXG4gICAgICAoYWxsb3dIb3ZlciA/IFwiIFwiICsgaXRlbUhvdmVyQ2xhc3MgOiBcIlwiKTtcbiAgICByZXR1cm4gaXRlbUNsYXNzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aXpRdWVzdGlvbkNvdW50KCkge1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY29ycmVjdEFuc3dlclt0aGlzLnJvd3NbaV0udmFsdWVdKSkgcmVzKys7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHZhciByZXMgPSAwO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJvd3NbaV0udmFsdWU7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZVtyb3ddKSAmJlxuICAgICAgICBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy5jb3JyZWN0QW5zd2VyW3Jvd10sIHZhbHVlW3Jvd10pXG4gICAgICApXG4gICAgICAgIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhSb3dNb2RlbD4oKTtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShyb3cudmFsdWUpKSBjb250aW51ZTtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0ZU1hdHJpeFJvdyhcbiAgICAgICAgICByb3csXG4gICAgICAgICAgdGhpcy5pZCArIFwiX1wiICsgcm93LnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzL2csIFwiX1wiKSxcbiAgICAgICAgICB2YWxbcm93LnZhbHVlXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwICYmICF0aGlzLmZpbHRlcmVkUm93cykge1xuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlTWF0cml4Um93KFxuICAgICAgICAgIG5ldyBJdGVtVmFsdWUobnVsbCksXG4gICAgICAgICAgdGhpcy5uYW1lLnJlcGxhY2UoL1xccy9nLCBcIl9cIiksXG4gICAgICAgICAgdmFsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgc29ydFZpc2libGVSb3dzKFxuICAgIGFycmF5OiBBcnJheTxNYXRyaXhSb3dNb2RlbD5cbiAgKTogQXJyYXk8TWF0cml4Um93TW9kZWw+IHtcbiAgICB2YXIgb3JkZXIgPSB0aGlzLnJvd3NPcmRlci50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChvcmRlciA9PT0gXCJyYW5kb21cIilcbiAgICAgIHJldHVybiBIZWxwZXJzLnJhbmRvbWl6ZUFycmF5PE1hdHJpeFJvd01vZGVsPihhcnJheSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICB0aGlzLnJvd3MgPSB0aGlzLnNvcnRWaXNpYmxlUm93cyh0aGlzLnJvd3MpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHByb2Nlc3NSb3dzT25TZXQobmV3Um93czogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiB0aGlzLnNvcnRWaXNpYmxlUm93cyhuZXdSb3dzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHZpc2libGUgcm93cyBhcyBtb2RlbCBvYmplY3RzLlxuICAgKiBAc2VlIHJvd3NWaXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4Um93TW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlUm93cygpO1xuICB9XG4gIHB1YmxpYyBnZXQgY2VsbHMoKTogTWF0cml4Q2VsbHMge1xuICAgIHJldHVybiB0aGlzLmNlbGxzVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBjZWxscyh2YWx1ZTogTWF0cml4Q2VsbHMpIHtcbiAgICB0aGlzLmNlbGxzLnNldEpzb24odmFsdWUgJiYgdmFsdWUuZ2V0SnNvbiA/IHZhbHVlLmdldEpzb24oKSA6IG51bGwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ2VsbFRleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNlbGxzLmlzRW1wdHk7XG4gIH1cbiAgcHVibGljIHNldENlbGxUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNlbGxzLnNldENlbGxUZXh0KHJvdywgY29sdW1uLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGxzLmdldENlbGxUZXh0KHJvdywgY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55LCB2YWw6IHN0cmluZykge1xuICAgIHRoaXMuY2VsbHMuc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxscy5nZXREZWZhdWx0Q2VsbFRleHQoY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdywgY29sdW1uKTtcbiAgfVxuICBwcml2YXRlIGVtcHR5TG9jYWxpemFibGVTdHJpbmcgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XG4gIHB1YmxpYyBnZXRDZWxsRGlzcGxheUxvY1RleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmNlbGxzLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYyA6IHRoaXMuZW1wdHlMb2NhbGl6YWJsZVN0cmluZztcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAoXG4gICAgICAoIWlzT25WYWx1ZUNoYW5nZWQgfHwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkgJiZcbiAgICAgIHRoaXMuaGFzRXJyb3JJblJvd3MoKVxuICAgICkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IobnVsbCwgdGhpcykpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc0FsbFJvd1JlcXVpcmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xuICB9XG4gIHByaXZhdGUgaGFzVmFsdWVzSW5BbGxSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93c1tpXS52YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldElzQW5zd2VyZWQoKSAmJiB0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTWF0cml4Um93KFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBmdWxsTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogTWF0cml4Um93TW9kZWwge1xuICAgIHZhciByb3cgPSBuZXcgTWF0cml4Um93TW9kZWwoaXRlbSwgZnVsbE5hbWUsIHRoaXMsIHZhbHVlKTtcbiAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChyb3cpO1xuICAgIHJldHVybiByb3c7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTWF0cml4Um93Q3JlYXRlZChyb3c6IE1hdHJpeFJvd01vZGVsKSB7fVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIHRoaXMuaXNSb3dDaGFuZ2luZyB8fCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgfHwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGggPT0gMClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSB2YWwgPSB7fTtcbiAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzWzBdLnZhbHVlID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV07XG4gICAgICAgIHZhciByb3dWYWwgPSB2YWxbcm93Lm5hbWVdO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93VmFsKSkgcm93VmFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHJvd1ZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHJlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICB2YXIgbmV3S2V5ID0ga2V5c0FzVGV4dFxuICAgICAgICA/IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLnJvd3MsIGtleSlcbiAgICAgICAgOiBrZXk7XG4gICAgICBpZiAoIW5ld0tleSkgbmV3S2V5ID0ga2V5O1xuICAgICAgdmFyIG5ld1ZhbHVlID0gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKHRoaXMuY29sdW1ucywgdmFsdWVba2V5XSk7XG4gICAgICBpZiAoIW5ld1ZhbHVlKSBuZXdWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICByZXNbbmV3S2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICB2YXIgdmFsdWVzID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gT2JqZWN0LmtleXModmFsdWVzIHx8IHt9KS5tYXAoKHJvd05hbWUpID0+IHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMucm93cy5maWx0ZXIoXG4gICAgICAgICAgKHI6IE1hdHJpeFJvd01vZGVsKSA9PiByLnZhbHVlID09PSByb3dOYW1lXG4gICAgICAgIClbMF07XG4gICAgICAgIHZhciByb3dEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgIG5hbWU6IHJvd05hbWUsXG4gICAgICAgICAgdGl0bGU6ICEhcm93ID8gcm93LnRleHQgOiBcInJvd1wiLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbcm93TmFtZV0sXG4gICAgICAgICAgZGlzcGxheVZhbHVlOiBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUoXG4gICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLFxuICAgICAgICAgICAgdmFsdWVzW3Jvd05hbWVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKFxuICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMsXG4gICAgICAgICAgdmFsdWVzW3Jvd05hbWVdXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goKGNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICByb3dEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID1cbiAgICAgICAgICAgICAgaXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dEYXRhSXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgaWYgKCEhcm93LnZhbHVlKSB7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgcm93LnZhbHVlLFxuICAgICAgICAgIHRleHQ6IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIi5cIiArIHJvdy5jYWxjdWxhdGVkVGV4dCxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBzdXBlci5nZXRDb25kaXRpb25Kc29uKCk7XG4gICAgdmFyIHF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChwYXRoKTtcbiAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5jb2x1bW5zO1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocXVlc3Rpb24pO1xuICAgIGpzb25bXCJ0eXBlXCJdID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgaWYgKHRoaXMuaGFzUm93cykge1xuICAgICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlc0luUm93cygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmIChyb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfXCIgKyByb3dzWzBdLm5hbWUgKyBcIl9cIiArIDA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKSB7XG4gICAgaWYgKHRoaXMuaGlkZUlmUm93c0VtcHR5KSB7XG4gICAgICB0aGlzLnZpc2libGUgPVxuICAgICAgICB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgICAoIXRoaXMuZmlsdGVyZWRSb3dzIHx8IHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA+IDApO1xuICAgIH1cbiAgfVxuICAvL0lNYXRyaXhEYXRhXG4gIG9uTWF0cml4Um93Q2hhbmdlZChyb3c6IE1hdHJpeFJvd01vZGVsKSB7XG4gICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmhhc1Jvd3MpIHtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUocm93LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB7fTtcbiAgICAgIH1cbiAgICAgIG5ld1ZhbHVlW3Jvdy5uYW1lXSA9IHJvdy52YWx1ZTtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBnZXRDb3JyZWN0ZWRSb3dWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmNvbHVtbnNbaV0udmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuY29sdW1uc1tpXS52YWx1ZSkpXG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbaV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgIGtleXMucHVzaChcImNvbHVtbnNcIik7XG4gICAga2V5cy5wdXNoKFwicm93c1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IFN1cnZleU1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgeyBjb2x1bW46IGNlbGwgfSxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgeyBjb2x1bW46IGNlbGwgfSxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgeyByb3c6IGNlbGwgfSxcbiAgICAgIFwicm93LWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgeyByb3c6IGNlbGwgfSxcbiAgICAgIFwicm93LWhlYWRlclwiXG4gICAgKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5zOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9jb2x1bW5cIik7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9yb3dcIik7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNlbGxzOmNlbGxzXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJjZWxsc1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzT3JkZXJcIixcbiAgICAgIGRlZmF1bHQ6IFwiaW5pdGlhbFwiLFxuICAgICAgY2hvaWNlczogW1wiaW5pdGlhbFwiLCBcInJhbmRvbVwiXSxcbiAgICB9LFxuICAgIFwiaXNBbGxSb3dSZXF1aXJlZDpib29sZWFuXCIsXG4gICAgXCJoaWRlSWZSb3dzRW1wdHk6Ym9vbGVhblwiLFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4YmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpO1xuICBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7XG4gIHEuY29sdW1ucyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcbiAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gIElNYXRyaXhEcm9wZG93bkRhdGEsXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBJQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gIHByaXZhdGUgaXRlbTogSXRlbVZhbHVlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLFxuICAgIHZhbHVlOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xuICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgdGhpcy5idWlsZENlbGxzKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0udGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgfVxufVxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIG1hdHJpeCBkcm9wZG93biBxdWVzdGlvbi4gWW91IG1heSB1c2UgYSBkcm9wZG93biwgY2hlY2tib3gsIHJhZGlvZ3JvdXAsIHRleHQgYW5kIGNvbW1lbnQgcXVlc3Rpb25zIGFzIGEgY2VsbCBlZGl0b3JzLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwidG90YWxUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicm93c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICBzZWxmLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgICAgc2VsZi5maWx0ZXJJdGVtcygpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25cIjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gc2hvdyBpdCBvbiB0aGUgZmlyc3QgY29sdW1uIGZvciB0aGUgdG90YWwgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCB0b3RhbFRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxUZXh0XCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0b3RhbFRleHRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RvdGFsVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0b3RhbFRleHRcIik7XG4gIH1cbiAgcHVibGljIGdldEZvb3RlclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RvdGFsVGV4dDtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbHVtbiB3aWR0aCBmb3IgdGhlIGZpcnN0IGNvbHVtbiwgcm93IHRpdGxlIGNvbHVtbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm93VGl0bGVXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dUaXRsZVdpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcm93VGl0bGVXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd1RpdGxlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93VGl0bGVXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJvd1RpdGxlV2lkdGg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93VmFsdWUgPSB0aGlzLnJvd3NbaV0udmFsdWU7XG4gICAgICB2YXIgdmFsID0gdmFsdWVbcm93VmFsdWVdO1xuICAgICAgaWYgKCF2YWwpIGNvbnRpbnVlO1xuICAgICAgaWYgKGtleXNBc1RleHQpIHtcbiAgICAgICAgdmFyIGRpc3BsYXlSb3dWYWx1ZSA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZShcbiAgICAgICAgICB0aGlzLnJvd3MsXG4gICAgICAgICAgcm93VmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCEhZGlzcGxheVJvd1ZhbHVlKSB7XG4gICAgICAgICAgcm93VmFsdWUgPSBkaXNwbGF5Um93VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICg8YW55PnJlcylbcm93VmFsdWVdID0gdGhpcy5nZXRSb3dEaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgcm93c1tpXSwgdmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgdmFyIGhhc0NvbnRleHQgPSAhIWNvbnRleHQgPyB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb250ZXh0KSA+IC0xIDogZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJvd3NbaV07XG4gICAgICBpZiAoIXJvdy52YWx1ZSkgY29udGludWU7XG4gICAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIi5cIiArIHJvdy52YWx1ZSArIFwiLlwiO1xuICAgICAgdmFyIHByZWZpeFRpdGxlID0gdGhpcy5wcm9jZXNzZWRUaXRsZSArIFwiLlwiICsgcm93LmNhbGN1bGF0ZWRUZXh0ICsgXCIuXCI7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zW2pdO1xuICAgICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IHByZWZpeE5hbWUgKyBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB0ZXh0OiBwcmVmaXhUaXRsZSArIGNvbHVtbi5mdWxsVGl0bGUsXG4gICAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PSBjb250ZXh0KSBjb250aW51ZTtcbiAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcInJvdy5cIiArIGNvbHVtbi5uYW1lLFxuICAgICAgICAgIHRleHQ6IFwicm93LlwiICsgY29sdW1uLmZ1bGxUaXRsZSxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIHZhciBuZXdWYWwgPSBudWxsO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICBpZiAoSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkpIHtcbiAgICAgICAgaWYgKG5ld1ZhbCA9PSBudWxsKSBuZXdWYWwgPSB7fTtcbiAgICAgICAgKDxhbnk+bmV3VmFsKVtrZXldID0gdmFsW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsO1xuICAgIH1cbiAgICBzdXBlci5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlc0luUm93cygpO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbD4oKTtcbiAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHJldHVybiByZXN1bHQ7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFyb3dzW2ldLnZhbHVlKSBjb250aW51ZTtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KHJvd3NbaV0sIHZhbFtyb3dzW2ldLnZhbHVlXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3coXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93blJvd01vZGVsKGl0ZW0udmFsdWUsIGl0ZW0sIHRoaXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgIGtleXMucHVzaChcInJvd3NcIik7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkcm9wZG93blwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzOml0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgICBcInJvd3NWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJyb3dUaXRsZVdpZHRoXCIsXG4gICAgeyBuYW1lOiBcInRvdGFsVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVG90YWxUZXh0XCIgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4ZHJvcGRvd25iYXNlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBbMSwgMiwgMywgNCwgNV07XG4gIHEucm93cyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Um93cztcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTtcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7XG4gIEpzb25PYmplY3QsXG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG59IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsIH0gZnJvbSBcIi4vbWFydGl4QmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7XG4gIElFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5LFxuICBJU3VydmV5SW1wbCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQcm9ncmVzc0luZm8sXG4gIElQYW5lbCxcbiAgSVdyYXBwZXJPYmplY3QsXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQge1xuICBUZXh0UHJlUHJvY2Vzc29yVmFsdWUsXG4gIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvcixcbn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IgfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCB7IGdldEN1cnJlY3lDb2RlcyB9IGZyb20gXCIuL3F1ZXN0aW9uX2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgS2V5RHVwbGljYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IEFjdGlvbiwgSUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERyb3Bkb3duRGF0YSB7XG4gIHZhbHVlOiBhbnk7XG4gIG9uUm93Q2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdSb3dWYWx1ZTogYW55LFxuICAgIGlzRGVsZXRpbmdWYWx1ZTogYm9vbGVhblxuICApOiB2b2lkO1xuICBvblJvd0NoYW5naW5nKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55O1xuICBpc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nOiBib29sZWFuO1xuICBnZXRSb3dJbmRleChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogbnVtYmVyO1xuICBnZXRSb3dWYWx1ZShyb3dJbmRleDogbnVtYmVyKTogYW55O1xuICBjaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQoXG4gICAgY2hlY2tlZFJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY2VsbFF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBib29sZWFuO1xuICBoYXNEZXRhaWxQYW5lbChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbjtcbiAgZ2V0SXNEZXRhaWxQYW5lbFNob3dpbmcocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW47XG4gIHNldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIHZhbDogYm9vbGVhbik6IHZvaWQ7XG4gIGNyZWF0ZVJvd0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBQYW5lbE1vZGVsO1xuICB2YWxpZGF0ZUNlbGwoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBTdXJ2ZXlFcnJvcjtcbiAgY29sdW1uczogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+O1xuICBjcmVhdGVRdWVzdGlvbihcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW5cbiAgKTogUXVlc3Rpb247XG4gIGdldExvY2FsZSgpOiBzdHJpbmc7XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb247XG4gIG9uVG90YWxWYWx1ZUNoYW5nZWQoKTogYW55O1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4Q29sdW1uT3duZXIgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciB7XG4gIGdldFJlcXVpcmVkVGV4dCgpOiBzdHJpbmc7XG4gIG9uQ29sdW1uUHJvcGVydHlDaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogdm9pZDtcbiAgb25Db2x1bW5JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IEl0ZW1WYWx1ZSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBvbGRWYWx1ZTogYW55XG4gICk6IHZvaWQ7XG4gIG9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogdm9pZDtcbiAgZ2V0Q2VsbFR5cGUoKTogc3RyaW5nO1xuICBvbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogdm9pZDtcbn1cblxuZnVuY3Rpb24gb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKFxuICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSxcbiAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgcXVlc3Rpb246IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIGRhdGE6IGFueVxuKSB7XG4gIGNlbGxRdWVzdGlvbi5zdG9yZU90aGVyc0FzQ29tbWVudCA9ICEhcXVlc3Rpb25cbiAgICA/IHF1ZXN0aW9uLnN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAgOiBmYWxzZTtcbiAgaWYgKFxuICAgICghY2VsbFF1ZXN0aW9uLmNob2ljZXMgfHwgY2VsbFF1ZXN0aW9uLmNob2ljZXMubGVuZ3RoID09IDApICYmXG4gICAgY2VsbFF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5XG4gICkge1xuICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzID0gcXVlc3Rpb24uY2hvaWNlcztcbiAgfVxuICBpZiAoIWNlbGxRdWVzdGlvbi5jaG9pY2VzQnlVcmwuaXNFbXB0eSkge1xuICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzQnlVcmwucnVuKGRhdGEuZ2V0VGV4dFByb2Nlc3NvcigpKTtcbiAgfVxufVxuZXhwb3J0IHZhciBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzID0ge1xuICBkcm9wZG93bjoge1xuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIFwiY2hvaWNlc1wiLFxuICAgICAgXCJjaG9pY2VzT3JkZXJcIixcbiAgICAgIFwiY2hvaWNlc0J5VXJsXCIsXG4gICAgICBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgICBcIm90aGVyVGV4dFwiLFxuICAgICAgXCJjaG9pY2VzVmlzaWJsZUlmXCIsXG4gICAgXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHtcbiAgICAgIG9uVXBkYXRlU2VsZWN0QmFzZUNlbGxRdWVzdGlvbihjZWxsUXVlc3Rpb24sIGNvbHVtbiwgcXVlc3Rpb24sIGRhdGEpO1xuICAgICAgaWYgKFxuICAgICAgICAhIWNlbGxRdWVzdGlvbi5sb2NPcHRpb25zQ2FwdGlvbiAmJlxuICAgICAgICBjZWxsUXVlc3Rpb24ubG9jT3B0aW9uc0NhcHRpb24uaXNFbXB0eSAmJlxuICAgICAgICAhcXVlc3Rpb24ubG9jT3B0aW9uc0NhcHRpb24uaXNFbXB0eVxuICAgICAgKSB7XG4gICAgICAgIGNlbGxRdWVzdGlvbi5vcHRpb25zQ2FwdGlvbiA9IHF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNoZWNrYm94OiB7XG4gICAgcHJvcGVydGllczogW1xuICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICBcImNob2ljZXNPcmRlclwiLFxuICAgICAgXCJjaG9pY2VzQnlVcmxcIixcbiAgICAgIFwib3RoZXJUZXh0XCIsXG4gICAgICBcImNob2ljZXNWaXNpYmxlSWZcIixcbiAgICAgIFwiaGFzU2VsZWN0QWxsXCIsXG4gICAgICBcImhhc05vbmVcIixcbiAgICBdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge1xuICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XG4gICAgICBjZWxsUXVlc3Rpb24uY29sQ291bnQgPVxuICAgICAgICBjb2x1bW4uY29sQ291bnQgPiAtMSA/IGNvbHVtbi5jb2xDb3VudCA6IHF1ZXN0aW9uLmNvbHVtbkNvbENvdW50O1xuICAgIH0sXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICBcImNob2ljZXNcIixcbiAgICAgIFwiY2hvaWNlc09yZGVyXCIsXG4gICAgICBcImNob2ljZXNCeVVybFwiLFxuICAgICAgXCJvdGhlclRleHRcIixcbiAgICAgIFwiY2hvaWNlc1Zpc2libGVJZlwiLFxuICAgIF0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7XG4gICAgICBvblVwZGF0ZVNlbGVjdEJhc2VDZWxsUXVlc3Rpb24oY2VsbFF1ZXN0aW9uLCBjb2x1bW4sIHF1ZXN0aW9uLCBkYXRhKTtcbiAgICAgIGNlbGxRdWVzdGlvbi5jb2xDb3VudCA9XG4gICAgICAgIGNvbHVtbi5jb2xDb3VudCA+IC0xID8gY29sdW1uLmNvbENvdW50IDogcXVlc3Rpb24uY29sdW1uQ29sQ291bnQ7XG4gICAgfSxcbiAgfSxcbiAgdGV4dDoge1xuICAgIHByb3BlcnRpZXM6IFtcInBsYWNlSG9sZGVyXCIsIFwiaW5wdXRUeXBlXCIsIFwibWF4TGVuZ3RoXCIsIFwibWluXCIsIFwibWF4XCIsIFwic3RlcFwiXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHt9LFxuICB9LFxuICBjb21tZW50OiB7XG4gICAgcHJvcGVydGllczogW1wicGxhY2VIb2xkZXJcIiwgXCJyb3dzXCIsIFwibWF4TGVuZ3RoXCJdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge30sXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJyZW5kZXJBc1wiLCBcImRlZmF1bHRWYWx1ZVwiXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGNlbGxRdWVzdGlvbi5zaG93VGl0bGUgPSB0cnVlO1xuICAgICAgY2VsbFF1ZXN0aW9uLnJlbmRlckFzID0gY29sdW1uLnJlbmRlckFzO1xuICAgIH0sXG4gIH0sXG4gIGV4cHJlc3Npb246IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJleHByZXNzaW9uXCIsIFwiZGlzcGxheVN0eWxlXCIsIFwiY3VycmVuY3lcIl0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7fSxcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcHJvcGVydGllczogW1wicmF0ZVZhbHVlc1wiXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93bkNvbHVtbiBleHRlbmRzIEJhc2VcbiAgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciwgSVdyYXBwZXJPYmplY3Qge1xuICBwdWJsaWMgc3RhdGljIGdldENvbHVtblR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcykge1xuICAgICAgcmVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHRlbXBsYXRlUXVlc3Rpb25WYWx1ZTogUXVlc3Rpb247XG4gIHByaXZhdGUgY29sT3duZXJWYWx1ZTogSU1hdHJpeENvbHVtbk93bmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBpbmRleFZhbHVlID0gLTE7XG4gIHByaXZhdGUgX2lzVmlzaWJsZSA9IHRydWU7XG4gIHByaXZhdGUgX2hhc1Zpc2libGVDZWxsID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsRm9ybWF0XCIsIHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcInNob3dJbk11bHRpcGxlQ29sdW1uc1wiLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuZG9TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jVGl0bGUuc3RyQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0T3JpZ2luYWxPYmooKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbjtcbiAgfVxuICBnZXRDbGFzc05hbWVQcm9wZXJ0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNlbGxUeXBlXCI7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLmNvbE93bmVyID8gKDxhbnk+dGhpcy5jb2xPd25lcikuc3VydmV5IDogbnVsbDtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5vbkdldFN1cnZleSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICAgIH07XG4gIH1cbiAgZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNlbGxUeXBlXCI7XG4gIH1cbiAgZ2V0RHluYW1pY1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29sT3duZXIoKTogSU1hdHJpeENvbHVtbk93bmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lclZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sT3duZXIodmFsdWU6IElNYXRyaXhDb2x1bW5Pd25lcikge1xuICAgIHRoaXMuY29sT3duZXJWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICghIXZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGFkZFVzZWRMb2NhbGVzKGxvY2FsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBzdXBlci5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uYWRkVXNlZExvY2FsZXMobG9jYWxlcyk7XG4gIH1cbiAgcHVibGljIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuaW5kZXhWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiO1xuICB9XG4gIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2VsbFR5cGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjZWxsVHlwZSh2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gICAgaWYgKCEhdGhpcy5jb2xPd25lcikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB0ZW1wbGF0ZVF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlO1xuICB9XG4gIHB1YmxpYyBzZXRJc1Zpc2libGUobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNWaXNpYmxlID0gbmV3VmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVmlzaWJsZUNlbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Zpc2libGVDZWxsO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzVmlzaWJsZUNlbGwobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGFzVmlzaWJsZUNlbGwgPSBuZXdWYWw7XG4gIH1cbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi50aXRsZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnRpdGxlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHRPckh0bWw7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzUmVxdWlyZWQgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCByZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlcXVpcmVkVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlcXVpcmVkRXJyb3JUZXh0ID0gdmFsO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NSZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVhZE9ubHk7XG4gIH1cbiAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVhZE9ubHkgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBoYXNPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmhhc090aGVyO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzT3RoZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmhhc090aGVyID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi52aXNpYmxlSWY7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUlmID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuYWJsZUlmO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZW5hYmxlSWYgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCByZXF1aXJlZElmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZElmO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZElmID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNVbmlxdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVW5pcXVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNVbmlxdWUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNVbmlxdWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dJbk11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dJbk11bHRpcGxlQ29sdW1ucyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SW5NdWx0aXBsZUNvbHVtbnNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1wiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCJdLmluZGV4T2YodGhpcy5jZWxsVHlwZSkgPiAtMTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd0luTXVsdGlwbGVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dJbk11bHRpcGxlQ29sdW1ucyAmJiB0aGlzLmlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucztcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi52YWxpZGF0b3JzO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsaWRhdG9ycyh2YWw6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4pIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmFsaWRhdG9ycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbFR5cGVcIiwgXCJub25lXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxUeXBlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbEV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxFeHByZXNzaW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxFeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUb3RhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b3RhbFR5cGUgIT0gXCJub25lXCIgfHwgISF0aGlzLnRvdGFsRXhwcmVzc2lvbjtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxGb3JtYXRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB0b3RhbEZvcm1hdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxGb3JtYXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jVG90YWxGb3JtYXQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidG90YWxGb3JtYXRcIik7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJBcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJBc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlbmRlckFzKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyQXNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDIwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDIwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxNaW5pbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsRGlzcGxheVN0eWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsRGlzcGxheVN0eWxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxEaXNwbGF5U3R5bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0b3RhbERpc3BsYXlTdHlsZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgdG90YWxDdXJyZW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbEN1cnJlbmN5XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxDdXJyZW5jeSh2YWw6IHN0cmluZykge1xuICAgIGlmIChnZXRDdXJyZWN5Q29kZXMoKS5pbmRleE9mKHZhbCkgPCAwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxDdXJyZW5jeVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbWluV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluV2lkdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5XaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB3aWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxuICBwdWJsaWMgY3JlYXRlQ2VsbFF1ZXN0aW9uKGRhdGE6IGFueSk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcVR5cGUgPSB0aGlzLmNhbGNDZWxsUXVlc3Rpb25UeXBlKCk7XG4gICAgdmFyIGNlbGxRdWVzdGlvbiA9IDxRdWVzdGlvbj50aGlzLmNyZWF0ZU5ld1F1ZXN0aW9uKHFUeXBlKTtcbiAgICB0aGlzLmNhbGxPbkNlbGxRdWVzdGlvblVwZGF0ZShjZWxsUXVlc3Rpb24sIGRhdGEpO1xuICAgIHJldHVybiBjZWxsUXVlc3Rpb247XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxRdWVzdGlvbihcbiAgICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGRhdGE6IGFueSxcbiAgICBvblVwZGF0ZUpzb246IChqc29uOiBhbnkpID0+IGFueSA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5zZXRRdWVzdGlvblByb3BlcnRpZXMoY2VsbFF1ZXN0aW9uLCBvblVwZGF0ZUpzb24pO1xuICAgIHRoaXMuY2FsbE9uQ2VsbFF1ZXN0aW9uVXBkYXRlKGNlbGxRdWVzdGlvbiwgZGF0YSk7XG4gIH1cbiAgcHJpdmF0ZSBjYWxsT25DZWxsUXVlc3Rpb25VcGRhdGUoY2VsbFF1ZXN0aW9uOiBRdWVzdGlvbiwgZGF0YTogYW55KSB7XG4gICAgdmFyIHFUeXBlID0gY2VsbFF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICB2YXIgcURlZmluaXRpb24gPSAoPGFueT5tYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzKVtxVHlwZV07XG4gICAgaWYgKHFEZWZpbml0aW9uICYmIHFEZWZpbml0aW9uW1wib25DZWxsUXVlc3Rpb25VcGRhdGVcIl0pIHtcbiAgICAgIHFEZWZpbml0aW9uW1wib25DZWxsUXVlc3Rpb25VcGRhdGVcIl0oXG4gICAgICAgIGNlbGxRdWVzdGlvbixcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5jb2xPd25lcixcbiAgICAgICAgZGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZGVmYXVsdENlbGxUeXBlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY0NlbGxRdWVzdGlvblR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jZWxsVHlwZSAhPT0gXCJkZWZhdWx0XCIpIHJldHVybiB0aGlzLmNlbGxUeXBlO1xuICAgIGlmICh0aGlzLmNvbE93bmVyKSByZXR1cm4gdGhpcy5jb2xPd25lci5nZXRDZWxsVHlwZSgpO1xuICAgIHJldHVybiBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGU7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVRlbXBsYXRlUXVlc3Rpb24oKSB7XG4gICAgdmFyIHByZXZDZWxsVHlwZSA9IHRoaXMudGVtcGxhdGVRdWVzdGlvblxuICAgICAgPyB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZ2V0VHlwZSgpXG4gICAgICA6IFwiXCI7XG4gICAgdmFyIGN1ckNlbGxUeXBlID0gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZSgpO1xuICAgIGlmIChjdXJDZWxsVHlwZSA9PT0gcHJldkNlbGxUeXBlKSByZXR1cm47XG4gICAgaWYgKHRoaXMudGVtcGxhdGVRdWVzdGlvbikge1xuICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0aWVzKHByZXZDZWxsVHlwZSk7XG4gICAgfVxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvblZhbHVlID0gdGhpcy5jcmVhdGVOZXdRdWVzdGlvbihjdXJDZWxsVHlwZSk7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLmFkZFByb3BlcnRpZXMoY3VyQ2VsbFR5cGUpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgICAgb3B0aW9ucy5uYW1lLFxuICAgICAgICBvcHRpb25zLm9sZFZhbHVlLFxuICAgICAgICBvcHRpb25zLm5ld1ZhbHVlXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5kb0l0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICAgICAgb3B0aW9ucy5wcm9wZXJ0eU5hbWUsXG4gICAgICAgIG9wdGlvbnMub2JqLFxuICAgICAgICBvcHRpb25zLm5hbWUsXG4gICAgICAgIG9wdGlvbnMubmV3VmFsdWUsXG4gICAgICAgIG9wdGlvbnMub2xkVmFsdWVcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzQ29udGVudEVsZW1lbnQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm9uR2V0U3VydmV5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1F1ZXN0aW9uKGNlbGxUeXBlOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoY2VsbFR5cGUpO1xuICAgIGlmICghcXVlc3Rpb24pIHtcbiAgICAgIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJ0ZXh0XCIpO1xuICAgIH1cbiAgICBxdWVzdGlvbi5sb2FkaW5nT3duZXIgPSB0aGlzO1xuICAgIHF1ZXN0aW9uLmlzRWRpdGFibGVUZW1wbGF0ZUVsZW1lbnQgPSB0cnVlO1xuICAgIHRoaXMuc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uUHJvcGVydGllcyhcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgb25VcGRhdGVKc29uOiAoanNvbjogYW55KSA9PiBhbnkgPSBudWxsXG4gICkge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlUXVlc3Rpb24pIHtcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLCB0cnVlKTtcbiAgICAgIGlmIChvblVwZGF0ZUpzb24pIHtcbiAgICAgICAgb25VcGRhdGVKc29uKGpzb24pO1xuICAgICAgfVxuICAgICAganNvbi50eXBlID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCBxdWVzdGlvbik7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIGlmICghU2VyaWFsaXplci5oYXNPcmlnaW5hbFByb3BlcnR5KHRoaXMsIG5hbWUpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtblByb3BlcnR5Q2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZG9JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgb2xkVmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIVNlcmlhbGl6ZXIuaGFzT3JpZ2luYWxQcm9wZXJ0eShvYmosIG5hbWUpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICBvYmosXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICBvbGRWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5jb2xPd25lciAhPSBudWxsICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLmNvbE93bmVyLm9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlOiBzdHJpbmcpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5nZXREeW5hbWljUHJvcGVydGllc0J5T2JqKHRoaXMsIGN1ckNlbGxUeXBlKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZVByb3BlcnRpZXMoY3VyQ2VsbFR5cGU6IHN0cmluZykge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIGRlbGV0ZSAoPGFueT50aGlzKVtwcm9wLm5hbWVdO1xuICAgICAgaWYgKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XG4gICAgICAgIGRlbGV0ZSAoPGFueT50aGlzKVtwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydGllcyhjdXJDZWxsVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIHRoaXMuYWRkUHJvcGVydHkocXVlc3Rpb24sIHByb3AubmFtZSwgZmFsc2UpO1xuICAgICAgaWYgKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XG4gICAgICAgIHRoaXMuYWRkUHJvcGVydHkocXVlc3Rpb24sIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0eShcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgcHJvcE5hbWU6IHN0cmluZyxcbiAgICBpc1JlYWRPbmx5OiBib29sZWFuXG4gICkge1xuICAgIHZhciBkZXNjID0ge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICg8YW55PnF1ZXN0aW9uKVtwcm9wTmFtZV07XG4gICAgICB9LFxuICAgIH07XG4gICAgaWYgKCFpc1JlYWRPbmx5KSB7XG4gICAgICAoPGFueT5kZXNjKVtcInNldFwiXSA9IGZ1bmN0aW9uKHY6IGFueSkge1xuICAgICAgICAoPGFueT5xdWVzdGlvbilbcHJvcE5hbWVdID0gdjtcbiAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wTmFtZSwgZGVzYyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogUXVlc3Rpb247XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHB1YmxpYyBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICkge1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb24oY29sdW1uLCByb3csIGRhdGEpO1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZS51cGRhdGVDdXN0b21XaWRnZXQoKTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NTdHJzQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbihcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IGRhdGEuY3JlYXRlUXVlc3Rpb24odGhpcy5yb3csIHRoaXMuY29sdW1uKTtcbiAgICByZXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZGF0YS52YWxpZGF0ZUNlbGwocm93LCBjb2x1bW4ubmFtZSwgcm93LnZhbHVlKTtcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmdldFByb3BlcnRpZXMoY29sdW1uLmdldFR5cGUoKSkuZm9yRWFjaChcbiAgICAgIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBsZXQgcHJvcGVydHlOYW1lID0gcHJvcGVydHkubmFtZTtcbiAgICAgICAgaWYgKCg8YW55PmNvbHVtbilbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzW3Byb3BlcnR5TmFtZV0gPSAoPGFueT5jb2x1bW4pW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blRvdGFsQ2VsbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHB1YmxpYyBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICkge1xuICAgIHN1cGVyKGNvbHVtbiwgcm93LCBkYXRhKTtcbiAgICB0aGlzLnVwZGF0ZUNlbGxRdWVzdGlvbigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbihcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IDxRdWVzdGlvbj5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwiZXhwcmVzc2lvblwiKTtcbiAgICByZXMuc2V0U3VydmV5SW1wbChyb3cpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHRoaXMudXBkYXRlQ2VsbFF1ZXN0aW9uKCk7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlQ2VsbFF1ZXN0aW9uKCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jQ2FsY3VsYXRpb24oKTtcbiAgICB0aGlzLmNvbHVtbi51cGRhdGVDZWxsUXVlc3Rpb24odGhpcy5xdWVzdGlvbiwgbnVsbCwgZnVuY3Rpb24oanNvbikge1xuICAgICAgZGVsZXRlIGpzb25bXCJkZWZhdWx0VmFsdWVcIl07XG4gICAgfSk7XG4gICAgdGhpcy5xdWVzdGlvbi5leHByZXNzaW9uID0gdGhpcy5nZXRUb3RhbEV4cHJlc3Npb24oKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmZvcm1hdCA9IHRoaXMuY29sdW1uLnRvdGFsRm9ybWF0O1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVuY3kgPSB0aGlzLmNvbHVtbi50b3RhbEN1cnJlbmN5O1xuICAgIHRoaXMucXVlc3Rpb24uZGlzcGxheVN0eWxlID0gdGhpcy5jb2x1bW4udG90YWxEaXNwbGF5U3R5bGU7XG4gICAgdGhpcy5xdWVzdGlvbi5tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSB0aGlzLmNvbHVtbi50b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0cztcbiAgICB0aGlzLnF1ZXN0aW9uLm1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29sdW1uLnRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzO1xuICAgIHRoaXMucXVlc3Rpb24udW5sb2NDYWxjdWxhdGlvbigpO1xuICAgIHRoaXMucXVlc3Rpb24ucnVuSWZSZWFkT25seSA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldFRvdGFsRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbikgcmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbjtcbiAgICBpZiAodGhpcy5jb2x1bW4udG90YWxUeXBlID09IFwibm9uZVwiKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgZnVuTmFtZSA9IHRoaXMuY29sdW1uLnRvdGFsVHlwZSArIFwiSW5BcnJheVwiO1xuICAgIGlmICghRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLmhhc0Z1bmN0aW9uKGZ1bk5hbWUpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gZnVuTmFtZSArIFwiKHtzZWxmfSwgJ1wiICsgdGhpcy5jb2x1bW4ubmFtZSArIFwiJylcIjtcbiAgfVxufVxuXG5jbGFzcyBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IgZXh0ZW5kcyBRdWVzdGlvblRleHRQcm9jZXNzb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBwcm90ZWN0ZWQgdmFyaWFibGVOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5yb3cuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJvdy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnJvdy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DdXN0b21Qcm9jZXNzVGV4dCh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5JbmRleFZhcmlhYmxlTmFtZSkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMucm93LnJvd0luZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYWx1ZVZhcmlhYmxlTmFtZSkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMucm93LnJvd05hbWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJU3VydmV5SW1wbCwgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgc3RhdGljIFJvd1ZhcmlhYmxlTmFtZSA9IFwicm93XCI7XG4gIHB1YmxpYyBzdGF0aWMgT3duZXJWYXJpYWJsZU5hbWUgPSBcInNlbGZcIjtcbiAgcHVibGljIHN0YXRpYyBJbmRleFZhcmlhYmxlTmFtZSA9IFwicm93SW5kZXhcIjtcbiAgcHVibGljIHN0YXRpYyBSb3dWYWx1ZVZhcmlhYmxlTmFtZSA9IFwicm93VmFsdWVcIjtcblxuICBwcml2YXRlIHN0YXRpYyBpZENvdW50ZXI6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgc3RhdGljIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhO1xuICBwcm90ZWN0ZWQgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogTWF0cml4RHJvcGRvd25Sb3dUZXh0UHJvY2Vzc29yO1xuICBwcml2YXRlIGRldGFpbFBhbmVsVmFsdWU6IFBhbmVsTW9kZWwgPSBudWxsO1xuXG4gIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xuICBwdWJsaWMgc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrOiBhbnk7XG4gIHB1YmxpYyBvbkRldGFpbFBhbmVsU2hvd2luZ0NoYW5nZWQ6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXModmFsdWUpO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IoXG4gICAgICB0aGlzLFxuICAgICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuUm93VmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICB0aGlzLnNob3dIaWRlRGV0YWlsUGFuZWxDbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0hpZGVEZXRhaWxQYW5lbCgpO1xuICAgIH07XG4gICAgdGhpcy5pZFZhbHVlID0gTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuZ2V0SWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd05hbWUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yb3dOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmICghcXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgIHJlc3VsdFtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKV0gPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgISFxdWVzdGlvbi5jb21tZW50ICYmXG4gICAgICAgICEhdGhpcy5nZXRTdXJ2ZXkoKSAmJlxuICAgICAgICB0aGlzLmdldFN1cnZleSgpLnN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0W3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF0gPVxuICAgICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5oYXNEZXRhaWxQYW5lbCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRldGFpbFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5kZXRhaWxQYW5lbCA/IHRoaXMuZGV0YWlsUGFuZWwuaWQgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNEZXRhaWxQYW5lbFNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKHRoaXMpIDogZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc0RldGFpbFBhbmVsU2hvd2luZyh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRJc0RldGFpbFBhbmVsU2hvd2luZyh0aGlzLCB2YWwpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLm9uRGV0YWlsUGFuZWxTaG93aW5nQ2hhbmdlZCkge1xuICAgICAgdGhpcy5vbkRldGFpbFBhbmVsU2hvd2luZ0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzaG93SGlkZURldGFpbFBhbmVsKCkge1xuICAgIGlmICh0aGlzLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICB0aGlzLmhpZGVEZXRhaWxQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dEZXRhaWxQYW5lbCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd0RldGFpbFBhbmVsKCkge1xuICAgIHRoaXMuZW5zdXJlRGV0YWlsUGFuZWwoKTtcbiAgICBpZiAoIXRoaXMuZGV0YWlsUGFuZWxWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodHJ1ZSk7XG4gIH1cbiAgcHVibGljIGhpZGVEZXRhaWxQYW5lbChkZXN0cm95UGFuZWw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcoZmFsc2UpO1xuICAgIGlmIChkZXN0cm95UGFuZWwpIHtcbiAgICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZW5zdXJlRGV0YWlsUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMuaXNDcmVhdGluZ0RldGFpbFBhbmVsKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbFZhbHVlIHx8ICF0aGlzLmhhc1BhbmVsIHx8ICF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IHRydWU7XG4gICAgdGhpcy5kZXRhaWxQYW5lbFZhbHVlID0gdGhpcy5kYXRhLmNyZWF0ZVJvd0RldGFpbFBhbmVsKHRoaXMpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmRldGFpbFBhbmVsVmFsdWUucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRSb3dWYWx1ZSh0aGlzLmRhdGEuZ2V0Um93SW5kZXgodGhpcykpO1xuICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gcXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpO1xuICAgICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlW2tleV0pKSB7XG4gICAgICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRldGFpbFBhbmVsVmFsdWUuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICB0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IGZhbHNlO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIGFsbFZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgdmFyIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHsgcm93OiBhbGxWYWx1ZXMgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gYWxsVmFsdWVzKSB7XG4gICAgICB2YWx1ZXNba2V5XSA9IGFsbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSwgcm93OiB0aGlzIH07XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLk93bmVyVmFyaWFibGVOYW1lXSA9IHRoaXMuZGF0YS52YWx1ZTtcbiAgICB9XG4gICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLkluZGV4VmFyaWFibGVOYW1lXSA9IHRoaXMucm93SW5kZXg7XG4gICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhbHVlVmFyaWFibGVOYW1lXSA9IHRoaXMucm93TmFtZTtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZV0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZV0gPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy5jZWxsc1tpXS5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgdGhpcy5kZXRhaWxQYW5lbC5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWUoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlcyh2YWx1ZSk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICB2YXIgdmFsID0gdGhpcy5nZXRDZWxsVmFsdWUodmFsdWUsIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgIHZhciBvbGRDb21tZW50ID0gcXVlc3Rpb24uY29tbWVudDtcbiAgICAgIHZhciBjb21tZW50ID0gISF2YWx1ZVxuICAgICAgICA/IHZhbHVlW3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF1cbiAgICAgICAgOiBcIlwiO1xuICAgICAgaWYgKGNvbW1lbnQgPT0gdW5kZWZpbmVkKSBjb21tZW50ID0gXCJcIjtcbiAgICAgIHF1ZXN0aW9uLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh2YWwpO1xuICAgICAgaWYgKCEhY29tbWVudCB8fCBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMob2xkQ29tbWVudCwgcXVlc3Rpb24uY29tbWVudCkpIHtcbiAgICAgICAgcXVlc3Rpb24udXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoY29tbWVudCk7XG4gICAgICB9XG4gICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZCh2YWwpO1xuICAgIH1cbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICByZXR1cm4gKDxhbnk+c3VydmV5KS5nZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2gsIGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZXNIYXNoW2tleV07XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgcmV0dXJuICEhcXVlc3Rpb24gPyBxdWVzdGlvbi52YWx1ZSA6IG51bGw7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3Q29sdW1uVmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5hbWUsIG5ld0NvbHVtblZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge31cbiAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIHJldHVybiAhIXF1ZXN0aW9uID8gcXVlc3Rpb24uY29tbWVudCA6IFwiXCI7XG4gIH1cbiAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nLCBsb2NOb3RpZmljYXRpb246IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5hbWUsIG5ld1ZhbHVlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQ29yZShuYW1lOiBzdHJpbmcsIG5ld0NvbHVtblZhbHVlOiBhbnksIGlzQ29tbWVudDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvbnNWYWx1ZShuYW1lLCBuZXdDb2x1bW5WYWx1ZSwgaXNDb21tZW50KTtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBjaGFuZ2VkTmFtZSA9IGlzQ29tbWVudCA/IG5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4IDogbmFtZTtcbiAgICB2YXIgY2hhbmdlZFZhbHVlID0gaXNDb21tZW50ID8gdGhpcy5nZXRDb21tZW50KG5hbWUpIDogdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICB2YXIgY2hhbmdlZFF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICB2YXIgY2hhbmdpbmdWYWx1ZSA9IHRoaXMuZGF0YS5vblJvd0NoYW5naW5nKHRoaXMsIGNoYW5nZWROYW1lLCBuZXdWYWx1ZSk7XG4gICAgaWYgKFxuICAgICAgISFjaGFuZ2VkUXVlc3Rpb24gJiZcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoY2hhbmdpbmdWYWx1ZSwgY2hhbmdlZFZhbHVlKVxuICAgICkge1xuICAgICAgaWYgKGlzQ29tbWVudCkge1xuICAgICAgICBjaGFuZ2VkUXVlc3Rpb24uY29tbWVudCA9IGNoYW5naW5nVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFuZ2VkUXVlc3Rpb24udmFsdWUgPSBjaGFuZ2luZ1ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZGF0YS5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nICYmXG4gICAgICAgIHRoaXMuaGFzUXVlc3RvbkVycm9yKGNoYW5nZWRRdWVzdGlvbilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdGhpcy5kYXRhLm9uUm93Q2hhbmdlZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgY2hhbmdlZE5hbWUsXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICBuZXdDb2x1bW5WYWx1ZSA9PSBudWxsICYmICFjaGFuZ2VkUXVlc3Rpb25cbiAgICAgICk7XG4gICAgICB0aGlzLm9uQW55VmFsdWVDaGFuZ2VkKE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvbnNWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3Q29sdW1uVmFsdWU6IGFueSxcbiAgICBpc0NvbW1lbnQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmRldGFpbFBhbmVsKSByZXR1cm47XG4gICAgdmFyIGNvbFF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5Q29sdW1uTmFtZShuYW1lKTtcbiAgICB2YXIgZGV0YWlsUXVlc3Rpb24gPSB0aGlzLmRldGFpbFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIGlmICghY29sUXVlc3Rpb24gfHwgIWRldGFpbFF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIGlzQ29sUXVlc3Rpb24gPSBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoXG4gICAgICBuZXdDb2x1bW5WYWx1ZSxcbiAgICAgIGlzQ29tbWVudCA/IGNvbFF1ZXN0aW9uLmNvbW1lbnQgOiBjb2xRdWVzdGlvbi52YWx1ZVxuICAgICk7XG4gICAgdmFyIHF1ZXN0aW9uID0gaXNDb2xRdWVzdGlvbiA/IGRldGFpbFF1ZXN0aW9uIDogY29sUXVlc3Rpb247XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XG4gICAgaWYgKCFpc0NvbW1lbnQpIHtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlID0gbmV3Q29sdW1uVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXN0aW9uLmNvbW1lbnQgPSBuZXdDb2x1bW5WYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNRdWVzdG9uRXJyb3IocXVlc3Rpb246IFF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChcbiAgICAgIHF1ZXN0aW9uLmhhc0Vycm9ycyh0cnVlLCB7XG4gICAgICAgIGlzT25WYWx1ZUNoYW5nZWQ6ICF0aGlzLmRhdGEuaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZyxcbiAgICAgIH0pXG4gICAgKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHF1ZXN0aW9uLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsQnlDb2x1bW5OYW1lKHF1ZXN0aW9uLm5hbWUpO1xuICAgIGlmICghY2VsbCB8fCAhY2VsbC5jb2x1bW4gfHwgIWNlbGwuY29sdW1uLmlzVW5pcXVlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQodGhpcywgcXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgaWYgKHZhbFtrZXldICE9PSB1bmRlZmluZWQgJiYgdmFsW2tleV0gIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlDb2x1bW4oY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuZ2V0Q2VsbEJ5Q29sdW1uKGNvbHVtbik7XG4gICAgcmV0dXJuICEhY2VsbCA/IGNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsQnlDb2x1bW4oY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jZWxsc1tpXS5jb2x1bW4gPT0gY29sdW1uKSByZXR1cm4gdGhpcy5jZWxsc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsQnlDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jZWxsc1tpXS5jb2x1bW4ubmFtZSA9PSBjb2x1bW5OYW1lKSByZXR1cm4gdGhpcy5jZWxsc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuZ2V0Q2VsbEJ5Q29sdW1uTmFtZShjb2x1bW5OYW1lKTtcbiAgICByZXR1cm4gISFjZWxsID8gY2VsbC5xdWVzdGlvbiA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBxdWVzdGlvbnMoKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxRdWVzdGlvbj4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMuY2VsbHNbaV0ucXVlc3Rpb24pO1xuICAgIH1cbiAgICB2YXIgZGV0YWlsUXVlc3Rpb25zID0gISF0aGlzLmRldGFpbFBhbmVsID8gdGhpcy5kZXRhaWxQYW5lbC5xdWVzdGlvbnMgOiBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRldGFpbFF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2goZGV0YWlsUXVlc3Rpb25zW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICByZXR1cm4gISF0aGlzLmRldGFpbFBhbmVsID8gdGhpcy5kZXRhaWxQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uc0J5TmFtZShuYW1lOiBzdHJpbmcpOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIGxldCByZXMgPSBbXTtcbiAgICBsZXQgcSA9IHRoaXMuZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUobmFtZSk7XG4gICAgaWYgKCEhcSkgcmVzLnB1c2gocSk7XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgcSA9IHRoaXMuZGV0YWlsUGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICBpZiAoISFxKSByZXMucHVzaChxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoY29sdW1uTmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgICAgPyB0aGlzLmRhdGEuZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoY29sdW1uTmFtZSwgdGhpcylcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXModmFsOiBhbnkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIHFWYWwgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgcXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocVZhbCwgcXVlc3Rpb24udmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXksIHF1ZXN0aW9uLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGtleSkgJiZcbiAgICAgICAgICBrZXkuaW5kZXhPZihzZXR0aW5ncy5tYXRyaXhUb3RhbFZhbHVlUG9zdEZpeCkgPCAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRMb2NhbGUoKSA6IFwiXCI7XG4gIH1cbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNlbGxzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMuZGV0YWlsUGFuZWwpIHtcbiAgICAgIHRoaXMuZGV0YWlsUGFuZWwubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsQnlDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoIWNlbGwpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUNlbGxPbkNvbHVtbkNoYW5nZWQoY2VsbCwgbmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDZWxsUXVlc3Rpb25PbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IEl0ZW1WYWx1ZSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBvbGRWYWx1ZTogYW55XG4gICkge1xuICAgIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsQnlDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoIWNlbGwpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUNlbGxPbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoXG4gICAgICBjZWxsLFxuICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgb2JqLFxuICAgICAgbmFtZSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgICAgb2xkVmFsdWVcbiAgICApO1xuICB9XG4gIHB1YmxpYyBvblF1ZXN0aW9uUmVhZE9ubHlDaGFuZ2VkKHBhcmVudElzUmVhZE9ubHk6IGJvb2xlYW4pIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5yZWFkT25seSA9IHBhcmVudElzUmVhZE9ubHk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuLFxuICAgIHJlYzogYW55LFxuICAgIHJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnM6ICgpID0+IHZvaWRcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHM7XG4gICAgaWYgKCFjZWxscykgcmV0dXJuIHJlcztcbiAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHF1ZXN0aW9uLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gKGhhc0Vycm9yczogYm9vbGVhbikgPT4ge1xuICAgICAgICByYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICB9O1xuICAgICAgaWYgKCEhcmVjICYmIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlICYmIHF1ZXN0aW9uLmlzRW1wdHkoKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXMgPSBxdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUGFuZWwpIHtcbiAgICAgIHRoaXMuZW5zdXJlRGV0YWlsUGFuZWwoKTtcbiAgICAgIHZhciBwYW5lbEhhc0Vycm9yID0gdGhpcy5kZXRhaWxQYW5lbC5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCBmYWxzZSwgcmVjKTtcbiAgICAgIGlmICghcmVjLmhpZGVFcnJvcmVkUGFuZWwgJiYgcGFuZWxIYXNFcnJvciAmJiBmaXJlQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlYy5pc1NpbmdsZURldGFpbFBhbmVsKSB7XG4gICAgICAgICAgcmVjLmhpZGVFcnJvcmVkUGFuZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgICB9XG4gICAgICByZXMgPSBwYW5lbEhhc0Vycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVDZWxsT25Db2x1bW5DaGFuZ2VkKFxuICAgIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBjZWxsLnF1ZXN0aW9uW25hbWVdID0gbmV3VmFsdWU7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxPbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdmFyIGl0ZW1zID0gY2VsbC5xdWVzdGlvbltwcm9wZXJ0eU5hbWVdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHJldHVybjtcbiAgICB2YXIgdmFsID0gbmFtZSA9PT0gXCJ2YWx1ZVwiID8gb2xkVmFsdWUgOiBvYmpbXCJ2YWx1ZVwiXTtcbiAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybjtcbiAgICBpdGVtW25hbWVdID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkQ2VsbHModmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5kYXRhLmNvbHVtbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcbiAgICAgIGlmICghY29sdW1uLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICB2YXIgY2VsbCA9IHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pO1xuICAgICAgdGhpcy5jZWxscy5wdXNoKGNlbGwpO1xuICAgICAgdmFyIGNlbGxWYWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHZhbHVlLCBjb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgY2VsbC5xdWVzdGlvbi52YWx1ZSA9IGNlbGxWYWx1ZTtcbiAgICAgICAgdmFyIGNvbW1lbnRLZXkgPSBjb2x1bW4ubmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXg7XG4gICAgICAgIGlmICghIXZhbHVlICYmICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZVtjb21tZW50S2V5XSkpIHtcbiAgICAgICAgICBjZWxsLnF1ZXN0aW9uLmNvbW1lbnQgPSB2YWx1ZVtjb21tZW50S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsVmFsdWUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopXG4gICAgICByZXR1cm4gU2VyaWFsaXplci5nZXRPYmpQcm9wZXJ0eVZhbHVlKHRoaXMuZWRpdGluZ09iaiwgbmFtZSk7XG4gICAgcmV0dXJuICEhdmFsdWUgPyB2YWx1ZVtuYW1lXSA6IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XG4gIH1cbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0U3VydmV5KCkgOiBudWxsO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3I7XG4gIH1cbiAgcHVibGljIGdldCByb3dJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRSb3dJbmRleCh0aGlzKSArIDEgOiAtMTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRpbmdPYmooKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ09ialZhbHVlO1xuICB9XG4gIHByaXZhdGUgb25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkOiAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIHByaXZhdGUgZWRpdGluZ09ialZhbHVlOiBCYXNlO1xuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgIHRoaXMuZWRpdGluZ09iai5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUoXG4gICAgICAgIHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkXG4gICAgICApO1xuICAgICAgdGhpcy5lZGl0aW5nT2JqVmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHN1YnNjcmliZVRvQ2hhbmdlcyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuZ2V0VHlwZSB8fCAhdmFsdWUub25Qcm9wZXJ0eUNoYW5nZWQpIHJldHVybjtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZWRpdGluZ09iaikgcmV0dXJuO1xuICAgIHRoaXMuZWRpdGluZ09ialZhbHVlID0gPEJhc2U+dmFsdWU7XG4gICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQgPSAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlT25TZXRWYWx1ZShvcHRpb25zLm5hbWUsIG9wdGlvbnMubmV3VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5lZGl0aW5nT2JqLm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVPblNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIGxldCBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5TmFtZShuYW1lKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSkge1xuICAgIHN1cGVyKGRhdGEsIG51bGwpO1xuICAgIHRoaXMuYnVpbGRDZWxscyhudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duVG90YWxDZWxsKGNvbHVtbiwgdGhpcywgdGhpcy5kYXRhKTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhICYmICF0aGlzLmlzU2V0dGluZ1ZhbHVlKSB7XG4gICAgICB0aGlzLmRhdGEub25Ub3RhbFZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBwcmV2VmFsdWU7XG4gICAgZG8ge1xuICAgICAgcHJldlZhbHVlID0gSGVscGVycy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgY291bnRlcisrO1xuICAgIH0gd2hpbGUgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocHJldlZhbHVlLCB0aGlzLnZhbHVlKSAmJiBjb3VudGVyIDwgMyk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUNlbGxPbkNvbHVtbkNoYW5nZWQoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgICg8TWF0cml4RHJvcGRvd25Ub3RhbENlbGw+Y2VsbCkudXBkYXRlQ2VsbFF1ZXN0aW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICBwcml2YXRlIHN0YXRpYyBjb3VudGVyID0gMTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgaXRlbVZhbHVlOiBJdGVtVmFsdWU7XG4gIHB1YmxpYyBtaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgbG9jVGl0bGU6IExvY2FsaXphYmxlU3RyaW5nO1xuICBwdWJsaWMgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsO1xuICBwdWJsaWMgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbjtcbiAgcHVibGljIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U7XG4gIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb247XG4gIHB1YmxpYyBpc1JlbW92ZVJvdzogYm9vbGVhbjtcbiAgcHVibGljIGNob2ljZUluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBtYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG4gIHB1YmxpYyByZXF1aXJlZFRleHQ6IHN0cmluZztcbiAgcHVibGljIGlzRW1wdHk6IGJvb2xlYW47XG4gIHB1YmxpYyBjb2xTcGFuczogbnVtYmVyID0gMTtcbiAgcHVibGljIHBhbmVsOiBQYW5lbE1vZGVsO1xuICBwdWJsaWMgaXNTaG93SGlkZURldGFpbDogYm9vbGVhbjtcbiAgcHVibGljIGlzQWN0aW9uc0NlbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwuY291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubG9jVGl0bGU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnBhbmVsO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0Vycm9yT25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwidG9wXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0Vycm9yT25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwiYm90dG9tXCIpO1xuICB9XG4gIHByaXZhdGUgc2hvd0Vycm9yT25Db3JlKGxvY2F0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5nZXRTaG93RXJyb3JMb2NhdGlvbigpID09IGxvY2F0aW9uICYmXG4gICAgICAoIXRoaXMuaXNDaG9pY2UgfHwgdGhpcy5pc0ZpcnN0Q2hvaWNlKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTaG93RXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhhc1F1ZXN0aW9uID8gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBpdGVtKHZhbDogSXRlbVZhbHVlKSB7XG4gICAgdGhpcy5pdGVtVmFsdWUgPSB2YWw7XG4gICAgaWYgKCEhdmFsKSB7XG4gICAgICB2YWwuaGlkZUNhcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ2hvaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNob2ljZVZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDaG9pY2UgPyB0aGlzLml0ZW0udmFsdWUgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Nob2ljZSAmJiB0aGlzLnF1ZXN0aW9uLmdldFR5cGUoKSA9PSBcImNoZWNrYm94XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0ZpcnN0Q2hvaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNob2ljZUluZGV4ID09PSAwO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xhc3NOYW1lICtcbiAgICAgICh0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwID8gXCIgXCIgKyB0aGlzLnF1ZXN0aW9uLmNzc0Vycm9yIDogXCJcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaGVhZGVycygpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY2VsbCAmJlxuICAgICAgdGhpcy5jZWxsLmNvbHVtbiAmJlxuICAgICAgdGhpcy5jZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1uc1xuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVGl0bGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCB8fCBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGVGaW5hbENsYXNzTmFtZShtYXRyaXhDc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgaWYgKCEhcXVlc3Rpb25Dc3MpIHtcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICBpZiAoISFxdWVzdGlvbkNzcy5pdGVtVmFsdWUpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgcXVlc3Rpb25Dc3MuaXRlbVZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb25Dc3MuYXNDZWxsKSB7XG4gICAgICAgIGlmICghIWNsYXNzTmFtZSkgY2xhc3NOYW1lICs9IFwiXCI7XG4gICAgICAgIGNsYXNzTmFtZSArPSBxdWVzdGlvbkNzcy5hc0NlbGw7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2xhc3NOYW1lICYmICEhbWF0cml4Q3NzQ2xhc3Nlcykge1xuICAgICAgY2xhc3NOYW1lID0gbWF0cml4Q3NzQ2xhc3Nlcy5jZWxsO1xuICAgIH1cbiAgICBjbGFzc05hbWUgKz1cbiAgICAgIHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBcIiBcIiArIHF1ZXN0aW9uQ3NzLmhhc0Vycm9yIDogXCJcIjtcblxuICAgIGlmICh0aGlzLmlzQ2hvaWNlKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBtYXRyaXhDc3NDbGFzc2VzLmNob2ljZUNlbGw7XG4gICAgfVxuICAgIC8vJ3RleHQtYWxpZ24nOiAkZGF0YS5pc0Nob2ljZSA/ICdjZW50ZXInOiAnJ1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gIHB1YmxpYyBpc0RldGFpbFJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgY291bnRlciA9IDE7XG4gIHByaXZhdGUgaWRWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgY2VsbHM6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGw+ID0gW107XG4gIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlkVmFsdWUgPSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cuY291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIGhlYWRlclJvd1ZhbHVlOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c7XG4gIHByaXZhdGUgZm9vdGVyUm93VmFsdWU6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcHJpdmF0ZSBoYXNSZW1vdmVSb3dzVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgcm93c0FjdGlvbnM6IEFycmF5PEFycmF5PElBY3Rpb24+PjtcbiAgcHJpdmF0ZSBjc3NDbGFzc2VzOiBhbnk7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgbWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93VGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dUYWJsZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dIZWFkZXJcIik7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dBZGRSb3dPblRvcFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dBZGRSb3dPbkJvdHRvbVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5oYXNGb290ZXIgJiYgdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZm9vdGVyUm93O1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWU7XG4gIH1cbiAgcHVibGljIGlzUmVxdWlyZVJlc2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc1JlbW92ZVJvd3MgIT0gdGhpcy5tYXRyaXguY2FuUmVtb3ZlUm93cyB8fFxuICAgICAgIXRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBoZWFkZXJSb3coKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJSb3dWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZvb3RlclJvdygpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHJldHVybiB0aGlzLmZvb3RlclJvd1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGQoKSB7XG4gICAgdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWUgPSB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3dzO1xuICAgIC8vYnVpbGQgcm93cyBub3dcbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgIHRoaXMuY3NzQ2xhc3NlcyA9IHRoaXMubWF0cml4LmNzc0NsYXNzZXM7XG4gICAgdGhpcy5idWlsZFJvd3NBY3Rpb25zKCk7XG4gICAgdGhpcy5idWlsZEhlYWRlcigpO1xuICAgIHRoaXMuYnVpbGRSb3dzKCk7XG4gICAgdGhpcy5idWlsZEZvb3RlcigpO1xuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpIHtcbiAgICB2YXIgc2hvd1RhYmxlID1cbiAgICAgIHRoaXMucm93cy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLm1hdHJpeC5pc0Rlc2lnbk1vZGUgfHxcbiAgICAgICF0aGlzLm1hdHJpeC5nZXRTaG93Q29sdW1uc0lmRW1wdHkoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGFibGVcIiwgc2hvd1RhYmxlKTtcbiAgICB2YXIgc2hvd0FkZFJvdyA9IHRoaXMubWF0cml4LmNhbkFkZFJvdyAmJiBzaG93VGFibGU7XG4gICAgdmFyIHNob3dBZGRSb3dPblRvcCA9IHNob3dBZGRSb3c7XG4gICAgdmFyIHNob3dBZGRSb3dPbkJvdHRvbSA9IHNob3dBZGRSb3c7XG4gICAgaWYgKHNob3dBZGRSb3dPblRvcCkge1xuICAgICAgaWYgKHRoaXMubWF0cml4LmdldEFkZFJvd0xvY2F0aW9uKCkgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHNob3dBZGRSb3dPblRvcCA9IHRoaXMubWF0cml4LmNvbHVtbkxheW91dCA9PT0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvd0FkZFJvd09uVG9wID0gdGhpcy5tYXRyaXguZ2V0QWRkUm93TG9jYXRpb24oKSAhPT0gXCJib3R0b21cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3dBZGRSb3dPbkJvdHRvbSAmJiB0aGlzLm1hdHJpeC5nZXRBZGRSb3dMb2NhdGlvbigpICE9PSBcInRvcEJvdHRvbVwiKSB7XG4gICAgICBzaG93QWRkUm93T25Cb3R0b20gPSAhc2hvd0FkZFJvd09uVG9wO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Ub3BcIiwgc2hvd0FkZFJvd09uVG9wKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Cb3R0b21cIiwgc2hvd0FkZFJvd09uQm90dG9tKTtcbiAgfVxuICBwdWJsaWMgb25BZGRlZFJvdygpIHtcbiAgICBpZiAodGhpcy5nZXRSZW5kZXJlZERhdGFSb3dDb3VudCgpID49IHRoaXMubWF0cml4LnZpc2libGVSb3dzLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcm93ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3NbdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5yb3dzQWN0aW9ucy5wdXNoKHRoaXMuYnVpbGRSb3dBY3Rpb25zKHJvdykpO1xuICAgIHRoaXMuYWRkSG9yaXpvbnRhbFJvdyhcbiAgICAgIHRoaXMucm93cyxcbiAgICAgIHJvdyxcbiAgICAgIHRoaXMubWF0cml4LnZpc2libGVSb3dzLmxlbmd0aCA9PSAxICYmICF0aGlzLm1hdHJpeC5zaG93SGVhZGVyXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVuZGVyZWREYXRhUm93Q291bnQoKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLnJvd3NbaV0uaXNEZXRhaWxSb3cpIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBvblJlbW92ZWRSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSkge1xuICAgIHZhciByb3dJbmRleCA9IHRoaXMuZ2V0UmVuZGVyZWRSb3dJbmRleChyb3cpO1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLnJvd3NBY3Rpb25zLnNwbGljZShyb3dJbmRleCwgMSk7XG4gICAgdmFyIHJlbW92ZUNvdW50ID0gMTtcbiAgICBpZiAoXG4gICAgICByb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmXG4gICAgICB0aGlzLnJvd3Nbcm93SW5kZXggKyAxXS5pc0RldGFpbFJvd1xuICAgICkge1xuICAgICAgcmVtb3ZlQ291bnQrKztcbiAgICB9XG4gICAgdGhpcy5yb3dzLnNwbGljZShyb3dJbmRleCwgcmVtb3ZlQ291bnQpO1xuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gIH1cbiAgcHVibGljIG9uRGV0YWlsUGFuZWxDaGFuZ2VWaXNpYmlsaXR5KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgaXNTaG93aW5nOiBib29sZWFuXG4gICkge1xuICAgIHZhciByb3dJbmRleCA9IHRoaXMuZ2V0UmVuZGVyZWRSb3dJbmRleChyb3cpO1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybjtcbiAgICB2YXIgcGFuZWxSb3dJbmRleCA9XG4gICAgICByb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmIHRoaXMucm93c1tyb3dJbmRleCArIDFdLmlzRGV0YWlsUm93XG4gICAgICAgID8gcm93SW5kZXggKyAxXG4gICAgICAgIDogLTE7XG4gICAgaWYgKChpc1Nob3dpbmcgJiYgcGFuZWxSb3dJbmRleCA+IC0xKSB8fCAoIWlzU2hvd2luZyAmJiBwYW5lbFJvd0luZGV4IDwgMCkpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGlzU2hvd2luZykge1xuICAgICAgdmFyIGRldGFpbFJvdyA9IHRoaXMuY3JlYXRlRGV0YWlsUGFuZWxSb3cocm93LCB0aGlzLnJvd3Nbcm93SW5kZXhdKTtcbiAgICAgIHRoaXMucm93cy5zcGxpY2Uocm93SW5kZXggKyAxLCAwLCBkZXRhaWxSb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKHBhbmVsUm93SW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFJlbmRlcmVkUm93SW5kZXgocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IG51bWJlciB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnJvd3NbaV0ucm93ID09IHJvdykgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGRSb3dzQWN0aW9ucygpIHtcbiAgICB0aGlzLnJvd3NBY3Rpb25zID0gW107XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucm93c0FjdGlvbnMucHVzaCh0aGlzLmJ1aWxkUm93QWN0aW9ucyhyb3dzW2ldKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZEhlYWRlcigpIHtcbiAgICB2YXIgY29sSGVhZGVycyA9XG4gICAgICB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwgJiYgdGhpcy5tYXRyaXguc2hvd0hlYWRlcjtcbiAgICB2YXIgaXNTaG93biA9XG4gICAgICBjb2xIZWFkZXJzIHx8XG4gICAgICAodGhpcy5tYXRyaXguaGFzUm93VGV4dCAmJiAhdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIsIGlzU2hvd24pO1xuICAgIGlmICghaXNTaG93bikgcmV0dXJuO1xuICAgIHRoaXMuaGVhZGVyUm93VmFsdWUgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcInN0YXJ0XCIpKSB7XG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0ICYmIHRoaXMubWF0cml4LnNob3dIZWFkZXIpIHtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1hdHJpeC52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICAgIGlmICghY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVDb2x1bW5zSGVhZGVyKGNvbHVtbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwoY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlVGV4dENlbGwocm93c1tpXS5sb2NUZXh0KSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXRyaXguaGFzRm9vdGVyKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2goXG4gICAgICAgICAgdGhpcy5jcmVhdGVUZXh0Q2VsbCh0aGlzLm1hdHJpeC5nZXRGb290ZXJUZXh0KCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkRm9vdGVyKCkge1xuICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSByZXR1cm47XG4gICAgdGhpcy5mb290ZXJSb3dWYWx1ZSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwic3RhcnRcIikpIHtcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQpIHtcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGNlbGxzID0gdGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlQ29sdW1uc0Zvb3Rlcih0aGlzLmZvb3RlclJvdywgY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRWRpdENlbGwoY2VsbCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwiZW5kXCIpKSB7XG4gICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZFJvd3MoKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWxcbiAgICAgID8gdGhpcy5idWlsZEhvcml6b250YWxSb3dzKClcbiAgICAgIDogdGhpcy5idWlsZFZlcnRpY2FsUm93cygpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgcm93cyk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBoYXNBY3Rpb25DZWxsSW5Sb3dzKGxvY2F0aW9uOiBcInN0YXJ0XCIgfCBcImVuZFwiKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZ2V0Um93QWN0aW9ucyhpLCBsb2NhdGlvbikpKSB7XG4gICAgICAgICAgdGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzW2xvY2F0aW9uXSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl07XG4gIH1cbiAgcHJpdmF0ZSBjYW5SZW1vdmVSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3cocm93KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkSG9yaXpvbnRhbFJvd3MoKTogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PiB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICB2YXIgcmVuZGVyZWRSb3dzOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFkZEhvcml6b250YWxSb3coXG4gICAgICAgIHJlbmRlcmVkUm93cyxcbiAgICAgICAgcm93c1tpXSxcbiAgICAgICAgaSA9PSAwICYmICF0aGlzLm1hdHJpeC5zaG93SGVhZGVyXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRSb3dzO1xuICB9XG4gIHByaXZhdGUgYWRkSG9yaXpvbnRhbFJvdyhcbiAgICByZW5kZXJlZFJvd3M6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdz4sXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICB1c2VBc0hlYWRlcjogYm9vbGVhblxuICApIHtcbiAgICB2YXIgcmVuZGVyZWRSb3cgPSB0aGlzLmNyZWF0ZUhvcml6b250YWxSb3cocm93LCB1c2VBc0hlYWRlcik7XG4gICAgcmVuZGVyZWRSb3cucm93ID0gcm93O1xuICAgIHJlbmRlcmVkUm93cy5wdXNoKHJlbmRlcmVkUm93KTtcbiAgICBpZiAocm93LmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICByZW5kZXJlZFJvd3MucHVzaCh0aGlzLmNyZWF0ZURldGFpbFBhbmVsUm93KHJvdywgcmVuZGVyZWRSb3cpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRSb3dBY3Rpb25zQ2VsbChyb3dJbmRleDogbnVtYmVyLCBsb2NhdGlvbjogXCJzdGFydFwiIHwgXCJlbmRcIikge1xuICAgIGNvbnN0IHJvd0FjdGlvbnMgPSB0aGlzLmdldFJvd0FjdGlvbnMocm93SW5kZXgsIGxvY2F0aW9uKTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHJvd0FjdGlvbnMpKSB7XG4gICAgICBjb25zdCBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICAgIGNvbnN0IGFjdGlvbkNvbnRhaW5lciA9IG5ldyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcigpO1xuICAgICAgYWN0aW9uQ29udGFpbmVyLnNldEl0ZW1zKHJvd0FjdGlvbnMpO1xuXG4gICAgICBjb25zdCBpdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKGFjdGlvbkNvbnRhaW5lcik7XG4gICAgICBjZWxsLml0ZW0gPSBpdGVtVmFsdWU7XG4gICAgICBjZWxsLmlzQWN0aW9uc0NlbGwgPSB0cnVlO1xuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuYWN0aW9uc0NlbGw7XG4gICAgICBjZWxsLnJvdyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzW3Jvd0luZGV4XTtcbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldFJvd0FjdGlvbnMocm93SW5kZXg6IG51bWJlciwgbG9jYXRpb246IFwic3RhcnRcIiB8IFwiZW5kXCIpIHtcbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMucm93c0FjdGlvbnNbcm93SW5kZXhdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhY3Rpb25zKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIWFjdGlvbi5sb2NhdGlvbikge1xuICAgICAgICBhY3Rpb24ubG9jYXRpb24gPSBcInN0YXJ0XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWN0aW9uLmxvY2F0aW9uID09PSBsb2NhdGlvbjtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkUm93QWN0aW9ucyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogQXJyYXk8SUFjdGlvbj4ge1xuICAgIHZhciBhY3Rpb25zOiBBcnJheTxJQWN0aW9uPiA9IFtdO1xuICAgIHRoaXMuc2V0RGVmYXVsdFJvd0FjdGlvbnMocm93LCBhY3Rpb25zKTtcbiAgICBpZiAoISF0aGlzLm1hdHJpeC5zdXJ2ZXkpIHtcbiAgICAgIGFjdGlvbnMgPSB0aGlzLm1hdHJpeC5zdXJ2ZXkuZ2V0VXBkYXRlZE1hdHJpeFJvd0FjdGlvbnMoXG4gICAgICAgIHRoaXMubWF0cml4LFxuICAgICAgICByb3csXG4gICAgICAgIGFjdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0Um93QWN0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIGlmICh0aGlzLmhhc1JlbW92ZVJvd3MgJiYgdGhpcy5jYW5SZW1vdmVSb3cocm93KSkge1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICBuZXcgQWN0aW9uKHtcbiAgICAgICAgICBpZDogXCJyZW1vdmUtcm93XCIsXG4gICAgICAgICAgbG9jYXRpb246IFwiZW5kXCIsXG4gICAgICAgICAgZW5hYmxlZDogIXRoaXMubWF0cml4LmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBjb21wb25lbnQ6IFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgICAgICAgICBkYXRhOiB7IHJvdzogcm93LCBxdWVzdGlvbjogdGhpcy5tYXRyaXggfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJvdy5oYXNQYW5lbCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICBuZXcgQWN0aW9uKHtcbiAgICAgICAgICBpZDogXCJzaG93LWRldGFpbFwiLFxuICAgICAgICAgIGxvY2F0aW9uOiBcInN0YXJ0XCIsXG4gICAgICAgICAgY29tcG9uZW50OiBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gICAgICAgICAgZGF0YTogeyByb3c6IHJvdywgcXVlc3Rpb246IHRoaXMubWF0cml4IH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZUhvcml6b250YWxSb3coXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICB1c2VBc0hlYWRlcjogYm9vbGVhblxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgdGhpcy5hZGRSb3dBY3Rpb25zQ2VsbChyb3csIHJlcywgXCJzdGFydFwiKTtcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCkge1xuICAgICAgdmFyIHJlbmRlcmVkQ2VsbCA9IHRoaXMuY3JlYXRlVGV4dENlbGwocm93LmxvY1RleHQpO1xuICAgICAgcmVuZGVyZWRDZWxsLnJvdyA9IHJvdztcbiAgICAgIHJlcy5jZWxscy5wdXNoKHJlbmRlcmVkQ2VsbCk7XG4gICAgICBpZiAodXNlQXNIZWFkZXIpIHtcbiAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsV2lkdGgobnVsbCwgcmVuZGVyZWRDZWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3cuaGFzUGFuZWwgJiYgISF0aGlzLmNzc0NsYXNzZXMuZGV0YWlsUm93VGV4dCkge1xuICAgICAgICBpZiAoISFyZW5kZXJlZENlbGwuY2xhc3NOYW1lKSByZW5kZXJlZENlbGwuY2xhc3NOYW1lICs9IFwiIFwiO1xuICAgICAgICByZW5kZXJlZENlbGwuY2xhc3NOYW1lICs9IHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxSb3dUZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHNbaV07XG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKHJlcywgY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVuZGVyZWRDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsKTtcbiAgICAgICAgcmVzLmNlbGxzLnB1c2gocmVuZGVyZWRDZWxsKTtcbiAgICAgICAgaWYgKHVzZUFzSGVhZGVyKSB7XG4gICAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsV2lkdGgoY2VsbC5jb2x1bW4sIHJlbmRlcmVkQ2VsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRSb3dBY3Rpb25zQ2VsbChyb3csIHJlcywgXCJlbmRcIik7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGFkZFJvd0FjdGlvbnNDZWxsKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcmVuZGVyZWRSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBsb2NhdGlvbjogXCJzdGFydFwiIHwgXCJlbmRcIlxuICApIHtcbiAgICB2YXIgcm93SW5kZXggPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhsb2NhdGlvbikpIHtcbiAgICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmdldFJvd0FjdGlvbnNDZWxsKHJvd0luZGV4LCBsb2NhdGlvbik7XG4gICAgICBpZiAoISFhY3Rpb25zKSB7XG4gICAgICAgIHJlbmRlcmVkUm93LmNlbGxzLnB1c2goYWN0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgICAgIGNlbGwuaXNFbXB0eSA9IHRydWU7XG4gICAgICAgIHJlbmRlcmVkUm93LmNlbGxzLnB1c2goY2VsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlRGV0YWlsUGFuZWxSb3coXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICByZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICByZXMucm93ID0gcm93O1xuICAgIHJlcy5jbGFzc05hbWUgKz0gdGhpcy5jc3NDbGFzc2VzLmRldGFpbFJvdztcbiAgICByZXMuaXNEZXRhaWxSb3cgPSB0cnVlO1xuICAgIHZhciBidXR0b25DZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCkge1xuICAgICAgYnV0dG9uQ2VsbC5jb2xTcGFucyA9IDI7XG4gICAgfVxuICAgIGJ1dHRvbkNlbGwuaXNFbXB0eSA9IHRydWU7XG4gICAgcmVzLmNlbGxzLnB1c2goYnV0dG9uQ2VsbCk7XG4gICAgdmFyIGFjdGlvbnNDZWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwiZW5kXCIpKSB7XG4gICAgICBhY3Rpb25zQ2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgICBhY3Rpb25zQ2VsbC5pc0VtcHR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgIGNlbGwucGFuZWwgPSByb3cuZGV0YWlsUGFuZWw7XG4gICAgY2VsbC5jb2xTcGFucyA9XG4gICAgICByZW5kZXJlZFJvdy5jZWxscy5sZW5ndGggLVxuICAgICAgYnV0dG9uQ2VsbC5jb2xTcGFucyAtXG4gICAgICAoISFhY3Rpb25zQ2VsbCA/IGFjdGlvbnNDZWxsLmNvbFNwYW5zIDogMCk7XG4gICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuZGV0YWlsUGFuZWxDZWxsO1xuICAgIHJlcy5jZWxscy5wdXNoKGNlbGwpO1xuICAgIGlmICghIWFjdGlvbnNDZWxsKSB7XG4gICAgICByZXMuY2VsbHMucHVzaChhY3Rpb25zQ2VsbCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLm1hdHJpeC5vbkNyZWF0ZURldGFpbFBhbmVsUmVuZGVyZWRSb3dDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICB0aGlzLm1hdHJpeC5vbkNyZWF0ZURldGFpbFBhbmVsUmVuZGVyZWRSb3dDYWxsYmFjayhyZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFZlcnRpY2FsUm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMubWF0cml4LmNvbHVtbnM7XG4gICAgdmFyIHJlbmRlcmVkUm93cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLmlzVmlzaWJsZSAmJiBjb2wuaGFzVmlzaWJsZUNlbGwpIHtcbiAgICAgICAgaWYgKGNvbC5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVWZXJ0aWNhbFJvd3MocmVuZGVyZWRSb3dzLCBjb2wsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlVmVydGljYWxSb3coY29sLCBpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcImVuZFwiKSkge1xuICAgICAgcmVuZGVyZWRSb3dzLnB1c2godGhpcy5jcmVhdGVFbmRWZXJ0aWNhbEFjdGlvblJvdygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlcmVkUm93cztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlVmVydGljYWxSb3dzKFxuICAgIHJlbmRlcmVkUm93czogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PixcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIGluZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVuZGVyZWRSb3dzLnB1c2godGhpcy5jcmVhdGVWZXJ0aWNhbFJvdyhjb2x1bW4sIGluZGV4LCBjaG9pY2VzW2ldLCBpKSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlVmVydGljYWxSb3coXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNob2ljZTogSXRlbVZhbHVlID0gbnVsbCxcbiAgICBjaG9pY2VJbmRleDogbnVtYmVyID0gLTFcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdygpO1xuICAgIGlmICh0aGlzLm1hdHJpeC5zaG93SGVhZGVyKSB7XG4gICAgICB2YXIgbFRpdGxlID0gISFjaG9pY2UgPyBjaG9pY2UubG9jVGV4dCA6IGNvbHVtbi5sb2NUaXRsZTtcbiAgICAgIHZhciBoQ2VsbCA9IHRoaXMuY3JlYXRlVGV4dENlbGwobFRpdGxlKTtcbiAgICAgIGhDZWxsLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIGlmICghY2hvaWNlKSB7XG4gICAgICAgIHRoaXMuc2V0UmVxdXJpZWRUb0hlYWRlckNlbGwoY29sdW1uLCBoQ2VsbCk7XG4gICAgICB9XG4gICAgICByZXMuY2VsbHMucHVzaChoQ2VsbCk7XG4gICAgfVxuICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgckNob2ljZSA9IGNob2ljZTtcbiAgICAgIHZhciByQ2hvaWNlSW5kZXggPSBjaG9pY2VJbmRleCA+PSAwID8gY2hvaWNlSW5kZXggOiBpO1xuICAgICAgdmFyIGNlbGwgPSByb3dzW2ldLmNlbGxzW2luZGV4XTtcbiAgICAgIHZhciB2aXNDaG9pY2VzID0gISFjaG9pY2UgPyBjZWxsLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCEhdmlzQ2hvaWNlcyAmJiByQ2hvaWNlSW5kZXggPCB2aXNDaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICByQ2hvaWNlID0gdmlzQ2hvaWNlc1tyQ2hvaWNlSW5kZXhdO1xuICAgICAgfVxuICAgICAgdmFyIHJDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsLCByQ2hvaWNlKTtcbiAgICAgIHJDZWxsLml0ZW0gPSByQ2hvaWNlO1xuICAgICAgckNlbGwuY2hvaWNlSW5kZXggPSByQ2hvaWNlSW5kZXg7XG4gICAgICByZXMuY2VsbHMucHVzaChyQ2VsbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNUb3RhbCkge1xuICAgICAgcmVzLmNlbGxzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlRWRpdENlbGwodGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzW2luZGV4XSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUVuZFZlcnRpY2FsQWN0aW9uUm93KCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVUZXh0Q2VsbChudWxsKSk7XG4gICAgfVxuICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmdldFJvd0FjdGlvbnNDZWxsKGksIFwiZW5kXCIpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1RvdGFsKSB7XG4gICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZVRleHRDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKFxuICAgIHJSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwsXG4gICAgaXNGb290ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB2YXIgY2hvaWNlcyA9IGlzRm9vdGVyXG4gICAgICA/IHRoaXMuZ2V0TXVsdGlwbGVDb2x1bW5DaG9pY2VzKGNlbGwuY29sdW1uKVxuICAgICAgOiBjZWxsLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsLCAhaXNGb290ZXIgPyBjaG9pY2VzW2ldIDogdW5kZWZpbmVkKTtcbiAgICAgIGlmICghaXNGb290ZXIpIHtcbiAgICAgICAgLy9yQ2VsbC5pdGVtID0gY2hvaWNlc1tpXTtcbiAgICAgICAgckNlbGwuY2hvaWNlSW5kZXggPSBpO1xuICAgICAgfVxuICAgICAgclJvdy5jZWxscy5wdXNoKHJDZWxsKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0Q2VsbChcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwsXG4gICAgY2hvaWNlSXRlbTogYW55ID0gdW5kZWZpbmVkXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgIHJlcy5jZWxsID0gY2VsbDtcbiAgICByZXMucm93ID0gY2VsbC5yb3c7XG4gICAgcmVzLnF1ZXN0aW9uID0gY2VsbC5xdWVzdGlvbjtcbiAgICByZXMubWF0cml4ID0gdGhpcy5tYXRyaXg7XG4gICAgcmVzLml0ZW0gPSBjaG9pY2VJdGVtO1xuXG4gICAgcmVzLmNsYXNzTmFtZSA9IHJlcy5jYWxjdWxhdGVGaW5hbENsYXNzTmFtZSh0aGlzLmNzc0NsYXNzZXMpO1xuICAgIC8vcmVzLmNzcyA9IHJlcy5jYWxjQ3NzKHRoaXMuY3NzQ2xhc3Nlcy5jZWxsKTtcblxuICAgIC8vIHZhciBxdWVzdGlvbkNzcyA9IGNlbGwucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICAvLyB2YXIgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAvLyBpZiAoISFxdWVzdGlvbkNzcykge1xuICAgIC8vICAgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAvLyAgIGlmICghIXF1ZXN0aW9uQ3NzLml0ZW1WYWx1ZSkge1xuICAgIC8vICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBxdWVzdGlvbkNzcy5pdGVtVmFsdWU7XG4gICAgLy8gICB9XG4gICAgLy8gICBpZiAoISFxdWVzdGlvbkNzcy5hc0NlbGwpIHtcbiAgICAvLyAgICAgaWYgKCEhY2xhc3NOYW1lKSBjbGFzc05hbWUgKz0gXCJcIjtcbiAgICAvLyAgICAgY2xhc3NOYW1lICs9IHF1ZXN0aW9uQ3NzLmFzQ2VsbDtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgLy8gaWYgKCFjbGFzc05hbWUgJiYgISF0aGlzLmNzc0NsYXNzZXMuY2VsbCkge1xuICAgIC8vICAgY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmNlbGw7XG4gICAgLy8gfVxuICAgIC8vcmVzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTXV0bGlwbGVDb2x1bW5zRm9vdGVyKFxuICAgIHJSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGxcbiAgKSB7XG4gICAgdGhpcy5jcmVhdGVNdXRsaXBsZUVkaXRDZWxscyhyUm93LCBjZWxsLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlQ29sdW1uc0hlYWRlcihjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGNob2ljZXNbaV0ubG9jVGV4dCk7XG4gICAgICB0aGlzLnNldEhlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2goY2VsbCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0TXVsdGlwbGVDb2x1bW5DaG9pY2VzKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBhbnkge1xuICAgIHZhciBjaG9pY2VzID0gY29sdW1uLnRlbXBsYXRlUXVlc3Rpb24uY2hvaWNlcztcbiAgICBpZiAoISFjaG9pY2VzICYmIEFycmF5LmlzQXJyYXkoY2hvaWNlcykgJiYgY2hvaWNlcy5sZW5ndGggPT0gMClcbiAgICAgIHJldHVybiB0aGlzLm1hdHJpeC5jaG9pY2VzO1xuICAgIGNob2ljZXMgPSBjb2x1bW4udGVtcGxhdGVRdWVzdGlvbi52aXNpYmxlQ2hvaWNlcztcbiAgICBpZiAoIWNob2ljZXMgfHwgIUFycmF5LmlzQXJyYXkoY2hvaWNlcykpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjaG9pY2VzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlSGVhZGVyQ2VsbChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHZhciBjZWxsID0gdGhpcy5jcmVhdGVUZXh0Q2VsbCghIWNvbHVtbiA/IGNvbHVtbi5sb2NUaXRsZSA6IG51bGwpO1xuICAgIGNlbGwuY29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMuc2V0SGVhZGVyQ2VsbChjb2x1bW4sIGNlbGwpO1xuICAgIGlmICh0aGlzLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbCkge1xuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIZWFkZXJDZWxsKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFxuICApIHtcbiAgICB0aGlzLnNldEhlYWRlckNlbGxXaWR0aChjb2x1bW4sIGNlbGwpO1xuICAgIHRoaXMuc2V0UmVxdXJpZWRUb0hlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgfVxuICBwcml2YXRlIHNldEhlYWRlckNlbGxXaWR0aChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcbiAgKSB7XG4gICAgY2VsbC5taW5XaWR0aCA9IGNvbHVtbiAhPSBudWxsID8gdGhpcy5tYXRyaXguZ2V0Q29sdW1uV2lkdGgoY29sdW1uKSA6IFwiXCI7XG4gICAgY2VsbC53aWR0aCA9IGNvbHVtbiAhPSBudWxsID8gY29sdW1uLndpZHRoIDogdGhpcy5tYXRyaXguZ2V0Um93VGl0bGVXaWR0aCgpO1xuICB9XG4gIHByaXZhdGUgc2V0UmVxdXJpZWRUb0hlYWRlckNlbGwoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsXG4gICkge1xuICAgIGlmICghIWNvbHVtbiAmJiBjb2x1bW4uaXNSZXF1aXJlZCAmJiB0aGlzLm1hdHJpeC5zdXJ2ZXkpIHtcbiAgICAgIGNlbGwucmVxdWlyZWRUZXh0ID0gdGhpcy5tYXRyaXguc3VydmV5LnJlcXVpcmVkVGV4dDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVSZW1vdmVSb3dDZWxsKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgcmVzLnJvdyA9IHJvdztcbiAgICByZXMuaXNSZW1vdmVSb3cgPSB0aGlzLmNhblJlbW92ZVJvdyhyb3cpO1xuICAgIGlmICghIXRoaXMuY3NzQ2xhc3Nlcy5jZWxsKSB7XG4gICAgICByZXMuY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmNlbGw7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVUZXh0Q2VsbChcbiAgICBsb2NUaXRsZTogTG9jYWxpemFibGVTdHJpbmdcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgIGNlbGwubG9jVGl0bGUgPSBsb2NUaXRsZTtcbiAgICBpZiAoISF0aGlzLmNzc0NsYXNzZXMuY2VsbCkge1xuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuY2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIG1hdHJpeCBkcm9wZG93biBhbmQgbWF0cml4IGR5bmFtaWMgcXVlc3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBleHRlbmRzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPFxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gID5cbiAgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgZGVmYXVsdENlbGxUeXBlKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgZGVmYXVsdENlbGxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgYWRkRGVmYXVsdENvbHVtbnMobWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgdmFyIGNvbE5hbWVzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkrKykgbWF0cml4LmFkZENvbHVtbihjb2xOYW1lc1tpXSk7XG4gIH1cbiAgcHJpdmF0ZSBkZXRhaWxQYW5lbFZhbHVlOiBQYW5lbE1vZGVsO1xuICBwcm90ZWN0ZWQgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICBjb2x1bW5zQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2s6IChcbiAgICB0YWJsZTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGVcbiAgKSA9PiB2b2lkO1xuICBvbkNlbGxDcmVhdGVkQ2FsbGJhY2s6IChvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIG9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrOiAob3B0aW9uczogYW55KSA9PiB2b2lkO1xuICBvbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2s6IChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSA9PiBib29sZWFuO1xuICBvbkNyZWF0ZURldGFpbFBhbmVsQ2FsbGJhY2s6IChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsXG4gICkgPT4gdm9pZDtcbiAgb25DcmVhdGVEZXRhaWxQYW5lbFJlbmRlcmVkUm93Q2FsbGJhY2s6IChcbiAgICByZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XG4gICkgPT4gdm9pZDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJjb2x1bW5zXCIsXG4gICAgICAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0uY29sT3duZXIgPSB0aGlzO1xuICAgICAgfSxcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgaXRlbS5jb2xPd25lciA9IG51bGw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNob2ljZXNcIik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHRoaXMpO1xuICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3RGV0YWlsUGFuZWwoKTtcbiAgICB0aGlzLmRldGFpbFBhbmVsLnNlbGVjdGVkRWxlbWVudEluRGVzaWduID0gdGhpcztcbiAgICB0aGlzLmRldGFpbFBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwiY29sdW1uc1wiLFxuICAgICAgKG5ld0NvbHVtbnM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNJbmRleGVzKG5ld0NvbHVtbnMpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjZWxsVHlwZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNDZWxsVHlwZSgpO1xuICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJvcHRpb25zQ2FwdGlvblwiLCBcImNvbHVtbkNvbENvdW50XCIsIFwicm93VGl0bGVXaWR0aFwiLCBcImNob2ljZXNcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJSb3dzQW5kUmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXG4gICAgICAgIFwiY29sdW1uTGF5b3V0XCIsXG4gICAgICAgIFwiYWRkUm93TG9jYXRpb25cIixcbiAgICAgICAgXCJoaWRlQ29sdW1uc0lmRW1wdHlcIixcbiAgICAgICAgXCJzaG93SGVhZGVyXCIsXG4gICAgICAgIFwibWluUm93Q291bnRcIixcbiAgICAgICAgXCJpc1JlYWRPbmx5XCIsXG4gICAgICAgIFwicm93Q291bnRcIixcbiAgICAgICAgXCJoYXNGb290ZXJcIixcbiAgICAgICAgXCJkZXRhaWxQYW5lbE1vZGVcIixcbiAgICAgIF0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSb3dzRHluYW1pYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBzdXBlci5pdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoaXRlbSwgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAoaXRlbS5vd25lclByb3BlcnR5TmFtZSA9PT0gXCJjaG9pY2VzXCIpIHtcbiAgICAgIHRoaXMuY2xlYXJSb3dzQW5kUmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgY29sdW1uTGF5b3V0IHRvICd2ZXJ0aWNhbCcgdG8gcGxhY2UgY29sdW1ucyB2ZXJ0aWNhbGx5IGFuZCByb3dzIGhvcml6b250YWxseS4gSXQgbWFrZXMgc2Vuc2Ugd2hlbiB3ZSBoYXZlIG1hbnkgY29sdW1ucyBhbmQgZmV3IHJvd3MuXG4gICAqIEBzZWUgY29sdW1uc1xuICAgKiBAc2VlIHJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbkxheW91dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2x1bW5MYXlvdXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgY29sdW1uc0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTGF5b3V0O1xuICB9XG4gIHNldCBjb2x1bW5zTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbHVtbkxheW91dCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGNvbHVtbnMgYXJlIGxvY2F0ZWQgaG9yaXpvbnRhbGx5XG4gICAqIEBzZWUgY29sdW1uTGF5b3V0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5MYXlvdXQgIT0gXCJ2ZXJ0aWNhbFwiO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIHRvIFwidW5kZXJSb3dcIiB0byBzaG93IHRoZSBkZXRhaWxQYW5lbCB1bmRlciB0aGUgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsUGFuZWxNb2RlXCIsIFwibm9uZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRldGFpbFBhbmVsTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRldGFpbFBhbmVsTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGV0YWlsIHRlbXBsYXRlIFBhbmVsLiBUaGlzIHBhbmVsIGlzIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGluZyBkZXRhaWwgcGFuZWwgZm9yIGEgcm93LlxuICAgKiBAc2VlICBkZXRhaWxFbGVtZW50c1xuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgZWxlbWVudHMsIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICAgKiBAc2VlICBkZXRhaWxQYW5lbFxuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsLmVsZW1lbnRzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdEZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUm93VGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0Rm9vdGVyVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBjYW5BZGRSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGNhblJlbW92ZVJvdyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBsb2NrUmVzZXRSZW5kZXJlZFRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25FbmRSb3dBZGRpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnJlbmRlcmVkVGFibGUpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZS5vbkFkZGVkUm93KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkVuZFJvd1JlbW92aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIXJvdykge1xuICAgICAgICB0aGlzLnJlbmRlcmVkVGFibGUub25SZW1vdmVkUm93KHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IHJlbmRlcmVkVGFibGVWYWx1ZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVGFibGVcIiwgbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcmVuZGVyZWRUYWJsZVZhbHVlKHZhbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFRhYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpIHtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVzZXRSZW5kZXJlZFRhYmxlKCkge1xuICAgIGlmICh0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgfHwgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMucmVuZGVyZWRUYWJsZVZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2spO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckdlbmVyYXRlZFJvd3MoKSB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkVGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIGlmICghdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZVZhbHVlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFRhYmxlKCk7XG4gICAgICBpZiAoISF0aGlzLm9uUmVuZGVyZWRUYWJsZUNyZWF0ZWRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uUmVuZGVyZWRUYWJsZUNyZWF0ZWRDYWxsYmFjayh0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyZWRUYWJsZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25NYXRyaXhSb3dDcmVhdGVkKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICByb3dWYWx1ZTogcm93LnZhbHVlLFxuICAgICAgcm93OiByb3csXG4gICAgICBjb2x1bW46IDxhbnk+bnVsbCxcbiAgICAgIGNvbHVtbk5hbWU6IDxhbnk+bnVsbCxcbiAgICAgIGNlbGw6IDxhbnk+bnVsbCxcbiAgICAgIGNlbGxRdWVzdGlvbjogPGFueT5udWxsLFxuICAgICAgdmFsdWU6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5jb2x1bW4gPSB0aGlzLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgb3B0aW9ucy5jb2x1bW5OYW1lID0gb3B0aW9ucy5jb2x1bW4ubmFtZTtcbiAgICAgIHZhciBjZWxsID0gcm93LmNlbGxzW2ldO1xuICAgICAgb3B0aW9ucy5jZWxsID0gY2VsbDtcbiAgICAgIG9wdGlvbnMuY2VsbFF1ZXN0aW9uID0gY2VsbC5xdWVzdGlvbjtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBjZWxsLnZhbHVlO1xuICAgICAgaWYgKCEhdGhpcy5vbkNlbGxDcmVhdGVkQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vbkNlbGxDcmVhdGVkQ2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1cnZleS5tYXRyaXhDZWxsQ3JlYXRlZCh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjZWxsIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNlbGxUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHNldHRpbmdzLm1hdHJpeERlZmF1bHRDZWxsVHlwZSk7XG4gIH1cbiAgcHVibGljIHNldCBjZWxsVHlwZSh2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zQ2VsbFR5cGUoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY29sdW1uc1tpXS5kZWZhdWx0Q2VsbFR5cGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uc0luZGV4ZXMoY29sczogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb2xzW2ldLnNldEluZGV4KGkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50IGZvciByYWRpb2dyb3VwIGFuZCBjaGVja2JveCAgY2VsbCB0eXBlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29sdW1uQ29sQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uQ29sQ291bnRcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBjb2x1bW5Db2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5Db2xDb3VudFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgbWluaW11bSBjb2x1bW4gd2lkdGguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbk1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbk1pbldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uTWluV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5NaW5XaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIHNob3cgdGhlIGhvcml6b250YWwgc2Nyb2xsLlxuICAgKi9cbiAgcHVibGljIGdldCBob3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJob3Jpem9udGFsU2Nyb2xsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhvcml6b250YWxTY3JvbGwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaG9yaXpvbnRhbFNjcm9sbFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRSZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiO1xuICB9XG4gIG9uQ29sdW1uUHJvcGVydHlDaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVIYXNGb290ZXIoKTtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5DaGFuZ2VkKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5ld1ZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgaWYgKG5hbWUgPT0gXCJpc1JlcXVpcmVkXCIpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMub25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKGNvbHVtbik7XG4gICAgfVxuICB9XG4gIG9uQ29sdW1uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgb2xkVmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5JdGVtVmFsdWVDaGFuZ2VkKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgb2JqLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgb2xkVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pIHtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gIH1cbiAgb25Db2x1bW5DZWxsVHlwZUNoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbikge1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93VGl0bGVXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNGb290ZXJcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBnZXRBZGRSb3dMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImRlZmF1bHRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0U2hvd0NvbHVtbnNJZkVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCkge1xuICAgIGlmICghIXRoaXMucmVuZGVyZWRUYWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlSGFzRm9vdGVyKCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc0Zvb3RlclwiLCB0aGlzLmhhc1RvdGFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RvdGFsKCk6IGJvb2xlYW4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zW2ldLmhhc1RvdGFsKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldENlbGxUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbFR5cGU7XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICB2YXIgY29sdW1uTmFtZSA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChwYXRoW2ldID09IFwiLlwiKSBicmVhaztcbiAgICAgIGNvbHVtbk5hbWUgPSBwYXRoW2ldICsgY29sdW1uTmFtZTtcbiAgICB9XG4gICAgdmFyIGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWUpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcXVlc3Rpb24gPSBjb2x1bW4uY3JlYXRlQ2VsbFF1ZXN0aW9uKG51bGwpO1xuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgIHJldHVybiBxdWVzdGlvbi5nZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yKTtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93c1tpXS5jbGVhckluY29ycmVjdFZhbHVlcyh0aGlzLmdldFJvd1ZhbHVlKGkpKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIHN1cGVyLmNsZWFyRXJyb3JzKCk7XG4gICAgaWYgKCEhdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvdy5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHJvdy5jZWxsc1tqXS5xdWVzdGlvbi5jbGVhckVycm9ycygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgcHJldlRvdGFsVmFsdWU7XG4gICAgZG8ge1xuICAgICAgcHJldlRvdGFsVmFsdWUgPSBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHRoaXMudG90YWxWYWx1ZSk7XG4gICAgICB0aGlzLnJ1bkNlbGxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICB0aGlzLnJ1blRvdGFsc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgY291bnRlcisrO1xuICAgIH0gd2hpbGUgKFxuICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhwcmV2VG90YWxWYWx1ZSwgdGhpcy50b3RhbFZhbHVlKSAmJlxuICAgICAgY291bnRlciA8IDNcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBzaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuQ2VsbHNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWVzID0gdGhpcy5nZXRSb3dDb25kaXRpb25WYWx1ZXModmFsdWVzKTtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLnJ1bkNvbmRpdGlvbihuZXdWYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQ29sdW1uc1Zpc2liaWxpdHkoKTtcbiAgfVxuICBwcml2YXRlIGNoZWNrQ29sdW1uc1Zpc2liaWxpdHkoKSB7XG4gICAgdmFyIGhhc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy52aXNpYmxlQ29sdW1uc1tpXS52aXNpYmxlSWYpIGNvbnRpbnVlO1xuICAgICAgaGFzQ2hhbmdlZCA9XG4gICAgICAgIHRoaXMuaXNDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLnZpc2libGVDb2x1bW5zW2ldKSB8fCBoYXNDaGFuZ2VkO1xuICAgIH1cbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBib29sZWFuIHtcbiAgICB2YXIgY3VyVmlzID0gY29sdW1uLmhhc1Zpc2libGVDZWxsO1xuICAgIHZhciBoYXNWaXNDZWxsID0gZmFsc2U7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSByb3dzW2ldLmNlbGxzW2NvbHVtbi5pbmRleF07XG4gICAgICBpZiAoISFjZWxsICYmICEhY2VsbC5xdWVzdGlvbiAmJiBjZWxsLnF1ZXN0aW9uLmlzVmlzaWJsZSkge1xuICAgICAgICBoYXNWaXNDZWxsID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJWaXMgIT0gaGFzVmlzQ2VsbCkge1xuICAgICAgY29sdW1uLmhhc1Zpc2libGVDZWxsID0gaGFzVmlzQ2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIGN1clZpcyAhPSBoYXNWaXNDZWxsO1xuICB9XG4gIHByb3RlY3RlZCBydW5Ub3RhbHNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVG90YWxSb3cpIHJldHVybjtcbiAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LnJ1bkNvbmRpdGlvbihcbiAgICAgIHRoaXMuZ2V0Um93Q29uZGl0aW9uVmFsdWVzKHZhbHVlcyksXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldFJvd0NvbmRpdGlvblZhbHVlcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KTogSGFzaFRhYmxlPGFueT4ge1xuICAgIHZhciBuZXdWYWx1ZXMgPSB2YWx1ZXM7XG4gICAgaWYgKCFuZXdWYWx1ZXMpIG5ld1ZhbHVlcyA9IHt9O1xuICAgIC8qXG4gICAgdmFyIG5ld1ZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIG5ld1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuICAgICovXG4gICAgdmFyIHRvdGFsUm93ID0ge307XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnRvdGFsVmFsdWUpKSB7XG4gICAgICB0b3RhbFJvdyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50b3RhbFZhbHVlKSk7XG4gICAgfVxuICAgIG5ld1ZhbHVlc1tcInJvd1wiXSA9IHt9O1xuICAgIG5ld1ZhbHVlc1tcInRvdGFsUm93XCJdID0gdG90YWxSb3c7XG4gICAgcmV0dXJuIG5ld1ZhbHVlcztcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbHVtbnNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93c1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93LmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gYnkgaXQncyBuYW1lLiBSZXR1cm5zIG51bGwgaWYgYSBjb2x1bW4gd2l0aCB0aGlzIG5hbWUgZG9lc24ndCBleGlzdC5cbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcHVibGljIGdldENvbHVtbkJ5TmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBNYXRyaXhEcm9wZG93bkNvbHVtbiB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnNbaV0ubmFtZSA9PSBjb2x1bW5OYW1lKSByZXR1cm4gdGhpcy5jb2x1bW5zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiB3aWR0aC5cbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcHVibGljIGdldENvbHVtbldpZHRoKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ubWluV2lkdGggPyBjb2x1bW4ubWluV2lkdGggOiB0aGlzLmNvbHVtbk1pbldpZHRoO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjaG9pY2VzIGZvciBkcm9wZG93biwgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgY2VsbCB0eXBlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXModmFsOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvcHRpb25zIGNhcHRpb24gZm9yIGRyb3Bkb3duIGNlbGwgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvcHRpb25zQ2FwdGlvblwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jT3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGR1cGxpY2F0aW9uIHZhbHVlIGVycm9yIHRleHQuIFNldCBpdCB0byBzaG93IHRoZSB0ZXh0IGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LlxuICAgKiBAc2VlIE1hdHJpeERyb3Bkb3duQ29sdW1uLmlzVW5pcXVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBrZXlEdXBsaWNhdGlvbkVycm9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0tleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgc3RvcmVPdGhlcnNBc0NvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5zdG9yZU90aGVyc0FzQ29tbWVudCA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhZGRDb2x1bW4obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICB2YXIgY29sdW1uID0gbmV3IE1hdHJpeERyb3Bkb3duQ29sdW1uKG5hbWUsIHRpdGxlKTtcbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPiB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHRoaXMuZ2VuZXJhdGVSb3dzKCk7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmZvckVhY2goKHJvdykgPT4gdGhpcy5vbk1hdHJpeFJvd0NyZWF0ZWQocm93KSk7XG4gICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgIHRoaXMucnVuQ2VsbHNDb25kaXRpb24oXG4gICAgICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCksXG4gICAgICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlT25Sb3dzR2VuZXJhdGlvbih0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKTtcbiAgICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVZhbHVlT25Sb3dzR2VuZXJhdGlvbihyb3dzOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4pIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRydWUpO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgaWYgKCEhcm93LmVkaXRpbmdPYmopIGNvbnRpbnVlO1xuICAgICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZShpKTtcbiAgICAgIHZhciByVmFsdWUgPSByb3cudmFsdWU7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHJvd1ZhbHVlLCByVmFsdWUpKSBjb250aW51ZTtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZChyb3csIFwiXCIsIHJWYWx1ZSwgZmFsc2UsIG5ld1ZhbHVlKVxuICAgICAgICAudmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMob2xkVmFsdWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmhhc1RvdGFsIHx8ICF0aGlzLnZpc2libGVUb3RhbFJvdykgcmV0dXJuIHt9O1xuICAgIHJldHVybiB0aGlzLnZpc2libGVUb3RhbFJvdy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuaGFzVG90YWwpIHtcbiAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gdGhpcy5nZW5lcmF0ZVRvdGFsUm93KCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHsgc3VydmV5OiB0aGlzLnN1cnZleSB9O1xuICAgICAgICAgIHRoaXMucnVuVG90YWxzQ29uZGl0aW9uKHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlZFRvdGFsUm93O1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlVG90YWxSb3coKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uc0luZGV4ZXModGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlSGFzRm9vdGVyKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJvdyB2YWx1ZS4gSWYgdGhlIHJvdyB2YWx1ZSBpcyBlbXB0eSwgdGhlIG9iamVjdCBpcyBlbXB0eToge30uXG4gICAqIEBwYXJhbSByb3dJbmRleCByb3cgaW5kZXggZnJvbSAwIHRvIHZpc2libGUgcm93IGNvdW50IC0gMS5cbiAgICovXG4gIHB1YmxpYyBnZXRSb3dWYWx1ZShyb3dJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHJvd0luZGV4IDwgMCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZpc1Jvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmIChyb3dJbmRleCA+PSB2aXNSb3dzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLmdldFJvd1ZhbHVlQ29yZSh2aXNSb3dzW3Jvd0luZGV4XSwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBjaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQoXG4gICAgY2hlY2tlZFJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY2VsbFF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcbiAgICAgIGlmIChjaGVja2VkUm93ID09PSByb3cpIGNvbnRpbnVlO1xuICAgICAgaWYgKHJvdy5nZXRWYWx1ZShjZWxsUXVlc3Rpb24ubmFtZSkgPT0gY2VsbFF1ZXN0aW9uLnZhbHVlKSB7XG4gICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLmFkZER1cGxpY2F0aW9uRXJyb3IoY2VsbFF1ZXN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VsbFF1ZXN0aW9uLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgcm93IHZhbHVlLlxuICAgKiBAcGFyYW0gcm93SW5kZXggcm93IGluZGV4IGZyb20gMCB0byB2aXNpYmxlIHJvdyBjb3VudCAtIDEuXG4gICAqIEBwYXJhbSByb3dWYWx1ZSBhbiBvYmplY3Qge1wiY29sdW1uIG5hbWVcIjogY29sdW1uVmFsdWUsLi4uIH1cbiAgICovXG4gIHB1YmxpYyBzZXRSb3dWYWx1ZShyb3dJbmRleDogbnVtYmVyLCByb3dWYWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAocm93SW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmlzUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKHJvd0luZGV4ID49IHZpc1Jvd3MubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2aXNSb3dzW3Jvd0luZGV4XS52YWx1ZSA9IHJvd1ZhbHVlO1xuICAgIHRoaXMub25Sb3dDaGFuZ2VkKHZpc1Jvd3Nbcm93SW5kZXhdLCBcIlwiLCByb3dWYWx1ZSwgZmFsc2UpO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUb3RhbFJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93blRvdGFsUm93TW9kZWwodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1ZhbHVlKG51bGxPbkVtcHR5OiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuICAgIHZhciByZXMgPSAhdGhpcy52YWx1ZSA/IHt9IDogdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICBpZiAobnVsbE9uRW1wdHkgJiYgdGhpcy5pc01hdHJpeFZhbHVlRW1wdHkocmVzKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWVDb3JlKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcXVlc3Rpb25WYWx1ZTogYW55LFxuICAgIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgdmFyIHJlc3VsdCA9XG4gICAgICAhIXF1ZXN0aW9uVmFsdWUgJiYgISFxdWVzdGlvblZhbHVlW3Jvdy5yb3dOYW1lXVxuICAgICAgICA/IHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXJlc3VsdCAmJiBjcmVhdGUpIHtcbiAgICAgIHJlc3VsdCA9IHt9O1xuICAgICAgaWYgKCEhcXVlc3Rpb25WYWx1ZSkge1xuICAgICAgICBxdWVzdGlvblZhbHVlW3Jvdy5yb3dOYW1lXSA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93T2JqKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBhbnkge1xuICAgIHZhciBvYmogPSB0aGlzLmdldFJvd1ZhbHVlQ29yZShyb3csIHRoaXMudmFsdWUpO1xuICAgIHJldHVybiAhIW9iaiAmJiAhIW9iai5nZXRUeXBlID8gb2JqIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93RGlzcGxheVZhbHVlKFxuICAgIGtleXNBc1RleHQ6IGJvb2xlYW4sXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgaWYgKCFyb3dWYWx1ZSkgcmV0dXJuIHJvd1ZhbHVlO1xuICAgIGlmICghIXJvdy5lZGl0aW5nT2JqKSByZXR1cm4gcm93VmFsdWU7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhyb3dWYWx1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHJvdy5nZXRRdWVzdGlvbkJ5TmFtZShrZXkpO1xuICAgICAgaWYgKCFxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbiA9IHRoaXMuZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoa2V5LCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIGRpc3BsYXl2YWx1ZSA9IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCByb3dWYWx1ZVtrZXldKTtcbiAgICAgICAgaWYgKGtleXNBc1RleHQgJiYgISFxdWVzdGlvbi50aXRsZSAmJiBxdWVzdGlvbi50aXRsZSAhPT0ga2V5KSB7XG4gICAgICAgICAgcm93VmFsdWVbcXVlc3Rpb24udGl0bGVdID0gZGlzcGxheXZhbHVlO1xuICAgICAgICAgIGRlbGV0ZSByb3dWYWx1ZVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvd1ZhbHVlW2tleV0gPSBkaXNwbGF5dmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IHRoaXMudmlzaWJsZVJvd3MubWFwKFxuICAgICAgICAocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSkgPT4ge1xuICAgICAgICAgIHZhciByb3dEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgICAgbmFtZTogcm93LnJvd05hbWUsXG4gICAgICAgICAgICB0aXRsZTogcm93LnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogcm93LnZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmdldFJvd0Rpc3BsYXlWYWx1ZShmYWxzZSwgcm93LCByb3cudmFsdWUpLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogcm93LmNlbGxzXG4gICAgICAgICAgICAgIC5tYXAoKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkgPT5cbiAgICAgICAgICAgICAgICBjZWxsLnF1ZXN0aW9uLmdldFBsYWluRGF0YShvcHRpb25zKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGQ6IGFueSkgPT4gISFkKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIHJvd0RhdGFJdGVtW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPSAoPGFueT5yb3cpW1xuICAgICAgICAgICAgICBjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJvd0RhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudC5nZXRQcm9ncmVzc0luZm9CeUVsZW1lbnRzKFxuICAgICAgdGhpcy5nZXRDZWxsUXVlc3Rpb25zKCksXG4gICAgICB0aGlzLmlzUmVxdWlyZWRcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2VsbFF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKHJvdy5jZWxsc1tqXS5xdWVzdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHt9XG4gIHByaXZhdGUgb25TZXRRdWVzdGlvblZhbHVlKCkge1xuICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLm9uQmVmb3JlVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgdmFsKTtcbiAgICB9XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIGZhbHNlKTtcbiAgICB0aGlzLm9uU2V0UXVlc3Rpb25WYWx1ZSgpO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHF1ZXN0aW9uICYmXG4gICAgICAgICAgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRDb250YWluc0Vycm9ycygpIHx8XG4gICAgICB0aGlzLmNoZWNrRm9yQW5zd2Vyc09yRXJyb3JzKFxuICAgICAgICAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBxdWVzdGlvbi5jb250YWluc0Vycm9ycyxcbiAgICAgICAgZmFsc2VcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRJc0Fuc3dlcmVkKCkgJiZcbiAgICAgIHRoaXMuY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgICAgIChxdWVzdGlvbjogUXVlc3Rpb24pID0+IHF1ZXN0aW9uLmlzQW5zd2VyZWQsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgcHJlZGljYXRlOiAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBib29sZWFuLFxuICAgIGV2ZXJ5OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGxzID0gcm93c1tpXS5jZWxscztcbiAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmlzVmlzaWJsZSlcbiAgICAgICAgICBpZiAocHJlZGljYXRlKHF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKCFldmVyeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChldmVyeSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV2ZXJ5ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9zSW5Sb3dzID0gdGhpcy5oYXNFcnJvckluUm93cyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgdmFyIGlzRHVwbGljYXRlZCA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQoKTtcbiAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKSB8fCBlcnJvc0luUm93cyB8fCBpc0R1cGxpY2F0ZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGlmICghY2VsbHNbY29sSW5kZXhdKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICBpZiAoISFxdWVzdGlvbiAmJiBxdWVzdGlvbi5pc1J1bm5pbmdWYWxpZGF0b3JzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzdWx0ID0gc3VwZXIuZ2V0QWxsRXJyb3JzKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuXG4gICAgaWYgKHJvd3MgPT09IG51bGwpIHJldHVybiByZXN1bHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3cuY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IHJvdy5jZWxsc1tqXS5xdWVzdGlvbi5nZXRBbGxFcnJvcnMoKTtcbiAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JJblJvd3MoZmlyZUNhbGxiYWNrOiBib29sZWFuLCByZWM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBpZiAoIXJlYykgcmVjID0ge307XG4gICAgcmVjLmlzU2luZ2xlRGV0YWlsUGFuZWwgPSB0aGlzLmRldGFpbFBhbmVsTW9kZSA9PT0gXCJ1bmRlclJvd1NpbmdsZVwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzID1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgICAgfSkgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUR1cGxpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLmdldFVuaXF1ZUNvbHVtbnMoKTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPSB0aGlzLmlzVmFsdWVJbkNvbHVtbkR1cGxpY2F0ZWQoY29sdW1uc1tpXSkgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUluQ29sdW1uRHVwbGljYXRlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgdmFyIGtleVZhbHVlcyA9IDxBcnJheTxhbnk+PltdO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyA9XG4gICAgICAgIHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWRJblJvdyhcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBrZXlWYWx1ZXNcbiAgICAgICAgKSB8fCByZXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVuaXF1ZUNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zW2ldLmlzVW5pcXVlKSB7XG4gICAgICAgIHJlcy5wdXNoKHRoaXMuY29sdW1uc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZEluUm93KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBrZXlWYWx1ZXM6IEFycmF5PGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gcm93LmdldFF1ZXN0aW9uQnlDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoIXF1ZXN0aW9uIHx8IHF1ZXN0aW9uLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWUgPT0ga2V5VmFsdWVzW2ldKSB7XG4gICAgICAgIHRoaXMuYWRkRHVwbGljYXRpb25FcnJvcihxdWVzdGlvbik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBrZXlWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgYWRkRHVwbGljYXRpb25FcnJvcihxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBxdWVzdGlvbi5hZGRFcnJvcihuZXcgS2V5RHVwbGljYXRpb25FcnJvcih0aGlzLmtleUR1cGxpY2F0aW9uRXJyb3IsIHRoaXMpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Rmlyc3RDZWxsUXVlc3Rpb24oZmFsc2UpO1xuICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBzdXBlci5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Rmlyc3RDZWxsUXVlc3Rpb24odHJ1ZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdENlbGxRdWVzdGlvbihvbkVycm9yOiBib29sZWFuKTogUXVlc3Rpb24ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIW9uRXJyb3IpIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICAgIGlmIChjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb24uY3VycmVudEVycm9yQ291bnQgPiAwKVxuICAgICAgICAgIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZVJvd3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3NbaV0ub25RdWVzdGlvblJlYWRPbmx5Q2hhbmdlZCh0aGlzLmlzUmVhZE9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vSU1hdHJpeERyb3Bkb3duRGF0YVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24oXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVRdWVzdGlvbkNvcmUocm93LCBjb2x1bW4pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbkNvcmUoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb24gPSBjb2x1bW4uY3JlYXRlQ2VsbFF1ZXN0aW9uKHJvdyk7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHkgPSB0cnVlO1xuICAgIH1cbiAgICBxdWVzdGlvbi5zZXRTdXJ2ZXlJbXBsKHJvdyk7XG4gICAgcXVlc3Rpb24uc2V0UGFyZW50UXVlc3Rpb24odGhpcyk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBkZWxldGVSb3dWYWx1ZShcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogYW55IHtcbiAgICBpZiAoIW5ld1ZhbHVlKSByZXR1cm4gbmV3VmFsdWU7XG4gICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdChuZXdWYWx1ZSkgJiYgT2JqZWN0LmtleXMobmV3VmFsdWUpLmxlbmd0aCA9PSAwXG4gICAgICA/IG51bGxcbiAgICAgIDogbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBpc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgfHxcbiAgICAgICF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNEb2luZ29uQW55VmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgICB2YXIgdG90YWxSb3cgPSB0aGlzLnZpc2libGVUb3RhbFJvdztcbiAgICBpZiAoISF0b3RhbFJvdykge1xuICAgICAgdG90YWxSb3cub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICAgIHRoaXMuaXNEb2luZ29uQW55VmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGlzT2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuICB9XG4gIHByaXZhdGUgZ2V0T25DZWxsVmFsdWVDaGFuZ2VkT3B0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgdmFyIGdldFF1ZXN0aW9uID0gKGNvbE5hbWU6IGFueSkgPT4ge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbCA9IHJvdy5jZWxsc1tpXS5jb2x1bW47XG4gICAgICAgIGlmICghIWNvbCAmJiBjb2wubmFtZSA9PT0gY29sTmFtZSkge1xuICAgICAgICAgIHJldHVybiByb3cuY2VsbHNbaV0ucXVlc3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sdW1uTmFtZTogY29sdW1uTmFtZSxcbiAgICAgIHJvd1ZhbHVlOiByb3dWYWx1ZSxcbiAgICAgIHZhbHVlOiAhIXJvd1ZhbHVlID8gcm93VmFsdWVbY29sdW1uTmFtZV0gOiBudWxsLFxuICAgICAgZ2V0Q2VsbFF1ZXN0aW9uOiBnZXRRdWVzdGlvbixcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBvbkNlbGxWYWx1ZUNoYW5nZWQoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5vbkNlbGxWYWx1ZUNoYW5nZWRDYWxsYmFjaykge1xuICAgICAgdGhpcy5vbkNlbGxWYWx1ZUNoYW5nZWRDYWxsYmFjayhvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5zdXJ2ZXkubWF0cml4Q2VsbFZhbHVlQ2hhbmdlZCh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICB2YWxpZGF0ZUNlbGwoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBTdXJ2ZXlFcnJvciB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5nZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zKHJvdywgY29sdW1uTmFtZSwgcm93VmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXRyaXhDZWxsVmFsaWRhdGUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZ2V0IGlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nIDogZmFsc2U7XG4gIH1cbiAgb25Sb3dDaGFuZ2luZyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuICEhcm93VmFsdWUgPyByb3dWYWx1ZVtjb2x1bW5OYW1lXSA6IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgdmFyIG9sZFJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZUNvcmUocm93LCB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCksIHRydWUpO1xuICAgIG9wdGlvbnMub2xkVmFsdWUgPSAhIW9sZFJvd1ZhbHVlID8gb2xkUm93VmFsdWVbY29sdW1uTmFtZV0gOiBudWxsO1xuICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnZhbHVlO1xuICB9XG4gIG9uUm93Q2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdSb3dWYWx1ZTogYW55LFxuICAgIGlzRGVsZXRpbmdWYWx1ZTogYm9vbGVhblxuICApIHtcbiAgICB2YXIgcm93T2JqID0gISFjb2x1bW5OYW1lID8gdGhpcy5nZXRSb3dPYmoocm93KSA6IG51bGw7XG4gICAgaWYgKCEhcm93T2JqKSB7XG4gICAgICB2YXIgY29sdW1uVmFsdWUgPSBudWxsO1xuICAgICAgaWYgKCEhbmV3Um93VmFsdWUgJiYgIWlzRGVsZXRpbmdWYWx1ZSkge1xuICAgICAgICBjb2x1bW5WYWx1ZSA9IG5ld1Jvd1ZhbHVlW2NvbHVtbk5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgIHJvd09ialtjb2x1bW5OYW1lXSA9IGNvbHVtblZhbHVlO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIHJvd09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodHJ1ZSk7XG4gICAgICB2YXIgY29tYmluZSA9IHRoaXMuZ2V0TmV3VmFsdWVPblJvd0NoYW5nZWQoXG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgbmV3Um93VmFsdWUsXG4gICAgICAgIGlzRGVsZXRpbmdWYWx1ZSxcbiAgICAgICAgdGhpcy5jcmVhdGVOZXdWYWx1ZSgpXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgY29tYmluZS52YWx1ZSkpIHJldHVybjtcbiAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLnNldE5ld1ZhbHVlKGNvbWJpbmUudmFsdWUpO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgICBpZiAoY29sdW1uTmFtZSkge1xuICAgICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIGNvbWJpbmUucm93VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldE5ld1ZhbHVlT25Sb3dDaGFuZ2VkKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIG5ld1Jvd1ZhbHVlOiBhbnksXG4gICAgaXNEZWxldGluZ1ZhbHVlOiBib29sZWFuLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICB2YXIgcm93VmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlQ29yZShyb3csIG5ld1ZhbHVlLCB0cnVlKTtcbiAgICBpZiAoaXNEZWxldGluZ1ZhbHVlKSB7XG4gICAgICBkZWxldGUgcm93VmFsdWVbY29sdW1uTmFtZV07XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcm93LmNlbGxzW2ldLnF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpO1xuICAgICAgZGVsZXRlIHJvd1ZhbHVlW2tleV07XG4gICAgfVxuICAgIGlmIChuZXdSb3dWYWx1ZSkge1xuICAgICAgbmV3Um93VmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5ld1Jvd1ZhbHVlKSk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbmV3Um93VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShuZXdSb3dWYWx1ZVtrZXldKSkge1xuICAgICAgICAgIHJvd1ZhbHVlW2tleV0gPSBuZXdSb3dWYWx1ZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT2JqZWN0KHJvd1ZhbHVlKSAmJiBPYmplY3Qua2V5cyhyb3dWYWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuZGVsZXRlUm93VmFsdWUobmV3VmFsdWUsIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBuZXdWYWx1ZSwgcm93VmFsdWU6IHJvd1ZhbHVlIH07XG4gIH1cbiAgZ2V0Um93SW5kZXgocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbik7XG4gICAgcmV0dXJuIGluY2x1ZGVIaWRkZW4gPyBbdGhpcy5kZXRhaWxQYW5lbF0gOiB0aGlzLmRldGFpbEVsZW1lbnRzO1xuICB9XG4gIGhhc0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kZXRhaWxQYW5lbE1vZGUgPT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0cnVlO1xuICAgIGlmICghIXRoaXMub25IYXNEZXRhaWxQYW5lbENhbGxiYWNrKVxuICAgICAgcmV0dXJuIHRoaXMub25IYXNEZXRhaWxQYW5lbENhbGxiYWNrKHJvdyk7XG4gICAgcmV0dXJuIHRoaXMuZGV0YWlsRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB2YXIgcmVzID0gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHJvdykgPT0gMDtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKCFyb3cuZGV0YWlsUGFuZWwpIHtcbiAgICAgICAgICByb3cuc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Jvd1Nob3dpbmdcIiArIHJvdy5pZCwgZmFsc2UpO1xuICB9XG4gIHNldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh2YWwgPT0gdGhpcy5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3cpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSb3dTaG93aW5nXCIgKyByb3cuaWQsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVEZXRhaWxQYW5lbEJ1dHRvbkNzcyhyb3cpO1xuICAgIGlmICghIXRoaXMucmVuZGVyZWRUYWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uRGV0YWlsUGFuZWxDaGFuZ2VWaXNpYmlsaXR5KHJvdywgdmFsKTtcbiAgICB9XG4gICAgaWYgKHZhbCAmJiB0aGlzLmRldGFpbFBhbmVsTW9kZSA9PT0gXCJ1bmRlclJvd1NpbmdsZVwiKSB7XG4gICAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJvd3NbaV0uaWQgIT09IHJvdy5pZCAmJiByb3dzW2ldLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICAgICAgcm93c1tpXS5oaWRlRGV0YWlsUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3Mocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRldGFpbEJ1dHRvbkNzc1wiICsgcm93LmlkKTtcbiAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIHJlcyA9IHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxCdXR0b247XG4gICAgcmV0dXJuICEhcmVzID8gcmVzIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0RGV0YWlsUGFuZWxJY29uQ3NzKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxJY29uQ3NzXCIgKyByb3cuaWQpO1xuICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgcmVzID0gdGhpcy5jc3NDbGFzc2VzLmRldGFpbEljb247XG4gICAgcmV0dXJuICEhcmVzID8gcmVzIDogXCJcIjtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZURldGFpbFBhbmVsQnV0dG9uQ3NzKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICB2YXIgY2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICB2YXIgaWNvbiA9IGNsYXNzZXMuZGV0YWlsSWNvbjtcbiAgICBpZiAoIWljb24pIGljb24gPSBcIlwiO1xuICAgIHZhciBidXR0b24gPSBjbGFzc2VzLmRldGFpbEJ1dHRvbjtcbiAgICBpZiAoIWJ1dHRvbikgYnV0dG9uID0gXCJcIjtcbiAgICBpZiAodGhpcy5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3cpKSB7XG4gICAgICBpZiAoISFjbGFzc2VzLmRldGFpbEljb25FeHBhbmRlZClcbiAgICAgICAgaWNvbiArPSBcIiBcIiArIGNsYXNzZXMuZGV0YWlsSWNvbkV4cGFuZGVkO1xuICAgICAgaWYgKCEhY2xhc3Nlcy5kZXRhaWxCdXR0b25FeHBhbmRlZClcbiAgICAgICAgYnV0dG9uICs9IFwiIFwiICsgY2xhc3Nlcy5kZXRhaWxCdXR0b25FeHBhbmRlZDtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsSWNvbkNzc1wiICsgcm93LmlkLCBpY29uKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxCdXR0b25Dc3NcIiArIHJvdy5pZCwgYnV0dG9uKTtcbiAgfVxuICBjcmVhdGVSb3dEZXRhaWxQYW5lbChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogUGFuZWxNb2RlbCB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbDtcbiAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld0RldGFpbFBhbmVsKCk7XG4gICAgdmFyIGpzb24gPSB0aGlzLmRldGFpbFBhbmVsLnRvSlNPTigpO1xuICAgIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgcGFuZWwpO1xuICAgIHBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgcGFuZWwudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICAgIGlmICghIXRoaXMub25DcmVhdGVEZXRhaWxQYW5lbENhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uQ3JlYXRlRGV0YWlsUGFuZWxDYWxsYmFjayhyb3csIHBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIGdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IFF1ZXN0aW9uIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5nZXRSb3dJbmRleChyb3cpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8UXVlc3Rpb24+KFxuICAgICAgdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZUZyb21BcnJheShcbiAgICAgICAgdGhpcy52YWx1ZU5hbWUsXG4gICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgIGluZGV4XG4gICAgICApXG4gICAgKTtcbiAgfVxuICBvblRvdGFsVmFsdWVDaGFuZ2VkKCk6IGFueSB7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmRhdGEgJiZcbiAgICAgICEhdGhpcy52aXNpYmxlVG90YWxSb3cgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmXG4gICAgICAhdGhpcy5pc1NldHQgJiZcbiAgICAgICF0aGlzLmlzUmVhZE9ubHlcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRWYWx1ZShcbiAgICAgICAgdGhpcy5nZXRWYWx1ZU5hbWUoKSArIHNldHRpbmdzLm1hdHJpeFRvdGFsVmFsdWVQb3N0Rml4LFxuICAgICAgICB0aGlzLnRvdGFsVmFsdWUsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25Gcm9tQXJyYXkobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogSVF1ZXN0aW9uIHtcbiAgICBpZiAoaW5kZXggPj0gdGhpcy52aXNpYmxlUm93cy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dzW2luZGV4XS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcml2YXRlIGlzTWF0cml4VmFsdWVFbXB0eSh2YWw6IGFueSkge1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3QodmFsW2ldKSAmJiBPYmplY3Qua2V5cyh2YWxbaV0pLmxlbmd0aCA+IDApXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgU3VydmV5TW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsVGVtcGxhdGVEYXRhKGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwpIHtcbiAgICAvLyByZXR1cm4gY2VsbC5jZWxsLmNvbHVtbi50ZW1wbGF0ZVF1ZXN0aW9uO1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldE1hdHJpeENlbGxUZW1wbGF0ZURhdGEoY2VsbCk7XG4gIH1cbiAgcHVibGljIGdldENlbGxXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwpIHtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgXCJjZWxsXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIFwiY2VsbFwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgY2VsbCxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29sdW1uSGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgY2VsbCxcbiAgICAgIFwiY29sdW1uLWhlYWRlclwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIFwicm93LWhlYWRlclwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93SGVhZGVyV3JhcHBlckNvbXBvbmVudERhdGEoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIFwicm93LWhlYWRlclwiKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiIW5hbWVcIiwgaXNVbmlxdWU6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNlbGxUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgdmFyIHJlcyA9IE1hdHJpeERyb3Bkb3duQ29sdW1uLmdldENvbHVtblR5cGVzKCk7XG4gICAgICAgIHJlcy5zcGxpY2UoMCwgMCwgXCJkZWZhdWx0XCIpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudFwiLCBkZWZhdWx0OiAtMSwgY2hvaWNlczogWy0xLCAwLCAxLCAyLCAzLCA0XSB9LFxuICAgIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsXG4gICAgXCJpc1VuaXF1ZTpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dDp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVxdWlyZWRFcnJvclRleHRcIixcbiAgICB9LFxuICAgIFwicmVhZE9ubHk6Ym9vbGVhblwiLFxuICAgIFwibWluV2lkdGhcIixcbiAgICBcIndpZHRoXCIsXG4gICAgXCJ2aXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJlbmFibGVJZjpjb25kaXRpb25cIixcbiAgICBcInJlcXVpcmVkSWY6Y29uZGl0aW9uXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJzaG93SW5NdWx0aXBsZUNvbHVtbnM6Ym9vbGVhblwiLFxuICAgICAgZGVwZW5kc09uOiBcImNlbGxUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaXNTdXBwb3J0TXVsdGlwbGVDb2x1bW5zO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsXG4gICAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgICAgY2xhc3NOYW1lUGFydDogXCJ2YWxpZGF0b3JcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidG90YWxUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJzdW1cIiwgXCJjb3VudFwiLCBcIm1pblwiLCBcIm1heFwiLCBcImF2Z1wiXSxcbiAgICB9LFxuICAgIFwidG90YWxFeHByZXNzaW9uOmV4cHJlc3Npb25cIixcbiAgICB7IG5hbWU6IFwidG90YWxGb3JtYXRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RvdGFsRm9ybWF0XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRvdGFsRGlzcGxheVN0eWxlXCIsXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJkZWNpbWFsXCIsIFwiY3VycmVuY3lcIiwgXCJwZXJjZW50XCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0b3RhbEN1cnJlbmN5XCIsXG4gICAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZWN5Q29kZXMoKTtcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiBcIlVTRFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJ0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwicmVuZGVyQXNcIiwgZGVmYXVsdDogXCJkZWZhdWx0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4oXCJcIik7XG4gIH1cbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibWF0cml4ZHJvcGRvd25iYXNlXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbHVtbnM6bWF0cml4ZHJvcGRvd25jb2x1bW5zXCIsXG4gICAgICBjbGFzc05hbWU6IFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sdW1uTGF5b3V0XCIsXG4gICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwiY29sdW1uc0xvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImhvcml6b250YWxcIixcbiAgICAgIGNob2ljZXM6IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGV0YWlsRWxlbWVudHNcIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImRldGFpbFBhbmVsTW9kZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcInVuZGVyUm93XCIsIFwidW5kZXJSb3dTaW5nbGVcIl0sXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICB9LFxuICAgIFwiaG9yaXpvbnRhbFNjcm9sbDpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzOml0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY09wdGlvbnNDYXB0aW9uXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNlbGxUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcImRyb3Bkb3duXCIsXG4gICAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRyaXhEcm9wZG93bkNvbHVtbi5nZXRDb2x1bW5UeXBlcygpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJjb2x1bW5Db2xDb3VudFwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNF0gfSxcbiAgICBcImNvbHVtbk1pbldpZHRoXCIsXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhiYXNlXCJcbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgSU1hdHJpeERyb3Bkb3duRGF0YSxcbiAgTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLFxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBNaW5Sb3dDb3VudEVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IGNvbmZpcm1BY3Rpb24gfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IFNvcnRhYmxlTGliIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5pbXBvcnQgeyBBY3Rpb24sIElBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25zL2FjdGlvblwiO1xuXG5jb25zdCBTb3J0YWJsZSA9IDxhbnk+U29ydGFibGVMaWI7XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEeW5hbWljUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLCB2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xuICAgIHRoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggZHltYW5pYyBxdWVzdGlvbi4gWW91IG1heSB1c2UgYSBkcm9wZG93biwgY2hlY2tib3gsIHJhZGlvZ3JvdXAsIHRleHQgYW5kIGNvbW1lbnQgcXVlc3Rpb25zIGFzIGEgY2VsbCBlZGl0b3JzLlxuICogQW4gZW5kLXVzZXIgbWF5IGR5bmFtaWNhbGx5IGFkZC9yZW1vdmUgcm93cywgdW5saWtlIGluIG1hdHJpeCBkcm9wZG93biBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xuICBwdWJsaWMgb25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrOiAoXG4gICAgc2VuZGVyOiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICApID0+IGFueTtcbiAgcHJpdmF0ZSByb3dDb3VudGVyID0gMDtcbiAgcHJpdmF0ZSBpbml0aWFsUm93Q291bnQ6IG51bWJlciA9IDI7XG4gIHByaXZhdGUgc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdm9pZCAoPExvY2FsaXphYmxlU3RyaW5nPihcbiAgICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB0aGlzKVxuICAgICkpO1xuICAgIHZhciBsb2NBZGRSb3dUZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImFkZFJvd1RleHRcIiwgdGhpcyk7XG4gICAgbG9jQWRkUm93VGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiB0aGlzLmRlZmF1bHRBZGRSb3dUZXh0O1xuICAgIH07XG4gICAgdmFyIGxvY1JlbW92ZVJvd1RleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVtb3ZlUm93VGV4dFwiLCB0aGlzKTtcbiAgICBsb2NSZW1vdmVSb3dUZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIik7XG4gICAgfTtcbiAgICB2YXIgbG9jRW1wdHlSb3dzVGV4dCA9IDxMb2NhbGl6YWJsZVN0cmluZz4oXG4gICAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiLCB0aGlzKVxuICAgICk7XG4gICAgbG9jRW1wdHlSb3dzVGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImhpZGVDb2x1bW5zSWZFbXB0eVwiLCBcImFsbG93QWRkUm93c1wiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4ZHluYW1pY1wiO1xuICB9XG5cbiAgLy9jcm9zcyBmcmFtZXdvcmsgaW5pdGlhbGl6YXRpb25cbiAgcHVibGljIGFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghIWVsICYmIHRoaXMuYWxsb3dSb3dzRHJhZ0FuZERyb3ApIHtcbiAgICAgIHRoaXMuaW5pdFNvcnRhYmxlKGVsLnF1ZXJ5U2VsZWN0b3IoXCJ0Ym9keVwiKSk7XG4gICAgfVxuICAgIHN1cGVyLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgfVxuICAvL2Nyb3NzIGZyYW1ld29yayBkZXN0cm95XG4gIHB1YmxpYyBiZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnNvcnRhYmxlSW5zdCkgdGhpcy5zb3J0YWJsZUluc3QuZGVzdHJveSgpO1xuICAgIHN1cGVyLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Jvd3NEeW5hbWljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgb24gcmVtb3ZpbmcgYSByb3dcbiAgICogQHNlZSBDb25maXJtRGVsZXRlVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gYSBjb2x1bW4gbmFtZSBhbmQgdGhlIGxpYnJhcnkgc2hvd3MgZHVwbGljYXRpb24gZXJyb3IsIGlmIHRoZXJlIGFyZSBzYW1lIHZhbHVlcyBpbiBkaWZmZXJlbnQgcm93cyBpbiB0aGUgY29sdW1uLlxuICAgKiBAc2VlIGtleUR1cGxpY2F0aW9uRXJyb3JcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQga2V5TmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImtleU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogSWYgaXQgaXMgbm90IGVtcHR5LCB0aGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIGV2ZXJ5IG5ldyByb3csIGluY2x1ZGluZyByb3dzIGNyZWF0ZWQgaW5pdGlhbGx5LCB1bmxlc3MgdGhlIGRlZmF1bHRWYWx1ZSBpcyBub3QgZW1wdHlcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVGcm9tTGFzdFJvd1xuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0Um93VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFJvd1ZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFJvd1ZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFJvd1ZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIGNvcHkgdGhlIHZhbHVlIGludG8gbmV3IGFkZGVkIHJvdyBmcm9tIHRoZSBsYXN0IHJvdy4gSWYgZGVmYXVsdFJvd1ZhbHVlIGlzIHNldCBhbmQgdGhpcyBwcm9wZXJ0eSBlcXVhbHMgdG8gdHJ1ZSxcbiAgICogdGhlbiB0aGUgdmFsdWUgZm9yIG5ldyBhZGRlZCByb3cgaXMgbWVyZ2luZy5cbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0Um93VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzRGVmYXVsdFZhbHVlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSAmJiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRSb3dWYWx1ZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5taW5Sb3dDb3VudCA8IDEpIHJldHVybiBzdXBlci52YWx1ZUZyb21EYXRhKHZhbCk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHZhbCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSB2YWwubGVuZ3RoOyBpIDwgdGhpcy5taW5Sb3dDb3VudDsgaSsrKSB2YWwucHVzaCh7fSk7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSB8fFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKVxuICAgICkge1xuICAgICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0VtcHR5KCkgfHwgdGhpcy5yb3dDb3VudCA9PSAwKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5kZWZhdWx0Um93VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIG1vdmVSb3dCeUluZGV4ID0gKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcblxuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmFibGVSb3cgPSB2YWx1ZVtmcm9tSW5kZXhdO1xuXG4gICAgaWYgKCFtb3ZhYmxlUm93KSByZXR1cm47XG5cbiAgICB2YWx1ZS5zcGxpY2UoZnJvbUluZGV4LCAxKTtcbiAgICB2YWx1ZS5zcGxpY2UodG9JbmRleCwgMCwgbW92YWJsZVJvdyk7XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC5cbiAgICogQHNlZSBtaW5Sb3dDb3VudFxuICAgKiBAc2VlIG1heFJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucm93Q291bnRWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gYWxsb3cgcm93cyBkcmFnIGFuZCBkcm9wLlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd1Jvd3NEcmFnQW5kRHJvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSb3dzRHJhZ0FuZERyb3BcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd1Jvd3NEcmFnQW5kRHJvcCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgaW5pdFNvcnRhYmxlKGRvbU5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCFkb21Ob2RlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZG9tTm9kZSA9IGRvbU5vZGU7XG5cbiAgICBzZWxmLnNvcnRhYmxlSW5zdCA9IG5ldyBTb3J0YWJsZShkb21Ob2RlLCB7XG4gICAgICBhbmltYXRpb246IDEwMCxcbiAgICAgIGZvcmNlRmFsbGJhY2s6IHRydWUsXG4gICAgICBkZWxheTogMjAwLFxuICAgICAgZGVsYXlPblRvdWNoT25seTogdHJ1ZSxcbiAgICAgIGhhbmRsZTogXCJ0clwiLFxuICAgICAgb25FbmQoZXZ0OiBhbnkpIHtcbiAgICAgICAgc2VsZi5tb3ZlUm93QnlJbmRleChldnQub2xkRHJhZ2dhYmxlSW5kZXgsIGV2dC5uZXdEcmFnZ2FibGVJbmRleCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkVGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljUmVuZGVyZWRUYWJsZSh0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJvd0NvdW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93Q291bnRcIiwgMik7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcm93Q291bnRWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd0NvdW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhID0gZmFsc2U7XG4gICAgdmFyIHByZXZWYWx1ZSA9IHRoaXMucm93Q291bnRWYWx1ZTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiB2YWwpIHtcbiAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIHFWYWwuc3BsaWNlKHZhbCk7XG4gICAgICB0aGlzLnZhbHVlID0gcVZhbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuaW5pdGlhbFJvd0NvdW50ID0gdmFsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCBwcmV2VmFsdWUgPT0gMCkge1xuICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKHZhbCk7XG4gICAgICBmb3IgKHZhciBpID0gcHJldlZhbHVlOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgICAgdmFyIG5ld1JvdyA9IHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0VmFsdWVGb3JOZXdSb3coKSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRm9yTmV3Um93KCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5vbkdldFZhbHVlRm9yTmV3Um93Q2FsbEJhY2spIHtcbiAgICAgIHJlcyA9IHRoaXMub25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSByb3cgY291bnQuIEEgdXNlciBjb3VsZCBub3QgZGVsZXRlIGEgcm93IGlmIHRoZSByb3dDb3VudCBlcXVhbHMgdG8gbWluUm93Q291bnRcbiAgICogQHNlZSByb3dDb3VudFxuICAgKiBAc2VlIG1heFJvd0NvdW50XG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblJvd0NvdW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluUm93Q291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMCkgdmFsID0gMDtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5Sb3dDb3VudFwiLCB2YWwpO1xuICAgIGlmICh2YWwgPiB0aGlzLm1heFJvd0NvdW50KSB0aGlzLm1heFJvd0NvdW50ID0gdmFsO1xuICAgIGlmICh0aGlzLnJvd0NvdW50IDwgdmFsKSB0aGlzLnJvd0NvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSByb3cgY291bnQuIEEgdXNlciBjb3VsZCBub3QgYWRkIGEgcm93IGlmIHRoZSByb3dDb3VudCBlcXVhbHMgdG8gbWF4Um93Q291bnRcbiAgICogQHNlZSByb3dDb3VudFxuICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFJvd0NvdW50XCIsIHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhSb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPD0gMCkgcmV0dXJuO1xuICAgIGlmICh2YWwgPiBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQpXG4gICAgICB2YWwgPSBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQ7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm1heFJvd0NvdW50KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4Um93Q291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsIDwgdGhpcy5taW5Sb3dDb3VudCkgdGhpcy5taW5Sb3dDb3VudCA9IHZhbDtcbiAgICBpZiAodGhpcy5yb3dDb3VudCA+IHZhbCkgdGhpcy5yb3dDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZGlzYWJsZSBhYmlsaXR5IHRvIGFkZCBuZXcgcm93cy4gXCJBZGQgbmV3IFJvd1wiIGJ1dHRvbiBiZWNvbWVzIGludnNpYmxlIGluIFVJXG4gICAqIEBzZWUgY2FuQWRkUm93XG4gICAqIEBzZWUgYWxsb3dSZW1vdmVSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93QWRkUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRSb3dzXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dBZGRSb3dzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93QWRkUm93c1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBkaXNhYmxlIGFiaWxpdHkgdG8gcmVtb3ZlIHJvd3MuIFwiUmVtb3ZlXCIgcm93IGJ1dHRvbnMgYmVjb21lIGludnNpYmxlIGluIFVJXG4gICAqIEBzZWUgY2FuUmVtb3ZlUm93c1xuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd1JlbW92ZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUm93c1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93UmVtb3ZlUm93cyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd1JlbW92ZVJvd3NcIiwgdmFsKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIGEgbmV3IHJvdyBjYW4gYmUgYWRkZWQuXG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqIEBzZWUgbWF4Um93Q291bnRcbiAgICogQHNlZSBjYW5SZW1vdmVSb3dzXG4gICAqIEBzZWUgcm93Q291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FuQWRkUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsbG93QWRkUm93cyAmJiAhdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMucm93Q291bnQgPCB0aGlzLm1heFJvd0NvdW50XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVtb3ZlUm93c0NhbGxiYWNrOiAoYWxsb3c6IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHJvdyBjYW4gYmUgcmVtb3ZlZC5cbiAgICogQHNlZSBtaW5Sb3dDb3VudFxuICAgKiBAc2VlIGNhbkFkZFJvd1xuICAgKiBAc2VlIHJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhblJlbW92ZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9XG4gICAgICB0aGlzLmFsbG93UmVtb3ZlUm93cyAmJlxuICAgICAgIXRoaXMuaXNSZWFkT25seSAmJlxuICAgICAgdGhpcy5yb3dDb3VudCA+IHRoaXMubWluUm93Q291bnQ7XG4gICAgcmV0dXJuICEhdGhpcy5jYW5SZW1vdmVSb3dzQ2FsbGJhY2sgPyB0aGlzLmNhblJlbW92ZVJvd3NDYWxsYmFjayhyZXMpIDogcmVzO1xuICB9XG4gIHB1YmxpYyBjYW5SZW1vdmVSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXRyaXhBbGxvd1JlbW92ZVJvdyhcbiAgICAgIHRoaXMsXG4gICAgICAoPE1hdHJpeER5bmFtaWNSb3dNb2RlbD5yb3cpLmluZGV4LFxuICAgICAgcm93XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgYWRkIGEgbmV3IHJvdyBhbmQgZm9jdXMgdGhlIGNlbGwgaW4gdGhlIGZpcnN0IGNvbHVtbi5cbiAgICovXG4gIHB1YmxpYyBhZGRSb3dVSSgpIHtcbiAgICB2YXIgb2xkUm93Q291bnQgPSB0aGlzLnJvd0NvdW50O1xuICAgIHRoaXMuYWRkUm93KCk7XG4gICAgaWYgKG9sZFJvd0NvdW50ID09PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XG4gICAgdmFyIHEgPSB0aGlzLmdldFF1ZXN0aW9uVG9Gb2N1c09uQWRkaW5nUm93KCk7XG4gICAgaWYgKCEhcSkge1xuICAgICAgcS5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFF1ZXN0aW9uVG9Gb2N1c09uQWRkaW5nUm93KCk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcm93ID0gdGhpcy52aXNpYmxlUm93c1t0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHJvdy5jZWxsc1tpXS5xdWVzdGlvbjtcbiAgICAgIGlmICghIXEgJiYgcS5pc1Zpc2libGUgJiYgIXEuaXNSZWFkT25seSkge1xuICAgICAgICByZXR1cm4gcTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIGFkZCBhIG5ldyByb3cuXG4gICAqL1xuICBwdWJsaWMgYWRkUm93KCkge1xuICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogdGhpcywgY2FuQWRkUm93OiB0aGlzLmNhbkFkZFJvdyB9O1xuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5tYXRyaXhCZWZvcmVSb3dBZGRlZChvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmNhbkFkZFJvdykgcmV0dXJuO1xuICAgIHRoaXMub25TdGFydFJvd0FkZGluZ1JlbW92aW5nKCk7XG4gICAgdGhpcy5hZGRSb3dDb3JlKCk7XG4gICAgdGhpcy5vbkVuZFJvd0FkZGluZygpO1xuICAgIGlmICh0aGlzLmRldGFpbFBhbmVsU2hvd09uQWRkaW5nICYmIHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52aXNpYmxlUm93c1t0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAtIDFdLnNob3dEZXRhaWxQYW5lbCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBzaG93IGRldGFpbCBwYW5lbCBpbW1lZGlhdGVseSBvbiBhZGRpbmcgYSBuZXcgcm93LlxuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbFNob3dPbkFkZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsUGFuZWxTaG93T25BZGRpbmdcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZXRhaWxQYW5lbFNob3dPbkFkZGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxQYW5lbFNob3dPbkFkZGluZ1wiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBoYXNSb3dzQXNJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHVuYmluZFZhbHVlKCkge1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgdGhpcy5jbGVhclByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSAwO1xuICAgIHN1cGVyLnVuYmluZFZhbHVlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVmFsdWVTdXJ2ZXlFbGVtZW50KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFZGl0aW5nU3VydmV5RWxlbWVudCB8fCBzdXBlci5pc1ZhbHVlU3VydmV5RWxlbWVudCh2YWwpO1xuICB9XG4gIHByaXZhdGUgYWRkUm93Q29yZSgpIHtcbiAgICB2YXIgcHJldlJvd0NvdW50ID0gdGhpcy5yb3dDb3VudDtcbiAgICB0aGlzLnJvd0NvdW50ID0gdGhpcy5yb3dDb3VudCArIDE7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFJvd1ZhbHVlKHRydWUpO1xuICAgIHZhciBuZXdWYWx1ZSA9IG51bGw7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gdGhpcy5yb3dDb3VudCkge1xuICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLnJ1bkNlbGxzQ29uZGl0aW9uKFxuICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICAgKTtcbiAgICAgIHZhciByb3cgPSB0aGlzLnZpc2libGVSb3dzW3RoaXMucm93Q291bnQgLSAxXTtcbiAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkocm93LnZhbHVlKSkge1xuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmlzVmFsdWVTdXJ2ZXlFbGVtZW50KG5ld1ZhbHVlKSAmJlxuICAgICAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sIHJvdy52YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0gPSByb3cudmFsdWU7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgaWYgKHByZXZSb3dDb3VudCArIDEgPT0gdGhpcy5yb3dDb3VudCkge1xuICAgICAgICB0aGlzLnN1cnZleS5tYXRyaXhSb3dBZGRlZChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd3NbdGhpcy52aXNpYmxlUm93cy5sZW5ndGggLSAxXVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXREZWZhdWx0Um93VmFsdWUoaXNSb3dBZGRlZDogYm9vbGVhbik6IGFueSB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gdGhpcy5jb2x1bW5zW2ldLnRlbXBsYXRlUXVlc3Rpb247XG4gICAgICBpZiAoISFxICYmICF0aGlzLmlzVmFsdWVFbXB0eShxLmdldERlZmF1bHRWYWx1ZSgpKSkge1xuICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgICg8YW55PnJlcylbdGhpcy5jb2x1bW5zW2ldLm5hbWVdID0gcS5nZXREZWZhdWx0VmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRSb3dWYWx1ZSkpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRlZmF1bHRSb3dWYWx1ZSkge1xuICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgICg8YW55PnJlcylba2V5XSA9IHRoaXMuZGVmYXVsdFJvd1ZhbHVlW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc1Jvd0FkZGVkICYmIHRoaXMuZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3cpIHtcbiAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgaWYgKCEhdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID49IHRoaXMucm93Q291bnQgLSAxKSB7XG4gICAgICAgIHZhciByb3dWYWx1ZSA9IHZhbFt0aGlzLnJvd0NvdW50IC0gMl07XG4gICAgICAgIGZvciAodmFyIGtleSBpbiByb3dWYWx1ZSkge1xuICAgICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgICAoPGFueT5yZXMpW2tleV0gPSByb3dWYWx1ZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByb3cgYnkgaXQncyBpbmRleC4gSWYgY29uZmlybURlbGV0ZSBpcyB0cnVlLCBzaG93IGEgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgKiBAcGFyYW0gaW5kZXggYSByb3cgaW5kZXgsIGZyb20gMCB0byByb3dDb3VudCAtIDFcbiAgICogQHNlZSByZW1vdmVSb3dcbiAgICogQHNlZSBjb25maXJtRGVsZXRlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUm93VUkodmFsdWU6IGFueSkge1xuICAgIGlmICghIXZhbHVlICYmICEhdmFsdWUucm93TmFtZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHZhbHVlKTtcbiAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICAgIHZhbHVlID0gaW5kZXg7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF0aGlzLmlzUmVxdWlyZUNvbmZpcm1PblJvd0RlbGV0ZSh2YWx1ZSkgfHxcbiAgICAgIGNvbmZpcm1BY3Rpb24odGhpcy5jb25maXJtRGVsZXRlVGV4dClcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlUm93KHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzUmVxdWlyZUNvbmZpcm1PblJvd0RlbGV0ZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1EZWxldGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPj0gdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZVtpbmRleF0pO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcm93IGJ5IGl0J3MgaW5kZXguXG4gICAqIEBwYXJhbSBpbmRleCBhIHJvdyBpbmRleCwgZnJvbSAwIHRvIHJvd0NvdW50IC0gMVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmNhblJlbW92ZVJvd3MpIHJldHVybjtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93Q291bnQpIHJldHVybjtcbiAgICB2YXIgcm93ID1cbiAgICAgICEhdGhpcy52aXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoXG4gICAgICAgID8gdGhpcy52aXNpYmxlUm93c1tpbmRleF1cbiAgICAgICAgOiBudWxsO1xuICAgIGlmIChcbiAgICAgICEhcm93ICYmXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAhdGhpcy5zdXJ2ZXkubWF0cml4Um93UmVtb3ZpbmcodGhpcywgaW5kZXgsIHJvdylcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5vblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKTtcbiAgICB0aGlzLnJlbW92ZVJvd0NvcmUoaW5kZXgpO1xuICAgIHRoaXMub25FbmRSb3dSZW1vdmluZyhyb3cpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlUm93Q29yZShpbmRleDogbnVtYmVyKSB7XG4gICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NcbiAgICAgID8gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpbmRleF1cbiAgICAgIDogbnVsbDtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyAmJiBpbmRleCA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMucm93Q291bnRWYWx1ZS0tO1xuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB2YXIgdmFsID0gW107XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiBpbmRleCA8IHRoaXMudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbCA9IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICB9XG4gICAgICB2YWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHZhbCA9IHRoaXMuZGVsZXRlUm93VmFsdWUodmFsLCBudWxsKTtcbiAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4Um93UmVtb3ZlZCh0aGlzLCBpbmRleCwgcm93KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB0ZXh0IHNob3dpbmcgaW4gdGhlIGNvbmZpcm1hdGlvbiBkZWxldGUgZGlhbG9nIG9uIHJlbW92aW5nIGEgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY29uZmlybURlbGV0ZVwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBjb25maXJtRGVsZXRlVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29uZmlybURlbGV0ZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jQ29uZmlybURlbGV0ZVRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGFkZCByb3cgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFkZFJvd1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiYWRkUm93VGV4dFwiLCB0aGlzLmRlZmF1bHRBZGRSb3dUZXh0KTtcbiAgfVxuICBwdWJsaWMgc2V0IGFkZFJvd1RleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImFkZFJvd1RleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jQWRkUm93VGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImFkZFJvd1RleHRcIik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEFkZFJvd1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcbiAgICAgIHRoaXMuaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsID8gXCJhZGRSb3dcIiA6IFwiYWRkQ29sdW1uXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSAnQWRkIFJvdycgYnV0dG9uIGlzIHNob3duIG9uIGJvdHRvbSBpZiBjb2x1bW5MYXlvdXQgaXMgaG9yaXpvbnRhbCBhbmQgb24gdG9wIGlmIGNvbHVtbkxheW91dCBpcyB2ZXJ0aWNhbC4gPGJyLz5cbiAgICogWW91IG1heSBzZXQgaXQgdG8gXCJ0b3BcIiwgXCJib3R0b21cIiBvciBcInRvcEJvdHRvbVwiICh0byBzaG93IG9uIHRvcCBhbmQgYm90dG9tKS5cbiAgICogQHNlZSBjb2x1bW5MYXlvdXRcbiAgICovXG4gIHB1YmxpYyBnZXQgYWRkUm93TG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWRkUm93TG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBhZGRSb3dMb2NhdGlvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFkZFJvd0xvY2F0aW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldEFkZFJvd0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkUm93TG9jYXRpb247XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSBtYXRyaXggY29sdW1ucyB3aGVuIHRoZXJlIGlzIG5vIGFueSByb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhpZGVDb2x1bW5zSWZFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUNvbHVtbnNJZkVtcHR5XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGlkZUNvbHVtbnNJZkVtcHR5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhpZGVDb2x1bW5zSWZFbXB0eVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRTaG93Q29sdW1uc0lmRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZUNvbHVtbnNJZkVtcHR5O1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgcmVtb3ZlIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVtb3ZlUm93VGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInJlbW92ZVJvd1RleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVtb3ZlUm93VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVtb3ZlUm93VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZW1vdmVSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicmVtb3ZlUm93VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHJlbW92ZSByb3cgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVtcHR5Um93c1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJlbXB0eVJvd3NUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBlbXB0eVJvd3NUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJlbXB0eVJvd3NUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0VtcHR5Um93c1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJlbXB0eVJvd3NUZXh0XCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFJvd0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCByb3dzW2ldLCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICB2YXIgaGFzQ29udGV4dCA9ICEhY29udGV4dCA/IHRoaXMuY29sdW1ucy5pbmRleE9mKGNvbnRleHQpID4gLTEgOiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIHRoaXMuYWRkQ29sdW1uSW50b2FkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQob2JqZWN0cywgMCwgY29sdW1uKTtcbiAgICAgIGlmIChoYXNDb250ZXh0ICYmIGNvbHVtbiAhPSBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuYWRkQ29sdW1uSW50b2FkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQob2JqZWN0cywgLTEsIGNvbHVtbik7XG4gICAgICB9XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaiA9IDE7XG4gICAgICAgIGogPCBNYXRoLm1pbihzZXR0aW5ncy5tYXRyaXhNYXhSb3dDb3VudEluQ29uZGl0aW9uLCB0aGlzLnJvd0NvdW50KTtcbiAgICAgICAgaisrXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5hZGRDb2x1bW5JbnRvYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChvYmplY3RzLCBqLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZENvbHVtbkludG9hZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtblxuICApIHtcbiAgICB2YXIgcm93TmFtZSA9IHJvd0luZGV4ID4gLTEgPyBcIltcIiArIHJvd0luZGV4LnRvU3RyaW5nKCkgKyBcIl0uXCIgOiBcInJvdy5cIjtcbiAgICBvYmplY3RzLnB1c2goe1xuICAgICAgbmFtZTpcbiAgICAgICAgKHJvd0luZGV4ID4gLTEgPyB0aGlzLmdldFZhbHVlTmFtZSgpICsgcm93TmFtZSA6IHJvd05hbWUpICsgY29sdW1uLm5hbWUsXG4gICAgICB0ZXh0OlxuICAgICAgICAocm93SW5kZXggPiAtMSA/IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyByb3dOYW1lIDogcm93TmFtZSkgK1xuICAgICAgICBjb2x1bW4uZnVsbFRpdGxlLFxuICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1Jvd1RleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmICghaXNPblZhbHVlQ2hhbmdlZCAmJiB0aGlzLmhhc0Vycm9ySW5NaW5Sb3dzKCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBNaW5Sb3dDb3VudEVycm9yKHRoaXMubWluUm93Q291bnQsIHRoaXMpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvckluTWluUm93cygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5taW5Sb3dDb3VudCA8PSAwIHx8ICF0aGlzLmlzUmVxdWlyZWQgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHNldFJvd0NvdW50ID0gMDtcbiAgICBmb3IgKFxuICAgICAgdmFyIHJvd0luZGV4ID0gMDtcbiAgICAgIHJvd0luZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7XG4gICAgICByb3dJbmRleCsrXG4gICAgKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tyb3dJbmRleF07XG4gICAgICBpZiAoIXJvdy5pc0VtcHR5KSBzZXRSb3dDb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gc2V0Um93Q291bnQgPCB0aGlzLm1pblJvd0NvdW50O1xuICB9XG4gIHByb3RlY3RlZCBnZXRVbmlxdWVDb2x1bW5zKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmdldFVuaXF1ZUNvbHVtbnMoKTtcbiAgICBpZiAoISF0aGlzLmtleU5hbWUpIHtcbiAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZSh0aGlzLmtleU5hbWUpO1xuICAgICAgaWYgKCEhY29sdW1uICYmIHJlcy5pbmRleE9mKGNvbHVtbikgPCAwKSB7XG4gICAgICAgIHJlcy5wdXNoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEeW5hbWljUm93TW9kZWw+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4oKTtcbiAgICBpZiAodGhpcy5yb3dDb3VudCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyh0aGlzLmdldFJvd1ZhbHVlQnlJbmRleCh2YWwsIGkpKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5nZXREZWZhdWx0Um93VmFsdWUoZmFsc2UpKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KHZhbHVlOiBhbnkpOiBNYXRyaXhEeW5hbWljUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHluYW1pY1Jvd01vZGVsKHRoaXMucm93Q291bnRlcisrLCB0aGlzLCB2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlVmFsdWVDaGFuZ2VkKHZhbDogYW55KSB7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuO1xuICAgIHZhciBuZXdSb3dDb3VudCA9IHZhbC5sZW5ndGg7XG4gICAgaWYgKG5ld1Jvd0NvdW50ID09IHRoaXMucm93Q291bnQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhICYmIG5ld1Jvd0NvdW50IDwgdGhpcy5pbml0aWFsUm93Q291bnQpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5zZXRSb3dDb3VudFZhbHVlRnJvbURhdGEgPSB0cnVlO1xuICAgIHRoaXMucm93Q291bnRWYWx1ZSA9IG5ld1Jvd0NvdW50O1xuICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1ZhbHVlKCk6IGFueSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCk7XG4gICAgaWYgKCFyZXN1bHQgfHwgIUFycmF5LmlzQXJyYXkocmVzdWx0KSkgcmVzdWx0ID0gW107XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPiB0aGlzLnJvd0NvdW50KSByZXN1bHQuc3BsaWNlKHRoaXMucm93Q291bnQpO1xuICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFJvd1ZhbHVlKGZhbHNlKTtcbiAgICByb3dWYWx1ZSA9IHJvd1ZhbHVlIHx8IHt9O1xuICAgIGZvciAodmFyIGkgPSByZXN1bHQubGVuZ3RoOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmdldFVuYmluZFZhbHVlKHJvd1ZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGRlbGV0ZVJvd1ZhbHVlKFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICApOiBhbnkge1xuICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdChuZXdWYWx1ZVtpXSkgJiYgT2JqZWN0LmtleXMobmV3VmFsdWVbaV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzRW1wdHkgPyBudWxsIDogbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvd1ZhbHVlQnlJbmRleChxdWVzdGlvblZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHF1ZXN0aW9uVmFsdWUpICYmXG4gICAgICBpbmRleCA+PSAwICYmXG4gICAgICBpbmRleCA8IHF1ZXN0aW9uVmFsdWUubGVuZ3RoXG4gICAgICA/IHF1ZXN0aW9uVmFsdWVbaW5kZXhdXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJvd1ZhbHVlQ29yZShcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHF1ZXN0aW9uVmFsdWU6IGFueSxcbiAgICBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBhbnkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIHt9O1xuICAgIHZhciByZXMgPSB0aGlzLmdldFJvd1ZhbHVlQnlJbmRleChcbiAgICAgIHF1ZXN0aW9uVmFsdWUsXG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmluZGV4T2Yocm93KVxuICAgICk7XG4gICAgaWYgKCFyZXMgJiYgY3JlYXRlKSByZXMgPSB7fTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbmRlcmVkVGFibGUgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0Um93QWN0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIHN1cGVyLnNldERlZmF1bHRSb3dBY3Rpb25zKHJvdywgYWN0aW9ucyk7XG4gICAgaWYgKHRoaXMubWF0cml4LmFsbG93Um93c0RyYWdBbmREcm9wKSB7XG4gICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgIG5ldyBBY3Rpb24oe1xuICAgICAgICAgIGlkOiBcImRyYWctcm93XCIsXG4gICAgICAgICAgbG9jYXRpb246IFwic3RhcnRcIixcbiAgICAgICAgICBjb21wb25lbnQ6IFwic3YtbWF0cml4LWRyYWctZHJvcC1pY29uXCIsXG4gICAgICAgICAgZGF0YTogeyByb3c6IHJvdywgcXVlc3Rpb246IHRoaXMubWF0cml4IH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGR5bmFtaWNcIixcbiAgW1xuICAgIHsgbmFtZTogXCJyb3dzVmlzaWJsZUlmOmNvbmRpdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0FkZFJvd3M6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImFsbG93UmVtb3ZlUm93czpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwicm93Q291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDIsIG1pblZhbHVlOiAwLCBpc0JpbmRhYmxlOiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcIm1pblJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4Um93Q291bnQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwia2V5TmFtZVwiIH0sXG4gICAgXCJkZWZhdWx0Um93VmFsdWU6cm93dmFsdWVcIixcbiAgICBcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93OmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwiY29uZmlybURlbGV0ZTpib29sZWFuXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiY29uZmlybURlbGV0ZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIW9iaiB8fCBvYmouY29uZmlybURlbGV0ZTtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29uZmlybURlbGV0ZVRleHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYWRkUm93TG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcInRvcEJvdHRvbVwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJhZGRSb3dUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NBZGRSb3dUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwicmVtb3ZlUm93VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVtb3ZlUm93VGV4dFwiIH0sXG4gICAgXCJoaWRlQ29sdW1uc0lmRW1wdHk6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZW1wdHlSb3dzVGV4dDp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRW1wdHlSb3dzVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhpZGVDb2x1bW5zSWZFbXB0eVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIW9iaiB8fCBvYmouaGlkZUNvbHVtbnNJZkVtcHR5O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGV0YWlsUGFuZWxTaG93T25BZGRpbmc6Ym9vbGVhblwiLFxuICAgICAgZGVwZW5kc09uOiBcImRldGFpbFBhbmVsTW9kZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gb2JqLmRldGFpbFBhbmVsTW9kZSAhPT0gXCJub25lXCI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4ZHJvcGRvd25iYXNlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdO1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLmFkZERlZmF1bHRDb2x1bW5zKHEpO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7XG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5SW1wbCxcbiAgSVN1cnZleSxcbiAgSVBhbmVsLFxuICBJRWxlbWVudCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQcm9ncmVzc0luZm8sXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciB9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl90ZXh0XCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlVGV4dERhdGEgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciwgSVBhbmVsIHtcbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXk7XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3I7XG4gIGdldEFsbFZhbHVlcygpOiBhbnk7XG4gIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICBnZXRJdGVtRGVmYXVsdFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVUZXh0SXRlbU1vZGVsIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciwgSVN1cnZleURhdGEsIElTdXJ2ZXlJbXBsIHtcbiAgcHJpdmF0ZSBlZGl0b3JWYWx1ZTogUXVlc3Rpb25UZXh0TW9kZWw7XG4gIHByaXZhdGUgZGF0YTogSU11bHRpcGxlVGV4dERhdGE7XG5cbiAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6IChuZXdWYWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IGFueSA9IG51bGwsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVkaXRvclZhbHVlID0gdGhpcy5jcmVhdGVFZGl0b3IobmFtZSk7XG4gICAgdGhpcy5lZGl0b3IucXVlc3Rpb25UaXRsZVRlbXBsYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IudGl0bGVMb2NhdGlvbiA9IFwibGVmdFwiO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm11bHRpcGxldGV4dGl0ZW1cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlkO1xuICB9XG4gIHB1YmxpYyBnZXRPcmlnaW5hbE9iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5uYW1lID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiA8UXVlc3Rpb24+KDxhbnk+dGhpcy5kYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvcihuYW1lOiBzdHJpbmcpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChuYW1lKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHN1cGVyLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHRoaXMuZWRpdG9yLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMuZWRpdG9yLmxvY1N0cnNDaGFuZ2VkKCk7XG4gIH1cbiAgc2V0RGF0YShkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgaWYgKCEhZGF0YSkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVmYXVsdFZhbHVlID0gZGF0YS5nZXRJdGVtRGVmYXVsdFZhbHVlKHRoaXMubmFtZSk7XG4gICAgICB0aGlzLmVkaXRvci5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgdGhpcy5lZGl0b3IucGFyZW50ID0gZGF0YTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIG1ha2UgdGhlIGl0ZW0gYSByZXF1aXJlZC4gSWYgYSB1c2VyIGRvZXNuJ3QgZmlsbCB0aGUgaXRlbSB0aGVuIGEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5lZGl0b3IuaXNSZXF1aXJlZCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGlucHV0IHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5pbnB1dFR5cGU7XG4gIH1cbiAgcHVibGljIHNldCBpbnB1dFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5pbnB1dFR5cGUgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIEl0ZW0gdGl0bGUuIElmIGl0IGlzIGVtcHR5LCB0aGUgaXRlbSBuYW1lIGlzIHJlbmRlcmVkIGFzIHRpdGxlLiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIG1hcmtkb3duLlxuICAgKiBAc2VlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnRpdGxlID0gdmFsO1xuICB9XG4gIGdldCBsb2NUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgb3IgaHRtbCBmb3IgcmVuZGVyaW5nIHRoZSB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmZ1bGxUaXRsZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGguIElmIGl0IGlzIC0xLCBkZWZhdWwgdmFsdWUsIHRoZW4gdGhlIHN1cnZleSBtYXhUZXh0TGVuZ3RoIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogSWYgaXQgaXMgMCwgdGhlbiB0aGUgdmFsdWUgaXMgdW5saW1pdGVkXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubWF4TGVuZ3RoO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3IubWF4TGVuZ3RoID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXRNYXhMZW5ndGgoKTogYW55IHtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gSGVscGVycy5nZXRNYXhMZW5ndGgoXG4gICAgICB0aGlzLm1heExlbmd0aCxcbiAgICAgIHN1cnZleSA/IHN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTFcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcGxhY2UgaG9sZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5wbGFjZUhvbGRlcjtcbiAgfVxuICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucGxhY2VIb2xkZXIgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUGxhY2VIb2xkZXI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdGV4dCB0aGF0IHdpbGwgYmUgc2hvd24gb24gcmVxdWlyZWQgZXJyb3IuIFVzZSB0aGlzIHByb3BlcnR5LCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5yZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucmVxdWlyZWRFcnJvclRleHQgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1JlcXVpcmVkRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnNpemU7XG4gIH1cbiAgcHVibGljIHNldCBzaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2l6ZSA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KSB7XG4gICAgdGhpcy5lZGl0b3IudmFsaWRhdG9ycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaXRlbSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlzRW1wdHkoKTtcbiAgfVxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgfVxuICAvL0lTdXJ2ZXlJbXBsXG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFRleHRQcm9jZXNzb3IoKSA6IG51bGw7XG4gIH1cbiAgLy9JU3VydmV5RGF0YVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWUpO1xuICB9XG4gIHNldFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykge31cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGF0YSkgcmV0dXJuIHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFZhbHVlcygpO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIC8vSVZhbGlkYXRvck93bmVyXG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IHZhbGlkYXRlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICB9XG4gIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgbXVsdGlwbGUgdGV4dCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhLCBJUGFuZWwge1xuICBwdWJsaWMgc3RhdGljIGFkZERlZmF1bHRJdGVtcyhxdWVzdGlvbjogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCkge1xuICAgIHZhciBuYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0TXV0bGlwbGVUZXh0SXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgcXVlc3Rpb24uYWRkSXRlbShuYW1lc1tpXSk7XG4gIH1cblxuICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcIml0ZW1zXCIsIChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGl0ZW0uc2V0RGF0YSh0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaXRlbXNcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImNvbENvdW50XCIsICgpID0+IHtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpdGVtU2l6ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1zU2l6ZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0XCI7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLnNldERhdGEodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMuZWRpdG9yc09uU3VydmV5TG9hZCgpO1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkoaXRlbS52YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gIH1cbiAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci5vblN1cnZleVZhbHVlQ2hhbmdlZChpdGVtLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUl0ZW1zU2l6ZSgpIHtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci51cGRhdGVJbnB1dFNpemUoKTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGVkaXRvcnNPblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy5wZXJmb3JtRm9yRXZlcnlFZGl0b3IoKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCk6IHZvaWQgPT4ge1xuICAgICAgaXRlbS5lZGl0b3Iub25TdXJ2ZXlMb2FkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBwZXJmb3JtRm9yRXZlcnlFZGl0b3IoZnVuYzogKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCkgPT4gdm9pZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0uZWRpdG9yKSB7XG4gICAgICAgIGZ1bmMoaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpbnB1dCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIml0ZW1zXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXRlbXModmFsOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IHRleHQgaXRlbS5cbiAgICogQHBhcmFtIG5hbWUgYSBpdGVtIG5hbWVcbiAgICogQHBhcmFtIHRpdGxlIGEgaXRlbSB0aXRsZSAob3B0aW9uYWwpXG4gICAqL1xuICBwdWJsaWMgYWRkSXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlVGV4dEl0ZW0obmFtZSwgdGl0bGUpO1xuICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5pdGVtc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgaXRlbS5uYW1lLFxuICAgICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCIuXCIgKyBpdGVtLmZ1bGxUaXRsZSxcbiAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5TmFtZShwYXRoKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QoaXRlbSk7XG4gICAganNvbltcInR5cGVcIl0gPSBcInRleHRcIjtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1tpXS5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucy4gSXRlbXMgYXJlIHJlbmRyZWQgaW4gb25lIGxpbmUgaWYgdGhlIHZhbHVlIGlzIDAuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMSB8fCB2YWwgPiA1KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdGV4dCBpbnB1dCBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBpdGVtU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtU2l6ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1TaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbVNpemVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiByZW5kZXJlZCByb3dzLlxuICAgKi9cbiAgcHVibGljIGdldFJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGNvbENvdW50ID0gdGhpcy5jb2xDb3VudDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICByb3dzLnB1c2goW10pO1xuICAgICAgfVxuICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdLnB1c2goaXRlbXNbaV0pO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmIChpbmRleCA+PSBjb2xDb3VudCkge1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG4gIHByaXZhdGUgaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25JdGVtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVRleHRJdGVtKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwobmFtZSwgdGl0bGUpO1xuICB9XG4gIHByb3RlY3RlZCBvbkl0ZW1WYWx1ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbVZhbHVlID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMuaXRlbXNbaV0ubmFtZSBpbiB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGl0ZW1WYWx1ZSA9IHRoaXMudmFsdWVbdGhpcy5pdGVtc1tpXS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXRlbXNbaV0ub25WYWx1ZUNoYW5nZWQoaXRlbVZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1tpXS5lZGl0b3IuaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gKFxuICAgICAgICBoYXNFcnJvcnM6IGJvb2xlYW5cbiAgICAgICkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgIH07XG4gICAgICBpZiAoXG4gICAgICAgICEhcmVjICYmXG4gICAgICAgIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlICYmXG4gICAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLmlzRW1wdHkoKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHJlcyA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzdWx0ID0gc3VwZXIuZ2V0QWxsRXJyb3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXJyb3JzID0gdGhpcy5pdGVtc1tpXS5lZGl0b3IuZ2V0QWxsRXJyb3JzKCk7XG4gICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgY2xlYXJFcnJvcnMoKSB7XG4gICAgc3VwZXIuY2xlYXJFcnJvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb250YWluc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0Q29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLmVkaXRvci5jb250YWluc0Vycm9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNBbnN3ZXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLmdldElzQW5zd2VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVkaXRvciA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yO1xuICAgICAgaWYgKGVkaXRvci5pc1Zpc2libGUgJiYgIWVkaXRvci5pc0Fuc3dlcmVkKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKHRoaXMuaXRlbXNbaV0uZWRpdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhlbGVtZW50cywgdGhpcy5pc1JlcXVpcmVkKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgdmFyIHZhbCA9IHZhbHVlW2l0ZW0ubmFtZV07XG4gICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgY29udGludWU7XG4gICAgICB2YXIgaXRlbU5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIWl0ZW0udGl0bGUpIHtcbiAgICAgICAgaXRlbU5hbWUgPSBpdGVtLnRpdGxlO1xuICAgICAgfVxuICAgICAgKDxhbnk+cmVzKVtpdGVtTmFtZV0gPSBpdGVtLmVkaXRvci5nZXREaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgdmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvL0lNdWx0aXBsZVRleHREYXRhXG4gIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVbbmFtZV07XG4gIH1cbiAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgIG5ld1ZhbHVlID0ge307XG4gICAgfVxuICAgIG5ld1ZhbHVlW25hbWVdID0gdmFsdWU7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBnZXRJdGVtRGVmYXVsdFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kZWZhdWx0VmFsdWUgPyB0aGlzLmRlZmF1bHRWYWx1ZVtuYW1lXSA6IG51bGw7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiO1xuICB9XG4gIC8vSVBhbmVsXG4gIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHt9XG4gIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibGVmdFwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBlbGVtZW50V2lkdGhDaGFuZ2VkKGVsOiBJRWxlbWVudCkge31cbiAgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGluZGV4T2YoZWw6IElFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgZW5zdXJlUm93c1Zpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibXVsdGlwbGV0ZXh0aXRlbVwiLFxuICBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImlucHV0VHlwZVwiLFxuICAgICAgZGVmYXVsdDogXCJ0ZXh0XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIFwiY29sb3JcIixcbiAgICAgICAgXCJkYXRlXCIsXG4gICAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwibW9udGhcIixcbiAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgXCJwYXNzd29yZFwiLFxuICAgICAgICBcInJhbmdlXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGV4dFwiLFxuICAgICAgICBcInRpbWVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAgeyBuYW1lOiBcIm1heExlbmd0aDpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwic2l6ZTpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXG4gICAgICBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKFwiXCIpO1xuICB9XG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm11bHRpcGxldGV4dFwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFpdGVtczp0ZXh0aXRlbXNcIiwgY2xhc3NOYW1lOiBcIm11bHRpcGxldGV4dGl0ZW1cIiB9LFxuICAgIHsgbmFtZTogXCJpdGVtU2l6ZTpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIGNob2ljZXM6IFsxLCAyLCAzLCA0LCA1XSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKTtcbiAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5hZGREZWZhdWx0SXRlbXMocSk7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5pbXBvcnQge1xuICBJRWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBJUGFuZWwsXG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5LFxuICBJU3VydmV5SW1wbCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQcm9ncmVzc0luZm8sXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQge1xuICBUZXh0UHJlUHJvY2Vzc29yVmFsdWUsXG4gIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvcixcbn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgS2V5RHVwbGljYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gXCIuL2tub2Nrb3V0L2tvcGFnZVwiO1xuaW1wb3J0IHsgY29uZmlybUFjdGlvbiB9IGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEge1xuICBnZXRJdGVtSW5kZXgoaXRlbTogSVN1cnZleURhdGEpOiBudW1iZXI7XG4gIGdldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEpOiBhbnk7XG4gIHNldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEsIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBhbnk7XG4gIGdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KG5hbWU6IHN0cmluZywgcGFuZWxJbmRleDogbnVtYmVyKTogUXVlc3Rpb247XG4gIGdldFN1cnZleSgpOiBJU3VydmV5O1xuICBnZXRSb290RGF0YSgpOiBJU3VydmV5RGF0YTtcbn1cblxuY2xhc3MgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvciBleHRlbmRzIFF1ZXN0aW9uVGV4dFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSxcbiAgICBwcm90ZWN0ZWQgcGFuZWxJdGVtOiBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0sXG4gICAgcHJvdGVjdGVkIHZhcmlhYmxlTmFtZTogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHZhcmlhYmxlTmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxJdGVtLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxJdGVtLnBhbmVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IHBhbmVsSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0SXRlbUluZGV4KHRoaXMucGFuZWxJdGVtKSA6IC0xO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEl0ZW0uZ2V0QWxsVmFsdWVzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIHZhciBpbmRleCA9IHRoaXMucGFuZWxJbmRleDtcbiAgICByZXR1cm4gaW5kZXggPiAtMVxuICAgICAgPyB0aGlzLmRhdGEuZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkobmFtZSwgaW5kZXgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ3VzdG9tUHJvY2Vzc1RleHQodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAodGV4dFZhbHVlLm5hbWUgPT0gUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnBhbmVsSW5kZXg7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0ZXh0VmFsdWUubmFtZS5pbmRleE9mKFxuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uUGFyZW50SXRlbVZhcmlhYmxlTmFtZSArIFwiLlwiXG4gICAgICApID09IDBcbiAgICApIHtcbiAgICAgIHZhciBxID0gPFF1ZXN0aW9uPig8YW55PnRoaXMuZGF0YSk7XG4gICAgICBpZiAoISFxICYmICEhcS5wYXJlbnRRdWVzdGlvbiAmJiAhIXEucGFyZW50KSB7XG4gICAgICAgIHZhciBkYXRhID0gKDxhbnk+cS5wYXJlbnQpLmRhdGE7XG4gICAgICAgIHZhciBwcm9jZXNzb3IgPSBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvcihcbiAgICAgICAgICA8SVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YT4oPGFueT5xLnBhcmVudFF1ZXN0aW9uKSxcbiAgICAgICAgICA8UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtPmRhdGEsXG4gICAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHRleHQgPSB0ZXh0VmFsdWUubmFtZS5yZXBsYWNlKFxuICAgICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5QYXJlbnRJdGVtVmFyaWFibGVOYW1lLFxuICAgICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lXG4gICAgICAgICk7XG4gICAgICAgIHZhciByZXMgPSBwcm9jZXNzb3IucHJvY2Vzc1ZhbHVlKHRleHQsIHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSByZXMuaXNFeGlzdHM7XG4gICAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHJlcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSBpbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJU3VydmV5SW1wbCB7XG4gIHB1YmxpYyBzdGF0aWMgSXRlbVZhcmlhYmxlTmFtZSA9IFwicGFuZWxcIjtcbiAgcHVibGljIHN0YXRpYyBQYXJlbnRJdGVtVmFyaWFibGVOYW1lID0gXCJwYXJlbnRQYW5lbFwiO1xuICBwdWJsaWMgc3RhdGljIEluZGV4VmFyaWFibGVOYW1lID0gXCJwYW5lbEluZGV4XCI7XG4gIHByaXZhdGUgcGFuZWxWYWx1ZTogUGFuZWxNb2RlbDtcbiAgcHJpdmF0ZSBkYXRhOiBJUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhO1xuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVRleHRQcm9jZXNzb3I7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEsIHBhbmVsOiBQYW5lbE1vZGVsKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnBhbmVsVmFsdWUgPSBwYW5lbDtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3IgPSBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvcihcbiAgICAgIGRhdGEsXG4gICAgICB0aGlzLFxuICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVcbiAgICApO1xuICAgIHRoaXMuc2V0U3VydmV5SW1wbCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCgpIHtcbiAgICB0aGlzLnBhbmVsLnNldFN1cnZleUltcGwodGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5kYXRhLnNldFBhbmVsSXRlbURhdGEodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIHB1YmxpYyBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuZ2V0VmFsdWUobmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXgpO1xuICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZywgbG9jTm90aWZpY2F0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnNldFZhbHVlKG5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4LCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRQYW5lbEl0ZW1EYXRhKHRoaXMpO1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHZhciBzdXJ2ZXlWYWx1ZXMgPVxuICAgICAgISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGEuZ2V0Um9vdERhdGEoKVxuICAgICAgICA/IHRoaXMuZGF0YS5nZXRSb290RGF0YSgpLmdldEZpbHRlcmVkVmFsdWVzKClcbiAgICAgICAgOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3VydmV5VmFsdWVzKSB7XG4gICAgICB2YWx1ZXNba2V5XSA9IHN1cnZleVZhbHVlc1trZXldO1xuICAgIH1cbiAgICB2YWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVdID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHZhbHVlc1tcbiAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIF0gPSB0aGlzLmRhdGEuZ2V0SXRlbUluZGV4KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YS5nZXRSb290RGF0YSgpKVxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRSb290RGF0YSgpLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbCBpbXBsZW1lbnRzIElTdXJ2ZXlJbXBsIHtcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEpIHt9XG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldFN1cnZleSgpO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBwYW5lbCBkeW1hbmljIHF1ZXN0aW9uLiBZb3Ugc2V0dXAgdGhlIHRlbXBsYXRlIHBhbmVsLCBidXQgYWRkaW5nIGVsZW1lbnRzIChhbnkgcXVlc3Rpb24gb3IgYSBwYW5lbCkgYW5kIGFzc2lnbiBhIHRleHQgdG8gaXQncyB0aXRsZSwgYW5kIHRoaXMgcGFuZWwgd2lsbCBiZSB1c2VkIGFzIGEgdGVtcGxhdGUgb24gY3JlYXRpbmcgZHluYW1pYyBwYW5lbHMuIFRoZSBudW1iZXIgb2YgcGFuZWxzIGlzIGRlZmluZWQgYnkgcGFuZWxDb3VudCBwcm9wZXJ0eS5cbiAqIEFuIGVuZC11c2VyIG1heSBkeW5hbWljYWxseSBhZGQvcmVtb3ZlIHBhbmVscywgdW5sZXNzIHlvdSBmb3JiaWRkZW4gdGhpcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEge1xuICBwcml2YXRlIHRlbXBsYXRlVmFsdWU6IFBhbmVsTW9kZWw7XG4gIHByaXZhdGUgbG9hZGluZ1BhbmVsQ291bnQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjaGFuZ2luZ1ZhbHVlUXVlc3Rpb246IFF1ZXN0aW9uO1xuICBwcml2YXRlIGN1cnJlbnRJbmRleFZhbHVlOiBudW1iZXIgPSAtMTtcblxuICByZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBwYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInBhbmVsc1wiKTtcbiAgICB0aGlzLnRlbXBsYXRlVmFsdWUgPSB0aGlzLmNyZWF0ZUFuZFNldHVwTmV3UGFuZWxPYmplY3QoKTtcbiAgICB0aGlzLnRlbXBsYXRlLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdGhpcy50ZW1wbGF0ZS5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnbiA9IHRoaXM7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy50ZW1wbGF0ZS5hZGRFbGVtZW50Q2FsbGJhY2sgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBzZWxmLmFkZE9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2soZWxlbWVudCk7XG4gICAgICBzZWxmLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9O1xuICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgc2VsZi5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxBZGRUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFJlbW92ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsUHJldlRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsTmV4dFRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInBhbmVsc1N0YXRlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5zZXRQYW5lbHNTdGF0ZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCkge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIHRoaXMuc2V0VGVtcGxhdGVQYW5lbFN1cnZleUltcGwoKTtcbiAgICB0aGlzLnNldFBhbmVsc1N1cnZleUltcGwoKTtcbiAgfVxuICBwcml2YXRlIGFzc2lnbk9uUHJvcGVydHlDaGFuZ2VkVG9UZW1wbGF0ZSgpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnRlbXBsYXRlLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50c1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICBzZWxmLm9uVGVtcGxhdGVFbGVtZW50UHJvcGVydHlDaGFuZ2VkKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICg8UGFuZWxNb2RlbD4oPGFueT5lbGVtZW50KSkuYWRkRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBzZWxmLmFkZE9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2soZWxlbWVudCk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG9uVGVtcGxhdGVFbGVtZW50UHJvcGVydHlDaGFuZ2VkKGVsZW1lbnQ6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5wYW5lbHMubGVuZ3RoID09IDApXG4gICAgICByZXR1cm47XG4gICAgdmFyIHByb3BlcnR5ID0gU2VyaWFsaXplci5maW5kUHJvcGVydHkoZWxlbWVudC5nZXRUeXBlKCksIG9wdGlvbnMubmFtZSk7XG4gICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcGFuZWxzW2ldLmdldFF1ZXN0aW9uQnlOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgICBpZiAoISFxdWVzdGlvbiAmJiAoPGFueT5xdWVzdGlvbilbb3B0aW9ucy5uYW1lXSAhPT0gb3B0aW9ucy5uZXdWYWx1ZSkge1xuICAgICAgICAoPGFueT5xdWVzdGlvbilbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFuZWxkeW5hbWljXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBjbGVhck9uRGVsZXRpbmdDb250YWluZXIoKSB7XG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcbiAgICAgIHBhbmVsLmNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBQYW5lbC4gVGhpcyBwYW5lbCBpcyB1c2VkIGFzIGEgdGVtcGxhdGUgb24gY3JlYXRpZ24gZHluYW1pYyBwYW5lbHNcbiAgICogQHNlZSAgdGVtcGxhdGVFbGVtZW50c1xuICAgKiBAc2VlIHRlbXBsYXRlVGl0bGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFBhbmVsKCk6IElQYW5lbCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBQYW5lbCBlbGVtZW50cywgcXVlc3Rpb25zIGFuZCBwYW5lbHMuXG4gICAqIEBzZWUgIHRlbXBsYXRlRWxlbWVudHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmVsZW1lbnRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgdGl0bGUgcHJvcGVydHkuXG4gICAqIEBzZWUgIHRlbXBsYXRlRWxlbWVudHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnRpdGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVtcGxhdGVUaXRsZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS50aXRsZSA9IG5ld1ZhbHVlO1xuICB9XG4gIGdldCBsb2NUZW1wbGF0ZVRpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5sb2NUaXRsZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIFBhbmVsIGRlc2NyaXB0aW9uIHByb3BlcnR5LlxuICAgKiBAc2VlICB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuZGVzY3JpcHRpb247XG4gIH1cbiAgcHVibGljIHNldCB0ZW1wbGF0ZURlc2NyaXB0aW9uKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlLmRlc2NyaXB0aW9uID0gbmV3VmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RlbXBsYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmxvY0Rlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpdGVtcygpOiBBcnJheTxJU3VydmV5RGF0YT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaCh0aGlzLnBhbmVsc1tpXS5kYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogVGhlIGFycmF5IG9mIGR5bmFtaWMgcGFuZWxzIGNyZWF0ZWQgYmFzZWQgb24gcGFuZWwgdGVtcGxhdGVcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxzKCk6IEFycmF5PFBhbmVsTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgY3VycmVudCBhY3RpdmUgZHluYW1pY2FsIHBhbmVsIHdoZW4gdGhlIHJlbmRlck1vZGUgaXMgbm90IFwibGlzdFwiLiBJZiB0aGVyZSBpcyBubyBkeW1hbWljIHBhbmVsIChwYW5lbENvdW50ID0gMCkgb3IgcmVuZGVyTW9kZSBlcXVhbHMgXCJsaXN0XCIgaXQgcmV0dXJucyAtMSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYSB2YWx1ZSBmcm9tIDAgdG8gcGFuZWxDb3VudCAtIDEuXG4gICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudEluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuaXNSZW5kZXJNb2RlTGlzdCkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIDA7XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4VmFsdWUgPCAwICYmIHRoaXMucGFuZWxDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4VmFsdWUgPSAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA+PSB0aGlzLnBhbmVsQ291bnQpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4VmFsdWUgPSB0aGlzLnBhbmVsQ291bnQgLSAxO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXhWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGN1cnJlbnRJbmRleCh2YWw6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleFZhbHVlICE9PSB2YWwpIHtcbiAgICAgIGlmICh2YWwgPj0gdGhpcy5wYW5lbENvdW50KSB2YWwgPSB0aGlzLnBhbmVsQ291bnQgLSAxO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA9IHZhbDtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGFjdGl2ZSBkeW5hbWljYWwgcGFuZWwgd2hlbiB0aGUgcmVuZGVyTW9kZSBpcyBub3QgXCJsaXN0XCIuIElmIHRoZXJlIGlzIG5vIGR5bWFtaWMgcGFuZWwgKHBhbmVsQ291bnQgPSAwKSBvciByZW5kZXJNb2RlIGVxdWFscyBcImxpc3RcIiBpdCByZXR1cm5zIG51bGwuXG4gICAqIEBzZWUgY3VycmVuSW5kZXhcbiAgICogQHNlZSBwYW5lbHNcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnBhbmVscy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhbmVsc1tpbmRleF07XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlLCB0byBzaG93IGEgY29uZmlybWF0aW9uIGRpYWxvZyBvbiByZW1vdmluZyBhIHBhbmVsXG4gICAqIEBzZWUgQ29uZmlybURlbGV0ZVRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgY29uZmlybURlbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBjb25maXJtRGVsZXRlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbmZpcm1EZWxldGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGEgcXVlc3Rpb24gbmFtZSB1c2VkIGluIHRoZSB0ZW1wbGF0ZSBwYW5lbCBhbmQgdGhlIGxpYnJhcnkgc2hvd3MgZHVwbGljYXRpb24gZXJyb3IsIGlmIHRoZXJlIGFyZSBzYW1lIHZhbHVlcyBpbiBkaWZmZXJlbnQgcGFuZWxzIG9mIHRoaXMgcXVlc3Rpb24uXG4gICAqIEBzZWUga2V5RHVwbGljYXRpb25FcnJvclxuICAgKi9cbiAgcHVibGljIGdldCBrZXlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImtleU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBrZXlOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dCBzaG93aW5nIGluIHRoZSBjb25maXJtYXRpb24gZGVsZXRlIGRpYWxvZyBvbiByZW1vdmluZyBhIHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY29uZmlybURlbGV0ZVwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBjb25maXJtRGVsZXRlVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29uZmlybURlbGV0ZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jQ29uZmlybURlbGV0ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29uZmlybURlbGV0ZVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkdXBsaWNhdGlvbiB2YWx1ZSBlcnJvciB0ZXh0LiBTZXQgaXQgdG8gc2hvdyB0aGUgdGV4dCBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdC5cbiAgICogQHNlZSBrZXlOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBrZXlEdXBsaWNhdGlvbkVycm9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0tleUR1cGxpY2F0aW9uRXJyb3IoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHByZXZpb3VzIGJ1dHRvbiB0ZXh0LiBQcmV2aW91cyBidXR0b24gc2hvd3MgdGhlIHByZXZpb3VzIHBhbmVsLCBjaGFuZ2UgdGhlIGN1cnJlbnRQYW5lbCwgd2hlbiB0aGUgcmVuZGVyTW9kZSBkb2Vzbid0IGVxdWFsIHRvIFwibGlzdFwiLlxuICAgKiBAc2VlIGN1cnJlbnRQYW5lbFxuICAgKiBAc2VlIGN1cnJlbnRJbmRleFxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxQcmV2VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxQcmV2VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBhZ2VQcmV2VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbFByZXZUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbFByZXZUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsUHJldlRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxQcmV2VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IG5leHQgYnV0dG9uIHRleHQuIE5leHQgYnV0dG9uIHNob3dzIHRoZSBuZXh0IHBhbmVsLCBjaGFuZ2UgdGhlIGN1cnJlbnRQYW5lbCwgd2hlbiB0aGUgcmVuZGVyTW9kZSBkb2Vzbid0IGVxdWFsIHRvIFwibGlzdFwiLlxuICAgKiBAc2VlIGN1cnJlbnRQYW5lbFxuICAgKiBAc2VlIGN1cnJlbnRJbmRleFxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxOZXh0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxOZXh0VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBhZ2VOZXh0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbE5leHRUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbE5leHRUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsTmV4dFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxOZXh0VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGFkZCBwYW5lbCBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxBZGRUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxBZGRUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiYWRkUGFuZWxcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFuZWxBZGRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsQWRkVGV4dFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsQWRkVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbEFkZFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiByZW1vdmUgcGFuZWwgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVsUmVtb3ZlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInBhbmVsUmVtb3ZlVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlbW92ZVBhbmVsXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsUmVtb3ZlVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxSZW1vdmVUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1BhbmVsUmVtb3ZlVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFJlbW92ZVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSByZW5kZXJNb2RlIGVxdWFscyB0byBcInByb2dyZXNzVG9wXCIgb3IgXCJwcm9ncmVzc1RvcEJvdHRvbVwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUHJvZ3Jlc3NUb3BTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlbmRlck1vZGUgPT0gXCJwcm9ncmVzc1RvcFwiIHx8IHRoaXMucmVuZGVyTW9kZSA9PSBcInByb2dyZXNzVG9wQm90dG9tXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcmVuZGVyTW9kZSBlcXVhbHMgdG8gXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Byb2dyZXNzQm90dG9tU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZW5kZXJNb2RlID09IFwicHJvZ3Jlc3NCb3R0b21cIiB8fFxuICAgICAgdGhpcy5yZW5kZXJNb2RlID09IFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGN1cnJlbnRJbmRleCBpcyBtb3JlIHRoYW4gMC5cbiAgICogQHNlZSBjdXJyZW5JbmRleFxuICAgKiBAc2VlIGN1cnJlblBhbmVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUHJldkJ1dHRvblNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gY3VycmVudEluZGV4IGlzIG1vcmUgdGhhbiBvciBlcXVhbCAwIGFuZCBsZXNzIHRoYW4gcGFuZWxDb3VudCAtIDEuXG4gICAqIEBzZWUgY3VycmVuSW5kZXhcbiAgICogQHNlZSBjdXJyZW5QYW5lbFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNOZXh0QnV0dG9uU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPj0gMCAmJiB0aGlzLmN1cnJlbnRJbmRleCA8IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHNob3dSYW5nZUluUHJvZ3Jlc3MgZXF1YWxzIHRvIHRydWUsIHJlbmRlck1vZGUgZG9lc24ndCBlcXVhbCB0byBcImxpc3RcIiBhbmQgcGFuZWxDb3VudCBpcyA+PSAyLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1JhbmdlU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zaG93UmFuZ2VJblByb2dyZXNzICYmIHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5wYW5lbENvdW50ID4gMVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gaW5jbHVkZUhpZGRlbiA/IFt0aGlzLnRlbXBsYXRlXSA6IHRoaXMudGVtcGxhdGVFbGVtZW50cztcbiAgfVxuICBwcml2YXRlIGlzQWRkaW5nTmV3UGFuZWxzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYWRkaW5nTmV3UGFuZWxzVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBpc05ld1BhbmVsc1ZhbHVlQ2hhbmdlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCkge1xuICAgIHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMgPSB0cnVlO1xuICAgIHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQWZ0ZXJQYW5lbHNDcmVhdGluZygpIHtcbiAgICB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZTtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHJldHVybiB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzXG4gICAgICA/IHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWVcbiAgICAgIDogc3VwZXIuZ2V0VmFsdWVDb3JlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMpIHtcbiAgICAgIHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5zZXRWYWx1ZUNvcmUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gZ2V0L3NldCB0aGUgbnVtYmVyIG9mIGR5bmFtaWMgcGFuZWxzLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgbWluUGFuZWxDb3VudFxuICAgKiBAc2VlIG1heFBhbmVsQ291bnRcbiAgICogQHNlZSBhZGRQYW5lbFxuICAgKiBAc2VlIHJlbW92ZVBhbmVsXG4gICAqIEBzZWUgcmVtb3ZlUGFuZWxVSVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc0Rlc2lnbk1vZGVcbiAgICAgID8gdGhpcy5sb2FkaW5nUGFuZWxDb3VudFxuICAgICAgOiB0aGlzLnBhbmVscy5sZW5ndGg7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDApIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5sb2FkaW5nUGFuZWxDb3VudCA9IHZhbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbCA9PSB0aGlzLnBhbmVscy5sZW5ndGggfHwgdGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUJpbmRpbmdzKFwicGFuZWxDb3VudFwiLCB2YWwpO1xuICAgIHRoaXMucHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZygpO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnBhbmVsQ291bnQ7IGkgPCB2YWw7IGkrKykge1xuICAgICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbCgpO1xuICAgICAgdGhpcy5wYW5lbHMucHVzaChwYW5lbCk7XG4gICAgICBpZiAodGhpcy5yZW5kZXJNb2RlID09IFwibGlzdFwiICYmIHRoaXMucGFuZWxzU3RhdGUgIT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgaWYgKHRoaXMucGFuZWxzU3RhdGUgPT09IFwiZXhwYW5kXCIpIHtcbiAgICAgICAgICBwYW5lbC5leHBhbmQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoISFwYW5lbC50aXRsZSkge1xuICAgICAgICAgICAgcGFuZWwuY29sbGFwc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbCA8IHRoaXMucGFuZWxDb3VudCkgdGhpcy5wYW5lbHMuc3BsaWNlKHZhbCwgdGhpcy5wYW5lbENvdW50IC0gdmFsKTtcbiAgICB0aGlzLnNldFZhbHVlQWZ0ZXJQYW5lbHNDcmVhdGluZygpO1xuICAgIHRoaXMuc2V0VmFsdWVCYXNlZE9uUGFuZWxDb3VudCgpO1xuICAgIHRoaXMucmVSdW5Db25kaXRpb24oKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBhbGxvdyB0aGUgZW5kLXVzZXIgdG8gY29sbGFwc2UvZXhwYW5kIHRoZSBwYW5lbHMuIEl0IHdvcmtzIG9ubHkgaWYgdGhlIHJlbmRlck1vZGUgcHJvcGVydHkgZXF1YWxzIHRvIFwibGlzdFwiIGFuZCB0ZW1wbGF0ZVRpdGxlIHByb3BlcnR5IGlzIG5vdCBlbXB0eS4gVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIGF2YWlsYWJsZTpcbiAgICogPGJyLz4gZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2VyIGNhbid0IGNvbGxhcHNlL2V4cGFuZCBwYW5lbHNcbiAgICogPGJyLz4gZXhwYW5kZWQgLSBVc2VyIGNhbiBjb2xsYXBzZS9leHBhbmQgcGFuZWxzIGFuZCBhbGwgcGFuZWxzIGFyZSBleHBhbmRlZCBieSBkZWZhdWx0XG4gICAqIDxici8+IGNvbGxhcHNlZCAtIFVzZXIgY2FuIGNvbGxhcHNlL2V4cGFuZCBwYW5lbHMgYW5kIGFsbCBwYW5lbHMgYXJlIGNvbGxhcHNlZCBieSBkZWZhdWx0XG4gICAqIDxici8+IGZpcnN0RXhwYW5kZWQgLSBVc2VyIGNhbiBjb2xsYXBzZS9leHBhbmQgcGFuZWxzLiBUaGUgZmlyc3QgcGFuZWwgaXMgZXhwYW5kZWQgYW5kIG90aGVycyBhcmUgY29sbGFwc2VkXG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKiBAc2VlIHRlbXBsYXRlVGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxzU3RhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzU3RhdGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbHNTdGF0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhbmVsc1N0YXRlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpIHtcbiAgICB0aGlzLnRlbXBsYXRlLnNldFN1cnZleUltcGwoXG4gICAgICB0aGlzLmlzRGVzaWduTW9kZVxuICAgICAgICA/IHRoaXMuc3VydmV5SW1wbFxuICAgICAgICA6IG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbCh0aGlzKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQYW5lbHNTdXJ2ZXlJbXBsKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2ldO1xuICAgICAgaWYgKHBhbmVsID09IHRoaXMudGVtcGxhdGUpIGNvbnRpbnVlO1xuICAgICAgcGFuZWwuc2V0U3VydmV5SW1wbCg8UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtPnBhbmVsLmRhdGEpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldFBhbmVsc1N0YXRlKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnJlbmRlck1vZGUgIT0gXCJsaXN0XCIgfHwgIXRoaXMudGVtcGxhdGVUaXRsZSlcbiAgICAgIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnBhbmVsc1N0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImZpcnN0RXhwYW5kZWRcIikge1xuICAgICAgICBzdGF0ZSA9IGkgPT09IDAgPyBcImV4cGFuZGVkXCIgOiBcImNvbGxhcHNlZFwiO1xuICAgICAgfVxuICAgICAgdGhpcy5wYW5lbHNbaV0uc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlID0gW107XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PSB0aGlzLnBhbmVsQ291bnQpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gdmFsdWUubGVuZ3RoOyBpIDwgdGhpcy5wYW5lbENvdW50OyBpKyspIHZhbHVlLnB1c2goe30pO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLnBhbmVsQ291bnQpIHtcbiAgICAgIHZhbHVlLnNwbGljZSh0aGlzLnBhbmVsQ291bnQsIHZhbHVlLmxlbmd0aCAtIHRoaXMucGFuZWxDb3VudCk7XG4gICAgfVxuICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBwYW5lbCBjb3VudC4gQSB1c2VyIGNvdWxkIG5vdCBkZWxldGUgYSBwYW5lbCBpZiB0aGUgcGFuZWxDb3VudCBlcXVhbHMgdG8gbWluUGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblBhbmVsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluUGFuZWxDb3VudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblBhbmVsQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMCkgdmFsID0gMDtcbiAgICBpZiAodmFsID09IHRoaXMubWluUGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsID4gdGhpcy5tYXhQYW5lbENvdW50KSB0aGlzLm1heFBhbmVsQ291bnQgPSB2YWw7XG4gICAgaWYgKHRoaXMucGFuZWxDb3VudCA8IHZhbCkgdGhpcy5wYW5lbENvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBwYW5lbCBjb3VudC4gQSB1c2VyIGNvdWxkIG5vdCBhZGQgYSBwYW5lbCBpZiB0aGUgcGFuZWxDb3VudCBlcXVhbHMgdG8gbWF4UGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtaW5QYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFBhbmVsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCJtYXhQYW5lbENvdW50XCIsXG4gICAgICBzZXR0aW5ncy5wYW5lbE1heGltdW1QYW5lbENvdW50XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFBhbmVsQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDw9IDApIHJldHVybjtcbiAgICBpZiAodmFsID4gc2V0dGluZ3MucGFuZWxNYXhpbXVtUGFuZWxDb3VudClcbiAgICAgIHZhbCA9IHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnQ7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm1heFBhbmVsQ291bnQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhQYW5lbENvdW50XCIsIHZhbCk7XG4gICAgaWYgKHZhbCA8IHRoaXMubWluUGFuZWxDb3VudCkgdGhpcy5taW5QYW5lbENvdW50ID0gdmFsO1xuICAgIGlmICh0aGlzLnBhbmVsQ291bnQgPiB2YWwpIHRoaXMucGFuZWxDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gaGlkZSB0aGUgJ0FkZCBOZXcnIGJ1dHRvblxuICAgKiBAc2VlIGFsbG93UmVtb3ZlUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dBZGRQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRQYW5lbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93QWRkUGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRQYW5lbFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBoaWRlIHRoZSAnUmVtb3ZlJyBidXR0b25cbiAgICogQHNlZSBhbGxvd0FkZFBhbmVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93UmVtb3ZlUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUGFuZWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd1JlbW92ZVBhbmVsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUGFuZWxcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgZGlmZmVyZW50IGZyb20gXCJkZWZhdWx0XCIgdG8gc2V0IHRoZSBzcGVjaWZpYyBxdWVzdGlvbiB0aXRsZSBsb2NhdGlvbiBmb3IgdGhlIHRlbXBsYXRlIHF1ZXN0aW9ucy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBQYW5lbE1vZGVsQmFzZS5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVUaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRlbXBsYXRlVGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlbXBsYXRlVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzaG93L2hpZGUgdGhlIG51bWJlcnMgaW4gdGl0bGVzIGluIHF1ZXN0aW9ucyBpbnNpZGUgYSBkeW5hbWljIHBhbmVsLlxuICAgKiBCeSBkZWZhdWx0IHRoZSB2YWx1ZSBpcyBcIm9mZlwiLiBZb3UgbWF5IHNldCBpdCB0byBcIm9uUGFuZWxcIiBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIGluc2lkZSBhIGR5bmFtaWMgcGFuZWwgd2lsbCBzdGFydCB3aXRoIDEgb3IgXCJvblN1cnZleVwiIHRvIGluY2x1ZGUgbmVzdGVkIHF1ZXN0aW9ucyBpbiBkeW1hbWljIHBhbmVscyBpbnRvIGdsb2JhbCBzdXJ2ZXkgcXVlc3Rpb24gbnVtYmVyaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLnZpc2libGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVtb3ZlIGJ1dHRvbiByZWxhdGl2ZSB0byB0aGUgcGFuZWwuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzIFwiYm90dG9tXCIuIFlvdSBtYXkgc2V0IGl0IHRvIFwicmlnaHRcIiBhbmQgcmVtb3ZlIGJ1dHRvbiB3aWxsIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlIHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcmFuZ2UgZnJvbSAxIHRvIHBhbmVsQ291bnQgd2hlbiByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuIFNldCB0byBmYWxzZSB0byBoaWRlIHRoaXMgZWxlbWVudC5cbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UmFuZ2VJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1JhbmdlSW5Qcm9ncmVzcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsIHZhbCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJsaXN0XCIgYW5kIGFsbCBkeW5hbWljIHBhbmVscyBhcmUgcmVuZGVyZWQgb25lIGJ5IG9uZSBvbiB0aGUgcGFnZS4gWW91IG1heSBjaGFuZ2UgaXQgdG86IFwicHJvZ3Jlc3NUb3BcIiwgXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIiB0byByZW5kZXIgb25seSBvbmUgZHluYW1pYyBwYW5lbCBhdCBvbmNlLiBUaGUgcHJvZ3Jlc3MgYW5kIG5hdmlnYXRpb24gZWxlbWVudHMgY2FuIGJlIHJlbmRyZWQgb24gdG9wLCBib3R0b20gb3IgYm90aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVuZGVyTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlck1vZGVcIiwgdmFsKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiByZW5kZXJNb2RlIGVxdWFscyB0byBcImxpc3RcIi5cbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmVuZGVyTW9kZUxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyTW9kZSA9PSBcImxpc3RcIjtcbiAgfVxuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHJldHVybiAwO1xuICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25TdXJ2ZXlcIiA/IHZhbHVlIDogMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY291bnRlciA9IHRoaXMuc2V0UGFuZWxWaXNpYmxlSW5kZXgoXG4gICAgICAgIHRoaXMucGFuZWxzW2ldLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvZmZcIlxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblN1cnZleVwiKSB7XG4gICAgICAgIHN0YXJ0SW5kZXggKz0gY291bnRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuc2V0VmlzaWJsZUluZGV4KHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9uU3VydmV5XCIgPyB2YWx1ZSA6IC0xKTtcbiAgICByZXR1cm4gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzICE9IFwib25TdXJ2ZXlcIiA/IDEgOiBzdGFydEluZGV4IC0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQYW5lbFZpc2libGVJbmRleChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNob3dJbmRleDogYm9vbGVhblxuICApOiBudW1iZXIge1xuICAgIGlmICghc2hvd0luZGV4KSB7XG4gICAgICBwYW5lbC5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBwYW5lbC5zZXRWaXNpYmxlSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGFuIGVuZCB1c2VyIG1heSBhZGQgYSBuZXcgcGFuZWwuIFRoZSBxdWVzdGlvbiBpcyBub3QgcmVhZCBvbmx5IGFuZCBwYW5lbENvdW50IGxlc3MgdGhhbiBtYXhQYW5lbENvdW50XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhbkFkZFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd0FkZFBhbmVsICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICB0aGlzLnBhbmVsQ291bnQgPCB0aGlzLm1heFBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBhbiBlbmQgdXNlciBtYXkgcmVtb3ZlIGEgcGFuZWwuIFRoZSBxdWVzdGlvbiBpcyBub3QgcmVhZCBvbmx5IGFuZCBwYW5lbENvdW50IGlzIG1vcmUgdGhhbiBtaW5QYW5lbENvdW50XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtaW5QYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhblJlbW92ZVBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd1JlbW92ZVBhbmVsICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICB0aGlzLnBhbmVsQ291bnQgPiB0aGlzLm1pblBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZWJ1aWxkUGFuZWxzKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5wcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCk7XG4gICAgdmFyIHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSh0aGlzLCB0aGlzLnRlbXBsYXRlKTtcbiAgICAgIHBhbmVscy5wdXNoKHRoaXMudGVtcGxhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxDb3VudDsgaSsrKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHRoaXMuY3JlYXRlTmV3UGFuZWwoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFuZWxzLnNwbGljZSgwLCB0aGlzLnBhbmVscy5sZW5ndGgsIC4uLnBhbmVscyk7XG4gICAgdGhpcy5zZXRWYWx1ZUFmdGVyUGFuZWxzQ3JlYXRpbmcoKTtcbiAgICB0aGlzLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgdGhpcy5yZVJ1bkNvbmRpdGlvbigpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIElmIGl0IGlzIG5vdCBlbXB0eSwgdGhlbiB0aGlzIHZhbHVlIGlzIHNldCB0byBldmVyeSBuZXcgcGFuZWwsIGluY2x1ZGluZyBwYW5lbHMgY3JlYXRlZCBpbml0aWFsbHksIHVubGVzcyB0aGUgZGVmYXVsdFZhbHVlIGlzIG5vdCBlbXB0eVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRQYW5lbFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRQYW5lbFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFBhbmVsVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0UGFuZWxWYWx1ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBjb3B5IHRoZSB2YWx1ZSBpbnRvIG5ldyBhZGRlZCBwYW5lbCBmcm9tIHRoZSBsYXN0IHBhbmVsLiBJZiBkZWZhdWx0UGFuZWxWYWx1ZSBpcyBzZXQgYW5kIHRoaXMgcHJvcGVydHkgZXF1YWxzIHRvIHRydWUsXG4gICAqIHRoZW4gdGhlIHZhbHVlIGZvciBuZXcgYWRkZWQgcGFuZWwgaXMgbWVyZ2luZy5cbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0UGFuZWxWYWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBpc0RlZmF1bHRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0UGFuZWxWYWx1ZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0UGFuZWxWYWx1ZSkgfHxcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHN1cGVyLnNldERlZmF1bHRWYWx1ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbXB0eSgpIHx8IHRoaXMucGFuZWxDb3VudCA9PSAwKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVsQ291bnQ7IGkrKykge1xuICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNSb3dFbXB0eSh2YWxbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhcbiAgICAgIHRoaXMucGFuZWxzLFxuICAgICAgdGhpcy5pc1JlcXVpcmVkXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGlzUm93RW1wdHkodmFsOiBhbnkpIHtcbiAgICBmb3IgKHZhciBwcm9wIGluIHZhbCkge1xuICAgICAgaWYgKHZhbC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZHluYW1pYyBwYW5lbCBiYXNlZCBvbiB0aGUgdGVtcGxhdGUgUGFuZWwuIEl0IGNoZWNrcyBpZiBjYW5BZGRQYW5lbCByZXR1cm5zIHRydWUgYW5kIHRoZW4gY2FsbHMgYWRkUGFuZWwgbWV0aG9kLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKiBAc2VlIGNhbkFkZFBhbmVsXG4gICAqL1xuICBwdWJsaWMgYWRkUGFuZWxVSSgpOiBQYW5lbE1vZGVsIHtcbiAgICBpZiAoIXRoaXMuY2FuQWRkUGFuZWwpIHJldHVybiBudWxsO1xuICAgIHZhciBuZXdQYW5lbCA9IHRoaXMuYWRkUGFuZWwoKTtcbiAgICBpZiAodGhpcy5yZW5kZXJNb2RlID09PSBcImxpc3RcIiAmJiB0aGlzLnBhbmVsc1N0YXRlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgbmV3UGFuZWwuZXhwYW5kKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQYW5lbDtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IGR5bmFtaWMgcGFuZWwgYmFzZWQgb24gdGhlIHRlbXBsYXRlIFBhbmVsLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKi9cbiAgcHVibGljIGFkZFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHRoaXMucGFuZWxDb3VudCsrO1xuICAgIGlmICghdGhpcy5pc1JlbmRlck1vZGVMaXN0KSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gICAgfVxuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGhhc01vZGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhIW5ld1ZhbHVlICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmXG4gICAgICAgIG5ld1ZhbHVlLmxlbmd0aCA9PSB0aGlzLnBhbmVsQ291bnRcbiAgICAgICkge1xuICAgICAgICBoYXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY29weVZhbHVlKG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdLCB0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsICYmXG4gICAgICAhIW5ld1ZhbHVlICYmXG4gICAgICBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJlxuICAgICAgbmV3VmFsdWUubGVuZ3RoID4gMSAmJlxuICAgICAgbmV3VmFsdWUubGVuZ3RoID09IHRoaXMucGFuZWxDb3VudFxuICAgICkge1xuICAgICAgaGFzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jb3B5VmFsdWUoXG4gICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdLFxuICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAyXVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGhhc01vZGlmaWVkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuZHluYW1pY1BhbmVsQWRkZWQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzW3RoaXMucGFuZWxDb3VudCAtIDFdO1xuICB9XG4gIHByaXZhdGUgY29weVZhbHVlKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGVzdCkge1xuICAgICAgc3JjW2tleV0gPSBkZXN0W2tleV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIHJlbW92ZVBhbmVsIGZ1bmN0aW9uLiBEbyBub3RoaW5nIGlzIGNhblJlbW92ZVBhbmVsIHJldHVybnMgZmFsc2UuIElmIGNvbmZpcm1EZWxldGUgc2V0IHRvIHRydWUsIGl0IHNob3dzIHRoZSBjb25maXJtYXRpb24gZGlhbG9nIGZpcnN0LlxuICAgKiBAcGFyYW0gdmFsdWUgYSBwYW5lbCBvciBwYW5lbCBpbmRleFxuICAgKiBAc2VlIHJlbW92ZVBhbmVsXG4gICAqIEBzZWUgY29uZmlybURlbGV0ZVxuICAgKiBAc2VlIGNvbmZpcm1EZWxldGVUZXh0XG4gICAqIEBzZWUgY2FuUmVtb3ZlUGFuZWxcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYW5lbFVJKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVtb3ZlUGFuZWwpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZmlybURlbGV0ZSB8fCBjb25maXJtQWN0aW9uKHRoaXMuY29uZmlybURlbGV0ZVRleHQpKSB7XG4gICAgICB0aGlzLnJlbW92ZVBhbmVsKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdvZXMgdG8gdGhlIG5leHQgcGFuZWwgaW4gdGhlIFBhbmVsRHluYW1pY1xuICAgKlxuICAgKi9cbiAgcHVibGljIGdvVG9OZXh0UGFuZWwoKSB7XG4gICAgaWYgKHRoaXMucmVuZGVyTW9kZSAhPT0gXCJsaXN0XCIgJiYgdGhpcy5jdXJyZW50UGFuZWwuaGFzRXJyb3JzKCkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuICB9XG4gIC8qKlxuICAgKiBHb2VzIHRvIHRoZSBwcmV2aW91cyBwYW5lbCBpbiB0aGUgUGFuZWxEeW5hbWljXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ29Ub1ByZXZQYW5lbCgpIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZHluYW1pYyBwYW5lbCBmcm9tIHRoZSBwYW5lbHMgYXJyYXkuXG4gICAqIEBwYXJhbSB2YWx1ZSBhIHBhbmVsIG9yIHBhbmVsIGluZGV4XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYW5lbCh2YWx1ZTogYW55KSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5nZXRQYW5lbEluZGV4KHZhbHVlKTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2luZGV4XTtcbiAgICB0aGlzLnBhbmVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMudXBkYXRlQmluZGluZ3MoXCJwYW5lbENvdW50XCIsIHRoaXMucGFuZWxDb3VudCk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpbmRleCA+PSB2YWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxSZW1vdmVkKHRoaXMsIGluZGV4LCBwYW5lbCk7XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYW5lbEluZGV4KHZhbDogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWwpKSByZXR1cm4gdmFsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFuZWxzW2ldID09PSB2YWwgfHwgaXRlbXNbaV0gPT09IHZhbCkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhbmVsc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICBzdXBlci5jbGVhckVycm9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxzW2ldLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnBhbmVsQ291bnQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhbmVsc1tpbmRleF0uZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaW5kZXg6IG51bWJlcikge1xuICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2luZGV4XTtcbiAgICBwYW5lbC5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciB2YWx1ZXMgPSAhIXZhbCAmJiBpbmRleCA8IHZhbC5sZW5ndGggPyB2YWxbaW5kZXhdIDogbnVsbDtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICBpZiAodGhpcy5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShrZXksIGluZGV4KSkgY29udGludWU7XG4gICAgICB2YXIgcSA9IHBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICBpZiAoISFxKSBjb250aW51ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KHBhbmVsLCBrZXksIHNldHRpbmdzLmNvbW1lbnRQcmVmaXgpIHx8XG4gICAgICAgIHRoaXMuaXNjb3JyZWN0VmFsdWVXaXRoUG9zdFByZWZpeChcbiAgICAgICAgICBwYW5lbCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNba2V5XTtcbiAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgIHZhbFtpbmRleF0gPSB2YWx1ZXM7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgoXG4gICAgcGFuZWw6IFBhbmVsTW9kZWwsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcG9zdFByZWZpeDogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChrZXkuaW5kZXhPZihwb3N0UHJlZml4KSAhPT0ga2V5Lmxlbmd0aCAtIHBvc3RQcmVmaXgubGVuZ3RoKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKGtleS5zdWJzdHIoMCwga2V5LmluZGV4T2YocG9zdFByZWZpeCkpKTtcbiAgfVxuICBwdWJsaWMgZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhbmVsSW5kZXg6IG51bWJlclxuICApOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLnZhbHVlTmFtZVxuICAgICAgPyA8UXVlc3Rpb24+KFxuICAgICAgICAgIHRoaXMuc3VydmV5LmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVGcm9tQXJyYXkoXG4gICAgICAgICAgICB0aGlzLnZhbHVlTmFtZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwYW5lbEluZGV4XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0XG4gICAgICA/IHRoaXMudGVtcGxhdGUucXVlc3Rpb25zLmluZGV4T2YoY29udGV4dCkgPiAtMVxuICAgICAgOiBmYWxzZTtcbiAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIlswXS5cIjtcbiAgICB2YXIgcHJlZml4VGV4dCA9IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIlswXS5cIjtcbiAgICB2YXIgcGFuZWxPYmpzID0gbmV3IEFycmF5PElDb25kaXRpb25PYmplY3Q+KCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMudGVtcGxhdGUucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChwYW5lbE9ianMsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVsT2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgbmFtZTogcHJlZml4TmFtZSArIHBhbmVsT2Jqc1tpXS5uYW1lLFxuICAgICAgICB0ZXh0OiBwcmVmaXhUZXh0ICsgcGFuZWxPYmpzW2ldLnRleHQsXG4gICAgICAgIHF1ZXN0aW9uOiBwYW5lbE9ianNbaV0ucXVlc3Rpb24sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxPYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYW5lbE9ianNbaV0ucXVlc3Rpb24gPT0gY29udGV4dCkgY29udGludWU7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJwYW5lbC5cIiArIHBhbmVsT2Jqc1tpXS5uYW1lLFxuICAgICAgICAgIHRleHQ6IFwicGFuZWwuXCIgKyBwYW5lbE9ianNbaV0udGV4dCxcbiAgICAgICAgICBxdWVzdGlvbjogcGFuZWxPYmpzW2ldLnF1ZXN0aW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IsIHBhdGgpO1xuICAgIHZhciBxdWVzdGlvbk5hbWUgPSBwYXRoO1xuICAgIHZhciBwb3MgPSBwYXRoLmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChwb3MgPiAtMSkge1xuICAgICAgcXVlc3Rpb25OYW1lID0gcGF0aC5zdWJzdHIoMCwgcG9zKTtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cihwb3MgKyAxKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy50ZW1wbGF0ZS5nZXRRdWVzdGlvbkJ5TmFtZShxdWVzdGlvbk5hbWUpO1xuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgIHJldHVybiBxdWVzdGlvbi5nZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yLCBwYXRoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgdmFyIHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIHRoaXMudGVtcGxhdGUucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIH1cbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB0aGlzLnRlbXBsYXRlLm9uU3VydmV5TG9hZCgpO1xuICAgIGlmICh0aGlzLmxvYWRpbmdQYW5lbENvdW50ID4gMCkge1xuICAgICAgdGhpcy5wYW5lbENvdW50ID0gdGhpcy5sb2FkaW5nUGFuZWxDb3VudDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRQYW5lbHNTdXJ2ZXlJbXBsKCk7XG4gICAgdGhpcy5zZXRQYW5lbHNTdGF0ZSgpO1xuICAgIHRoaXMuYXNzaWduT25Qcm9wZXJ0eUNoYW5nZWRUb1RlbXBsYXRlKCk7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gIH1cbiAgcHVibGljIG9uRmlyc3RSZW5kZXJpbmcoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICBzdXBlci5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuUGFuZWxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSByZVJ1bkNvbmRpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMucnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuUGFuZWxzQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgdmFyIGNhY2hlZFZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIGNhY2hlZFZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbFZhbHVlcyA9IHRoaXMuZ2V0UGFuZWxJdGVtRGF0YSh0aGlzLnBhbmVsc1tpXS5kYXRhKTtcbiAgICAgIC8vU2hvdWxkIGJlIHVuaXF1ZSBmb3IgZXZlcnkgcGFuZWwgZHVlIGFzeW5jIGV4cHJlc3Npb24gc3VwcG9ydFxuICAgICAgdmFyIG5ld1ZhbHVlcyA9IEhlbHBlcnMuY3JlYXRlQ29weShjYWNoZWRWYWx1ZXMpO1xuICAgICAgbmV3VmFsdWVzW1xuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICBdID0gcGFuZWxWYWx1ZXM7XG4gICAgICBuZXdWYWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgICAgIHRoaXMucGFuZWxzW2ldLnJ1bkNvbmRpdGlvbihuZXdWYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlci5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICAgIHRoaXMucGFuZWxzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKFxuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBoYXNLZXlzRHVwbGljYXRlZChmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55ID0gbnVsbCkge1xuICAgIHZhciBrZXlWYWx1ZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICB2YXIgcmVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyA9XG4gICAgICAgIHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQodGhpcy5wYW5lbHNbaV0sIGtleVZhbHVlcywgcmVjLCBmaXJlQ2FsbGJhY2spIHx8XG4gICAgICAgIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVBhbmVsc0NvbnRhaW5zRXJyb3JzKCkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uO1xuICAgIHZhciBwYXJlbnQgPSA8UGFuZWw+cXVlc3Rpb24ucGFyZW50O1xuICAgIHdoaWxlICghIXBhcmVudCkge1xuICAgICAgcGFyZW50LnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gICAgICBwYXJlbnQgPSA8UGFuZWw+cGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb250YWluc0Vycm9ycygpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBpZiAoISF0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbikge1xuICAgICAgdmFyIHJlcyA9IHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICByZXMgPSB0aGlzLmhhc0tleXNEdXBsaWNhdGVkKGZpcmVDYWxsYmFjaywgcmVjKSB8fCByZXM7XG4gICAgICB0aGlzLnVwZGF0ZVBhbmVsc0NvbnRhaW5zRXJyb3JzKCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXJyb3NJblBhbmVscyA9IHRoaXMuaGFzRXJyb3JJblBhbmVscyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgZXJyb3NJblBhbmVscztcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRDb250YWluc0Vycm9ycygpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFuZWxzW2ldLmNvbnRhaW5zRXJyb3JzKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuZ2V0SXNBbnN3ZXJlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmlzaWJsZVF1ZXN0aW9ucyA9IDxBcnJheTxhbnk+PltdO1xuICAgICAgcGFuZWxzW2ldLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNpYmxlUXVlc3Rpb25zLCB0cnVlKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmlzaWJsZVF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIXZpc2libGVRdWVzdGlvbnNbal0uaXNBbnN3ZXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBxdWVzdGlvbnNbal0uY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBlci5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocXVlc3Rpb25zW2pdLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHZhciByZXN1bHQgPSBzdXBlci5nZXRBbGxFcnJvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYW5lbHNbaV0ucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IHF1ZXN0aW9uc1tqXS5nZXRBbGxFcnJvcnMoKTtcbiAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgICBpZiAoIXZhbHVlcyB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFBhbmVsRGlzcGxheVZhbHVlKGksIHZhbCwga2V5c0FzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBwcml2YXRlIGdldFBhbmVsRGlzcGxheVZhbHVlKFxuICAgIHBhbmVsSW5kZXg6IG51bWJlcixcbiAgICB2YWw6IGFueSxcbiAgICBrZXlzQXNUZXh0OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKCF2YWwpIHJldHVybiB2YWw7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxJbmRleF07XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKGtleSk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgIHF1ZXN0aW9uID0gdGhpcy5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShrZXksIHBhbmVsSW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCB2YWxba2V5XSk7XG4gICAgICAgIHZhbFtrZXldID0gcVZhbHVlO1xuICAgICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIXF1ZXN0aW9uLnRpdGxlICYmIHF1ZXN0aW9uLnRpdGxlICE9PSBrZXkpIHtcbiAgICAgICAgICB2YWxbcXVlc3Rpb24udGl0bGVdID0gcVZhbHVlO1xuICAgICAgICAgIGRlbGV0ZSB2YWxba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JJblBhbmVscyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICB2YXIga2V5VmFsdWVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0T25Db21wbGV0ZUFzeW5jSW5QYW5lbChwYW5lbHNbaV0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBubEVycm9yID0gcGFuZWxzW2ldLmhhc0Vycm9ycyhcbiAgICAgICAgZmlyZUNhbGxiYWNrLFxuICAgICAgICAhIXJlYyAmJiByZWMuZm9jdXNlT25GaXJzdEVycm9yLFxuICAgICAgICByZWNcbiAgICAgICk7XG4gICAgICBwbmxFcnJvciA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQocGFuZWxzW2ldLCBrZXlWYWx1ZXMsIHJlYykgfHwgcG5sRXJyb3I7XG4gICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlTGlzdCAmJiBwbmxFcnJvciAmJiAhcmVzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICAgIHJlcyA9IHBubEVycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHNldE9uQ29tcGxldGVBc3luY0luUGFuZWwocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBrZXlWYWx1ZXM6IEFycmF5PGFueT4sXG4gICAgcmVjOiBhbnksXG4gICAgZmlyZUNhbGxiYWNrPzogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMua2V5TmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBxdWVzdGlvbiA9IDxRdWVzdGlvbj5wYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHRoaXMua2V5TmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCBxdWVzdGlvbi5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uICYmXG4gICAgICBxdWVzdGlvbiAhPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvblxuICAgICkge1xuICAgICAgcXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBrZXlWYWx1ZXNbaV0pIHtcbiAgICAgICAgcXVlc3Rpb24uYWRkRXJyb3IoXG4gICAgICAgICAgbmV3IEtleUR1cGxpY2F0aW9uRXJyb3IodGhpcy5rZXlEdXBsaWNhdGlvbkVycm9yLCB0aGlzKVxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZWMgJiYgIXJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGtleVZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgIHZhciBqc29uID0gdGhpcy50ZW1wbGF0ZS50b0pTT04oKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICBwYW5lbC5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgIHBhbmVsLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtKHRoaXMsIHBhbmVsKTtcbiAgICBwYW5lbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnNldFBhcmVudFF1ZXN0aW9uKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFuZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUFuZFNldHVwTmV3UGFuZWxPYmplY3QoKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbE9iamVjdCgpO1xuICAgIHBhbmVsLmlzSW50ZXJhY3RpdmVEZXNpZ25FbGVtZW50ID0gZmFsc2U7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHBhbmVsLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRUZW1wbGF0ZVF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIH07XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVRdWVzdGlvblRpdGxlTG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiXG4gICAgICA/IHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uXG4gICAgICA6IHRoaXMuZ2V0VGl0bGVMb2NhdGlvbkNvcmUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWxPYmplY3QoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIFNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgfVxuICBwcml2YXRlIHNldFBhbmVsQ291bnRCYXNlZE9uVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBuZXdQYW5lbENvdW50ID0gdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggOiAwO1xuICAgIGlmIChuZXdQYW5lbENvdW50ID09IDAgJiYgdGhpcy5sb2FkaW5nUGFuZWxDb3VudCA+IDApIHtcbiAgICAgIG5ld1BhbmVsQ291bnQgPSB0aGlzLmxvYWRpbmdQYW5lbENvdW50O1xuICAgIH1cbiAgICB0aGlzLnBhbmVsQ291bnQgPSBuZXdQYW5lbENvdW50O1xuICB9XG4gIHB1YmxpYyBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgdGhpcy5zZXRQYW5lbENvdW50QmFzZWRPblZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbFVwZGF0ZVZhbHVlRnJvbVN1cnZleSh0aGlzLnBhbmVsc1tpXSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxTdXJ2ZXlWYWx1ZUNoYW5nZWQodGhpcy5wYW5lbHNbaV0pO1xuICAgIH1cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGFuZWxVcGRhdGVWYWx1ZUZyb21TdXJ2ZXkocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFBhbmVsSXRlbURhdGEocGFuZWwuZGF0YSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgcS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodmFsdWVzW3EuZ2V0VmFsdWVOYW1lKCldKTtcbiAgICAgIHEudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoXG4gICAgICAgIHZhbHVlc1txLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGFuZWxTdXJ2ZXlWYWx1ZUNoYW5nZWQocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFBhbmVsSXRlbURhdGEocGFuZWwuZGF0YSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgcS5vblN1cnZleVZhbHVlQ2hhbmdlZCh2YWx1ZXNbcS5nZXRWYWx1ZU5hbWUoKV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5zZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpO1xuICAgICAgdGhpcy5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgfVxuICB9XG4gIC8vSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YVxuICBnZXRJdGVtSW5kZXgoaXRlbTogSVN1cnZleURhdGEpOiBudW1iZXIge1xuICAgIHZhciByZXMgPSB0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgcmV0dXJuIHJlcyA+IC0xID8gcmVzIDogdGhpcy5pdGVtcy5sZW5ndGg7XG4gIH1cbiAgZ2V0UGFuZWxJdGVtRGF0YShpdGVtOiBJU3VydmV5RGF0YSk6IGFueSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB2YXIgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgIHZhciBxVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmIChpbmRleCA8IDAgJiYgQXJyYXkuaXNBcnJheShxVmFsdWUpICYmIHFWYWx1ZS5sZW5ndGggPiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gaXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4ge307XG4gICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSB8fCBxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSByZXR1cm4ge307XG4gICAgcmV0dXJuIHFWYWx1ZVtpbmRleF07XG4gIH1cbiAgcHJpdmF0ZSBpc1NldFBhbmVsSXRlbURhdGE6IEFycmF5PHN0cmluZz47XG4gIHNldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEsIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1NldFBhbmVsSXRlbURhdGEgJiYgdGhpcy5pc1NldFBhbmVsSXRlbURhdGEuaW5kZXhPZihuYW1lKSA+IC0xKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1NldFBhbmVsSXRlbURhdGEpIHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhID0gW107XG4gICAgdGhpcy5pc1NldFBhbmVsSXRlbURhdGEucHVzaChuYW1lKTtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIHFWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSkge1xuICAgICAgcVZhbHVlID0gW107XG4gICAgfVxuICAgIGlmIChxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gcVZhbHVlLmxlbmd0aDsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICAgIHFWYWx1ZS5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFxVmFsdWVbaW5kZXhdKSBxVmFsdWVbaW5kZXhdID0ge307XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICBxVmFsdWVbaW5kZXhdW25hbWVdID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcVZhbHVlW2luZGV4XVtuYW1lXTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnBhbmVscy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uID0gdGhpcy5wYW5lbHNbaW5kZXhdLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBxVmFsdWU7XG4gICAgdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICBwYW5lbDogKDxRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0+aXRlbSkucGFuZWwsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGl0ZW1JbmRleDogaW5kZXgsXG4gICAgICAgIGl0ZW1WYWx1ZTogcVZhbHVlW2luZGV4XSxcbiAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICBnZXRSb290RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSB0aGlzLnBhbmVscy5tYXAoXG4gICAgICAgIChwYW5lbDogUGFuZWxNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHZhciBwYW5lbERhdGFJdGVtID0gPGFueT57XG4gICAgICAgICAgICBuYW1lOiBwYW5lbC5uYW1lIHx8IGluZGV4LFxuICAgICAgICAgICAgdGl0bGU6IHBhbmVsLnRpdGxlIHx8IFwiUGFuZWxcIixcbiAgICAgICAgICAgIHZhbHVlOiBwYW5lbC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiBwYW5lbC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogcGFuZWwucXVlc3Rpb25zXG4gICAgICAgICAgICAgIC5tYXAoKHF1ZXN0aW9uOiBRdWVzdGlvbikgPT4gcXVlc3Rpb24uZ2V0UGxhaW5EYXRhKG9wdGlvbnMpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChkOiBhbnkpID0+ICEhZCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goKGNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBwYW5lbERhdGFJdGVtW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPSAoPGFueT5wYW5lbClbXG4gICAgICAgICAgICAgIGNhbGN1bGF0aW9uLnByb3BlcnR5TmFtZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcGFuZWxEYXRhSXRlbTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKHJlTmV3PzogYm9vbGVhbikge1xuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucGFuZWxzW2ldO1xuICAgICAgZWwudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIHJhbmdlTWF4ID0gdGhpcy5wYW5lbENvdW50O1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJwYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLmN1cnJlbnRJbmRleCArIDEsIHJhbmdlTWF4KTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWxXcmFwcGVyQ3NzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLmNzc0NsYXNzZXMucGFuZWxXcmFwcGVyO1xuICAgIGlmICh0aGlzLnBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgY3NzQ2xhc3NlcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbFdyYXBwZXJJblJvdztcbiAgICB9XG4gICAgcmV0dXJuIGNzc0NsYXNzZXM7XG4gIH1cbiAgcHVibGljIGdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPVxuICAgICAgdGhpcy5jc3NDbGFzc2VzLmJ1dHRvbiArIFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLmJ1dHRvblJlbW92ZTtcbiAgICBpZiAodGhpcy5wYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIGNzc0NsYXNzZXMgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlUmlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicGFuZWxkeW5hbWljXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcInRlbXBsYXRlRWxlbWVudHNcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGVtcGxhdGVUaXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZW1wbGF0ZVRpdGxlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRlbXBsYXRlRGVzY3JpcHRpb246dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RlbXBsYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0FkZFBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1JlbW92ZVBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxDb3VudDpudW1iZXJcIixcbiAgICAgIGlzQmluZGFibGU6IHRydWUsXG4gICAgICBkZWZhdWx0OiAwLFxuICAgICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtaW5QYW5lbENvdW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4UGFuZWxDb3VudDpudW1iZXJcIixcbiAgICAgIGRlZmF1bHQ6IHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnQsXG4gICAgfSxcbiAgICBcImRlZmF1bHRQYW5lbFZhbHVlOnBhbmVsdmFsdWVcIixcbiAgICBcImRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWw6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxzU3RhdGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImNvbGxhcHNlZFwiLCBcImV4cGFuZGVkXCIsIFwiZmlyc3RFeHBhbmRlZFwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJrZXlOYW1lXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiY29uZmlybURlbGV0ZTpib29sZWFuXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29uZmlybURlbGV0ZVRleHRcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJwYW5lbEFkZFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsQWRkVGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsUmVtb3ZlVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxSZW1vdmVUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwicGFuZWxQcmV2VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxQcmV2VGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsTmV4dFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsTmV4dFRleHRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgICAgZGVmYXVsdDogXCJvZmZcIixcbiAgICAgIGNob2ljZXM6IFtcIm9mZlwiLCBcIm9uUGFuZWxcIiwgXCJvblN1cnZleVwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzaG93UmFuZ2VJblByb2dyZXNzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVuZGVyTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJsaXN0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJsaXN0XCIsIFwicHJvZ3Jlc3NUb3BcIiwgXCJwcm9ncmVzc0JvdHRvbVwiLCBcInByb2dyZXNzVG9wQm90dG9tXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiYm90dG9tXCIsXG4gICAgICBjaG9pY2VzOiBbXCJib3R0b21cIiwgXCJyaWdodFwiXSxcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHJhZGlvZ3JvdXAgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyYWRpb2dyb3VwXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIGl0ZW0gaW4gdGhlIHJhZGlvIGdyb3VwLiBSZXR1cm5zIG51bGwgaWYgdGhlIHZhbHVlIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB0aGlzLnZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2hvdyBcImNsZWFyIGJ1dHRvblwiIGZsYWcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NsZWFyQnV0dG9uXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dDbGVhckJ1dHRvbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q2xlYXJCdXR0b25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhblNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93Q2xlYXJCdXR0b24gJiYgIXRoaXMuaXNSZWFkT25seTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsZWFyQnV0dG9uQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJhZGlvZ3JvdXBcIixcbiAgW3sgbmFtZTogXCJzaG93Q2xlYXJCdXR0b246Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgU29ydGFibGVMaWIgZnJvbSBcInNvcnRhYmxlanNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcbmltcG9ydCB7IElzTW9iaWxlIH0gZnJvbSBcIi4vdXRpbHMvaXMtbW9iaWxlXCI7XG5cbmNvbnN0IFNvcnRhYmxlID0gPGFueT5Tb3J0YWJsZUxpYjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHJhbmtpbmcgcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmFua2luZ01vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgcHJpdmF0ZSBkb21Ob2RlOiBIVE1MRWxlbWVudCA9IG51bGw7XG4gIHByaXZhdGUgc29ydGFibGVJbnN0OiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyYW5raW5nXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSW5kZXRlcm1pbmF0ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvb3RDbGFzcygpIHtcbiAgICBjb25zdCBjc3M6IGFueSA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICBpZiAoSXNNb2JpbGUpIHJldHVybiBjc3Mucm9vdCArIFwiIFwiICsgY3NzLnJvb3RNb2JpbGVNb2Q7XG4gICAgcmV0dXJuIGNzcy5yb290O1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA/IFwiXFx1MjAxM1wiIDogaW5kZXggKyAxICsgXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmFua2luZ0Nob2ljZXMoKSB7XG4gICAgbGV0IHJlc3VsdDogSXRlbVZhbHVlW10gPSBbXTtcbiAgICBjb25zdCB2YWx1ZTogYW55ID0gdGhpcy52YWx1ZTtcbiAgICBjb25zdCB2aXNpYmxlQ2hvaWNlczogSXRlbVZhbHVlW10gPSB0aGlzLnJlbW92ZU90aGVyQ2hvaWNlRnJvbUNob2ljZXMoXG4gICAgICB0aGlzLnZpc2libGVDaG9pY2VzXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgcmVzdWx0ID0gIHZpc2libGVDaG9pY2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm1lcmdlVmFsdWVBbmRWaXNpYmxlQ2hvaWNlcyh2YWx1ZSwgdmlzaWJsZUNob2ljZXMpO1xuICAgIH1cbiAgICBcbiAgICAvLyByYW5raW5nIHF1ZXN0aW9uIHdpdGggb25seSBvbmUgY2hvaWNlIGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSByZXN1bHQgPSBbXTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU90aGVyQ2hvaWNlRnJvbUNob2ljZXMoY2hvaWNlczogSXRlbVZhbHVlW10pIHtcbiAgICBjb25zdCByZXN1bHQgPSBjaG9pY2VzO1xuICAgIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjaG9pY2UudmFsdWUgPT09IFwib3RoZXJcIikge1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxKTsgLy8gcmVtb3ZlIG90aGVyIGNob2ljZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvL2Nyb3NzIGZyYW1ld29yayBpbml0aWFsaXphdGlvblxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIHRoaXMuaW5pdFNvcnRhYmxlKGVsKTtcbiAgICB9XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIC8vY3Jvc3MgZnJhbWV3b3JrIGRlc3Ryb3lcbiAgcHVibGljIGJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuc29ydGFibGVJbnN0KSB0aGlzLnNvcnRhYmxlSW5zdC5kZXN0cm95KCk7XG4gICAgc3VwZXIuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5OiBhbnkgPSBldmVudC5rZXk7XG4gICAgY29uc3QgYXJyYXk6IE5vZGVMaXN0T2Y8RWxlbWVudD4gPSB0aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIFwiLlwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1cbiAgICApO1xuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBbXS5pbmRleE9mLmNhbGwoYXJyYXksIGV2ZW50LnRhcmdldCk7XG5cbiAgICBpZiAoa2V5ID09PSBcIkFycm93VXBcIiAmJiBpbmRleCkge1xuICAgICAgdGhpcy5oYW5kbGVBcnJvd1VwKGluZGV4KTtcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiAmJiBpbmRleCAhPT0gYXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5oYW5kbGVBcnJvd0Rvd24oaW5kZXgpO1xuICAgIH1cbiAgfTtcblxuICBwcm90ZWN0ZWQgc3VwcG9ydFNlbGVjdEFsbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnROb25lKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHRvIG1ha2UgXCJjYXJyeSBmb3J3YXJkXCIgZmVhdHVyZSB3b3JrIHByb3Blcmx5IHdpdGggcmFua2luZ1xuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcblxuICAgIGlmICh0aGlzLmlzSW5kZXRlcm1pbmF0ZSkgcmV0dXJuO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnJhbmtpbmdDaG9pY2VzLm1hcChjaG9pY2UgPT4gY2hvaWNlLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VWYWx1ZUFuZFZpc2libGVDaG9pY2VzKFxuICAgIHZhbHVlOiBhbnksXG4gICAgdmlzaWJsZUNob2ljZXM6IEFycmF5PEl0ZW1WYWx1ZT5cbiAgKSB7XG4gICAgY29uc3QgbGVuZ3RoOiBudW1iZXIgPSB2aXNpYmxlQ2hvaWNlcy5sZW5ndGg7XG4gICAgbGV0IHJlc3VsdDogQXJyYXk8SXRlbVZhbHVlPiA9IFtdO1xuICAgIHJlc3VsdC5sZW5ndGggPSBsZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hvaWNlID0gdmlzaWJsZUNob2ljZXNbaV07XG4gICAgICBjb25zdCBpbmRleCA9IHZhbHVlLmluZGV4T2YoY2hvaWNlLnZhbHVlKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxLCBjaG9pY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnNwbGljZShyZXN1bHQubGVuZ3RoIC0gMSwgMCwgY2hvaWNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihjaG9pY2UgPT4gISFjaG9pY2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRTb3J0YWJsZShkb21Ob2RlOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghZG9tTm9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGY6IFF1ZXN0aW9uUmFua2luZ01vZGVsID0gdGhpcztcbiAgICBzZWxmLmRvbU5vZGUgPSBkb21Ob2RlO1xuICAgIGlmICh0aGlzLmlzUmVhZE9ubHkpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcblxuICAgIHNlbGYuc29ydGFibGVJbnN0ID0gbmV3IFNvcnRhYmxlKGRvbU5vZGUsIHtcbiAgICAgIGFuaW1hdGlvbjogMTAwLFxuICAgICAgZm9yY2VGYWxsYmFjazogdHJ1ZSxcbiAgICAgIGRlbGF5OiAyMDAsXG4gICAgICBkZWxheU9uVG91Y2hPbmx5OiB0cnVlLFxuICAgICAgaGFuZGxlOiBJc01vYmlsZVxuICAgICAgICA/IFwiLlwiICsgc2VsZi5jc3NDbGFzc2VzLml0ZW1JY29uQ29udGFpbmVyXG4gICAgICAgIDogXCIuXCIgKyBzZWxmLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnQsXG4gICAgICBnaG9zdENsYXNzOiBzZWxmLmNzc0NsYXNzZXMuaXRlbUdob3N0TW9kLFxuICAgICAgZHJhZ0NsYXNzOiBzZWxmLmNzc0NsYXNzZXMuaXRlbURyYWdNb2QsXG4gICAgICBvblN0YXJ0KGV2dDogYW55KSB7XG4gICAgICAgICg8YW55PlNvcnRhYmxlLmdob3N0LnN0eWxlLm9wYWNpdHkpID0gMTtcbiAgICAgICAgZG9tTm9kZS5jbGFzc05hbWUgKz0gXCIgXCIgKyBzZWxmLmNzc0NsYXNzZXMucm9vdERyYWdNb2Q7XG4gICAgICAgIGlmIChzZWxmLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgIHNlbGYuc2V0R2hvc3RUZXh0KGV2dC5vbGRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FbmQoKSB7XG4gICAgICAgIGRvbU5vZGUuY2xhc3NOYW1lID0gZG9tTm9kZS5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgICAgICBcIiBcIiArIHNlbGYuY3NzQ2xhc3Nlcy5yb290RHJhZ01vZCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgICk7XG4gICAgICAgIHNlbGYuc2V0VmFsdWVGcm9tVUkoKTtcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZShldnQ6IGFueSkge1xuICAgICAgICBpZiAoIXNlbGYuaXNJbmRldGVybWluYXRlKSBzZWxmLnN5bmNOdW1iZXJzKCk7XG4gICAgICAgIHNlbGYuc2V0R2hvc3RUZXh0KGV2dC5uZXdJbmRleCArIDEpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQXJyb3dVcCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgYXJyYXk6IHN0cmluZ1tdID0gdGhpcy5zb3J0YWJsZUluc3QudG9BcnJheSgpO1xuICAgIHRoaXMubW92ZUFycmF5SXRlbUJhY2soYXJyYXksIGluZGV4KTtcbiAgICB0aGlzLnNvcnRhYmxlSW5zdC5zb3J0KGFycmF5KTtcbiAgICB0aGlzLnN5bmNOdW1iZXJzKCk7XG4gICAgdGhpcy5zZXRWYWx1ZUZyb21VSSgpO1xuICAgIHRoaXMuZm9jdXNJdGVtKGluZGV4IC0gMSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd0Rvd24gPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGFycmF5OiBzdHJpbmdbXSA9IHRoaXMuc29ydGFibGVJbnN0LnRvQXJyYXkoKTtcbiAgICB0aGlzLm1vdmVBcnJheUl0ZW1Gb3J3YXJkKGFycmF5LCBpbmRleCk7XG4gICAgdGhpcy5zb3J0YWJsZUluc3Quc29ydChhcnJheSk7XG4gICAgdGhpcy5zeW5jTnVtYmVycygpO1xuICAgIHRoaXMuc2V0VmFsdWVGcm9tVUkoKTtcbiAgICB0aGlzLmZvY3VzSXRlbShpbmRleCArIDEpO1xuICB9O1xuXG4gIHByaXZhdGUgbW92ZUFycmF5SXRlbUJhY2sgPSAoYXJyYXk6IHN0cmluZ1tdLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgW2FycmF5W2luZGV4XSwgYXJyYXlbaW5kZXggLSAxXV0gPSBbYXJyYXlbaW5kZXggLSAxXSwgYXJyYXlbaW5kZXhdXTtcbiAgfTtcblxuICBwcml2YXRlIG1vdmVBcnJheUl0ZW1Gb3J3YXJkID0gKGFycmF5OiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIFthcnJheVtpbmRleF0sIGFycmF5W2luZGV4ICsgMV1dID0gW2FycmF5W2luZGV4ICsgMV0sIGFycmF5W2luZGV4XV07XG4gIH07XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW0gPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGl0ZW1zTm9kZXM6IGFueSA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuXCIgKyB0aGlzLmNzc0NsYXNzZXMuaXRlbVxuICAgICk7XG4gICAgaXRlbXNOb2Rlc1tpbmRleF0uZm9jdXMoKTtcbiAgfTtcblxuICBwcml2YXRlIHNldFZhbHVlRnJvbVVJID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHRleHROb2RlcyA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuXCIgKyB0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsXG4gICAgKTtcbiAgICB0ZXh0Tm9kZXMuZm9yRWFjaCgodGV4dE5vZGU6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVGV4dDogc3RyaW5nID0gdGV4dE5vZGUuaW5uZXJUZXh0O1xuICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlcy5mb3JFYWNoKCh2aXNpYmxlQ2hvaWNlOiBJdGVtVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlubmVyVGV4dCA9PT0gdmlzaWJsZUNob2ljZS50ZXh0KSB7XG4gICAgICAgICAgdmFsdWUucHVzaCh2aXNpYmxlQ2hvaWNlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9O1xuXG4gIHByaXZhdGUgc3luY051bWJlcnMgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmRvbU5vZGUpIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3Rvcjogc3RyaW5nID1cbiAgICAgIFwiLlwiICtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtICtcbiAgICAgIFwiOm5vdCguXCIgK1xuICAgICAgdGhpcy5jc3NDbGFzc2VzLml0ZW1EcmFnTW9kICtcbiAgICAgIFwiKVwiICtcbiAgICAgIFwiIC5cIiArXG4gICAgICB0aGlzLmNzc0NsYXNzZXMuaXRlbUluZGV4O1xuXG4gICAgY29uc3QgaW5kZXhOb2RlczogTm9kZUxpc3RPZjxFbGVtZW50PiA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgc2VsZWN0b3JcbiAgICApO1xuICAgIGluZGV4Tm9kZXMuZm9yRWFjaCgoaW5kZXhOb2RlOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICBpbmRleE5vZGUuaW5uZXJUZXh0ID0gdGhpcy5nZXROdW1iZXJCeUluZGV4KGluZGV4KTtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHNldEdob3N0VGV4dCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpbmRleE5vZGVzOiBOb2RlTGlzdE9mPEVsZW1lbnQ+ID0gdGhpcy5kb21Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIi5cIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSW5kZXhcbiAgICApO1xuICAgIGNvbnN0IGdob3N0Tm9kZTogRWxlbWVudCA9IGluZGV4Tm9kZXNbaW5kZXhOb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAoPGFueT5naG9zdE5vZGUpLmlubmVyVGV4dCA9IHRleHQ7XG4gIH07XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicmFua2luZ1wiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3RoZXJUZXh0XCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3RoZXJFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImhhc05vbmVcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJub25lVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImhhc1NlbGVjdEFsbFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInNlbGVjdEFsbFRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJtYXhTZWxlY3RlZENob2ljZXNcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmFua2luZ01vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94XCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCBuYW1lID0+IHtcbiAgY29uc3QgcTogUXVlc3Rpb25SYW5raW5nTW9kZWwgPSBuZXcgUXVlc3Rpb25SYW5raW5nTW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgcmF0aW5nIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgcmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJyYXRlVmFsdWVzXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicmF0ZVZhbHVlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYucmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5hZGQoZnVuY3Rpb24oc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLm5hbWUgPT0gXCJyYXRlTWluXCIgfHxcbiAgICAgICAgb3B0aW9ucy5uYW1lID09IFwicmF0ZU1heFwiIHx8XG4gICAgICAgIG9wdGlvbnMubmFtZSA9PSBcInJhdGVTdGVwXCJcbiAgICAgICkge1xuICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLnJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGxvY01pblJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdmFyIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgbG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gdGV4dCA/IHRleHQgKyBcIiBcIiA6IHRleHQ7XG4gICAgfTtcbiAgICBsb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiB0ZXh0ID8gXCIgXCIgKyB0ZXh0IDogdGV4dDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcmF0ZSBpdGVtcy4gRXZlcnkgaXRlbSBoYXMgdmFsdWUgYW5kIHRleHQuIElmIHRleHQgaXMgZW1wdHksIHRoZSB2YWx1ZSBpcyByZW5kZXJlZC4gVGhlIGl0ZW0gdGV4dCBzdXBwb3J0cyBtYXJrZG93bi4gSWYgaXQgaXMgZW1wdHkgdGhlIGFycmF5IGlzIGdlbmVyYXRlZCBieSB1c2luZyByYXRlTWluLCByYXRlTWF4IGFuZCByYXRlU3RlcCBwcm9wZXJ0aWVzLlxuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlTWF4XG4gICAqIEBzZWUgcmF0ZVN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcmF0ZVZhbHVlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhdGVWYWx1ZXModmFsOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgcmF0ZSB2YWx1ZXMgaWYgcmF0ZVZhbHVlcyBhcnJheSBpcyBlbXB0eS4gSXQgaXMgdGhlIGZpcnN0IHZhbHVlIGluIHRoZSByYXRpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNYXhcbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlTWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVNaW5cIik7XG4gIH1cbiAgcHVibGljIHNldCByYXRlTWluKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA+IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZVN0ZXApXG4gICAgICB2YWwgPSB0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVTdGVwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVNaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzIGlmIHJhdGVWYWx1ZXMgYXJyYXkgaXMgZW1wdHkuIEl0IGlzIHRoZSBsYXN0IHZhbHVlIGluIHRoZSByYXRpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlTWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVNYXhcIik7XG4gIH1cbiAgcHVibGljIHNldCByYXRlTWF4KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA8IHRoaXMucmF0ZU1pbiArIHRoaXMucmF0ZVN0ZXApXG4gICAgICB2YWwgPSB0aGlzLnJhdGVNaW4gKyB0aGlzLnJhdGVTdGVwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVNYXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzIGlmIHJhdGVWYWx1ZXMgYXJyYXkgaXMgZW1wdHkuIEl0IGlzIHRoZSBzdGVwIHZhbHVlLiBUaGUgbnVtYmVyIG9mIHJhdGUgdmFsdWVzIGFyZSAocmF0ZU1heCAtIHJhdGVNaW4pIC8gcmF0ZVN0ZXAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlTWF4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJhdGVTdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVTdGVwXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmF0ZVN0ZXAodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDw9IDApIHZhbCA9IDE7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA+IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZU1pbilcbiAgICAgIHZhbCA9IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZU1pbjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlU3RlcFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciByZXMgPSBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUodGhpcy52aXNpYmxlUmF0ZVZhbHVlcywgdmFsdWUpO1xuICAgIHJldHVybiAhIXJlcyA/IHJlcyA6IHZhbHVlO1xuICB9XG4gIGdldCB2aXNpYmxlUmF0ZVZhbHVlcygpOiBJdGVtVmFsdWVbXSB7XG4gICAgaWYgKHRoaXMucmF0ZVZhbHVlcy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5yYXRlVmFsdWVzO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnJhdGVNaW47XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnJhdGVTdGVwO1xuICAgIHdoaWxlIChcbiAgICAgIHZhbHVlIDw9IHRoaXMucmF0ZU1heCAmJlxuICAgICAgcmVzLmxlbmd0aCA8IHNldHRpbmdzLnJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudFxuICAgICkge1xuICAgICAgcmVzLnB1c2gobmV3IEl0ZW1WYWx1ZSh2YWx1ZSkpO1xuICAgICAgdmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZSh2YWx1ZSArIHN0ZXAsIHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY29ycmVjdFZhbHVlKHZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIGlmIChNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIHZhciBmciA9IDA7XG4gICAgd2hpbGUgKE1hdGgucm91bmQoc3RlcCkgIT0gc3RlcCkge1xuICAgICAgc3RlcCAqPSAxMDtcbiAgICAgIGZyKys7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvRml4ZWQoZnIpKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhdGluZ1wiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiXzBcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIG1pbmltdW0gKGZpcnN0KSBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5SYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtaW5SYXRlRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5SYXRlRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1pblJhdGVEZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNaW5SYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWluUmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgbWF4aW11bSAobGFzdCkgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4UmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWF4UmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4UmF0ZURlc2NyaXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhSYXRlRGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTWF4UmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm1heFJhdGVEZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLnJhdGVWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5yYXRlVmFsdWVzLCB2YWwpO1xuICAgICAgcmV0dXJuICEhaXRlbSA/IGl0ZW0udmFsdWUgOiB2YWw7XG4gICAgfVxuICAgIHJldHVybiAhaXNOYU4odmFsKSA/IHBhcnNlRmxvYXQodmFsKSA6IHZhbDtcbiAgfVxuICAvKipcbiAgICogQ2xpY2sgdmFsdWUgYWdhaW4gdG8gY2xlYXIuXG4gICAqL1xuICBwdWJsaWMgc2V0VmFsdWVGcm9tQ2xpY2sodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlID09PSBwYXJzZUZsb2F0KHZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldEl0ZW1DbGFzcyhpdGVtOiBJdGVtVmFsdWUpIHtcbiAgICBjb25zdCBpdGVtQ3NzID0gdGhpcy5jc3NDbGFzc2VzLml0ZW07XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmNzc0NsYXNzZXMuc2VsZWN0ZWQ7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnZhbHVlID09IGl0ZW0udmFsdWU7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuaXNSZWFkT25seSAmJiAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgY29uc3QgYWxsb3dIb3ZlciA9XG4gICAgICAhaXNEaXNhYmxlZCAmJlxuICAgICAgIWlzU2VsZWN0ZWQgJiZcbiAgICAgICEoISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpO1xuICAgIGxldCByZXN1bHQgPSBpdGVtQ3NzO1xuICAgIGlmICh0aGlzLnZhbHVlID09IGl0ZW0udmFsdWUpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHNlbGVjdGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyBkaXNhYmxlZDtcbiAgICB9XG4gICAgaWYgKGFsbG93SG92ZXIpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicmF0aW5nXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzQ29tbWVudDpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21tZW50VGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc0NvbW1lbnRcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNDb21tZW50O1xuICAgICAgfSxcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21tZW50VGV4dFwiLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyYXRlVmFsdWVzOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfSXRlbVwiKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwicmF0ZU1pbjpudW1iZXJcIiwgZGVmYXVsdDogMSB9LFxuICAgIHsgbmFtZTogXCJyYXRlTWF4Om51bWJlclwiLCBkZWZhdWx0OiA1IH0sXG4gICAgeyBuYW1lOiBcInJhdGVTdGVwOm51bWJlclwiLCBkZWZhdWx0OiAxLCBtaW5WYWx1ZTogMC4xIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJtaW5pbnVtUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcIm1heGltdW1SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNYXhSYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgcHJvcGVydHksIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgU2lnbmF0dXJlUGFkIGZyb20gXCJzaWduYXR1cmVfcGFkXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcblxudmFyIGRlZmF1bHRXaWR0aCA9IDMwMDtcbnZhciBkZWZhdWx0SGVpZ2h0ID0gMjAwO1xuXG5mdW5jdGlvbiByZXNpemVDYW52YXMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCkge1xuICB2YXIgY29udGV4dDogYW55ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgdmFyIGRldmljZVBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICB2YXIgYmFja2luZ1N0b3JlUmF0aW8gPVxuICAgIGNvbnRleHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgY29udGV4dC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIDE7XG5cbiAgdmFyIHJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbyAvIGJhY2tpbmdTdG9yZVJhdGlvO1xuXG4gIHZhciBvbGRXaWR0aCA9IGNhbnZhcy53aWR0aDtcbiAgdmFyIG9sZEhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgY2FudmFzLndpZHRoID0gb2xkV2lkdGggKiByYXRpbztcbiAgY2FudmFzLmhlaWdodCA9IG9sZEhlaWdodCAqIHJhdGlvO1xuXG4gIGNhbnZhcy5zdHlsZS53aWR0aCA9IG9sZFdpZHRoICsgXCJweFwiO1xuICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gb2xkSGVpZ2h0ICsgXCJweFwiO1xuXG4gIGNvbnRleHQuc2NhbGUocmF0aW8sIHJhdGlvKTtcbn1cblxuLyoqXG4gKiBBIE1vZGVsIGZvciBzaWduYXR1cmUgcGFkIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBpc0RyYXdpbmdWYWx1ZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldENzc1Jvb3QoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgY2xhc3NlcyA9IHN1cGVyLmdldENzc1Jvb3QoY3NzQ2xhc3Nlcyk7XG4gICAgaWYgKFwiXCIgKyB0aGlzLndpZHRoID09PSBcIjMwMFwiKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5zbWFsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuc2lnbmF0dXJlUGFkKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuc2lnbmF0dXJlUGFkLnRvRGF0YVVSTCh0aGlzLmRhdGFGb3JtYXQpO1xuICAgICAgdGhpcy52YWx1ZSA9IGRhdGE7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzaWduYXR1cmVwYWRcIjtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIHRoaXMuaW5pdFNpZ25hdHVyZVBhZChlbCk7XG4gICAgfVxuICAgIHN1cGVyLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgfVxuICBwdWJsaWMgYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoISFlbCkge1xuICAgICAgdGhpcy5kZXN0cm95U2lnbmF0dXJlUGFkKGVsKTtcbiAgICB9XG4gIH1cblxuICBpbml0U2lnbmF0dXJlUGFkKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIHZhciBjYW52YXM6IGFueSA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpWzBdO1xuICAgIHZhciBidXR0b25FbCA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpWzBdO1xuICAgIHZhciBzaWduYXR1cmVQYWQgPSBuZXcgU2lnbmF0dXJlUGFkKGNhbnZhcywgeyBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZmZmZlwiIH0pO1xuICAgIGlmICh0aGlzLmlzSW5wdXRSZWFkT25seSkge1xuICAgICAgc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgIH1cblxuICAgIGJ1dHRvbkVsLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFsbG93Q2xlYXIgfHwgdGhpcy5pc0lucHV0UmVhZE9ubHkpIHtcbiAgICAgICAgc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgICAgICBidXR0b25FbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYXR1cmVQYWQub24oKTtcbiAgICAgICAgYnV0dG9uRWwuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2lnbmF0dXJlUGFkLnBlbkNvbG9yID0gdGhpcy5wZW5Db2xvcjtcbiAgICBzaWduYXR1cmVQYWQuYmFja2dyb3VuZENvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgc2lnbmF0dXJlUGFkLm9uQmVnaW4gPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzRHJhd2luZ1ZhbHVlID0gdHJ1ZTtcbiAgICAgIGNhbnZhcy5mb2N1cygpO1xuICAgIH07XG4gICAgc2lnbmF0dXJlUGFkLm9uRW5kID0gKCkgPT4ge1xuICAgICAgdGhpcy5pc0RyYXdpbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIH07XG4gICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy52YWx1ZTtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMud2lkdGggfHwgZGVmYXVsdFdpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMuaGVpZ2h0IHx8IGRlZmF1bHRIZWlnaHQ7XG4gICAgICByZXNpemVDYW52YXMoY2FudmFzKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBzaWduYXR1cmVQYWQuY2xlYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5mcm9tRGF0YVVSTChkYXRhKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gc2lnbmF0dXJlUGFkO1xuICAgIHZhciBwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IFwid2lkdGhcIiB8fCBvcHRpb25zLm5hbWUgPT09IFwiaGVpZ2h0XCIpIHtcbiAgICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyKTtcbiAgICB0aGlzLnNpZ25hdHVyZVBhZC5wcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gcHJvcGVydHlDaGFuZ2VkSGFuZGxlcjtcbiAgfVxuICBkZXN0cm95U2lnbmF0dXJlUGFkKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnNpZ25hdHVyZVBhZCkge1xuICAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUodGhpcy5zaWduYXR1cmVQYWQucHJvcGVydHlDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLnNpZ25hdHVyZVBhZC5vZmYoKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5zaWduYXR1cmVQYWQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIGRhdGFGb3JtYXQgZm9yIHRoZSBzaWduYXR1cmUgcGFkIGltYWdlIGRhdGEuXG4gICAqIGZvcm1hdHM6IFwiXCIgKGRlZmF1bHQpIC0gcG5nLCBcImltYWdlL2pwZWdcIiAtIGpwZWcsIFwiaW1hZ2Uvc3ZnK3htbFwiIC0gc3ZnXG4gICAqL1xuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiXCIgfSkgZGF0YUZvcm1hdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyB3aWR0aCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIDMwMCk7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIGhlaWdodCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoZWlnaHRcIiwgMjAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gY2xlYXIgY29udGVudCBvZiB0aGUgc2lnbmF0dXJlIHBhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dDbGVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbGVhclwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93Q2xlYXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbGVhclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHBlbiBjb2xvciBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBlbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBlbkNvbG9yXCIsIFwiIzFhYjM5NFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBlbkNvbG9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGVuQ29sb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgc2lnbmF0dXJlIHBhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYmFja2dyb3VuZENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRDb2xvclwiLCBcIiNmZmZmZmZcIik7XG4gIH1cbiAgcHVibGljIHNldCBiYWNrZ3JvdW5kQ29sb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNsZWFyIHNpZ25hdHVyZSBidXR0b24gY2FwdGlvbi5cbiAgICovXG4gIGdldCBjbGVhckJ1dHRvbkNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgfVxuXG4gIHB1YmxpYyBuZWVkU2hvd1BsYWNlaG9sZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0RyYXdpbmdWYWx1ZSAmJiB0aGlzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIGdldCBwbGFjZUhvbGRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInNpZ25hdHVyZVBsYWNlSG9sZGVyXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic2lnbmF0dXJlcGFkXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcIndpZHRoOm51bWJlclwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogMzAwLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWlnaHQ6bnVtYmVyXCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiAyMDAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFsbG93Q2xlYXI6Ym9vbGVhblwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGVuQ29sb3I6Y29sb3JcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IFwiIzFhYjM5NFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJiYWNrZ3JvdW5kQ29sb3I6Y29sb3JcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IFwiI2ZmZmZmZlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkYXRhRm9ybWF0XCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IHZhbHVlOiBcIlwiLCB0ZXh0OiBcIlBOR1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IFwiaW1hZ2UvanBlZ1wiLCB0ZXh0OiBcIkpQRUdcIiB9LFxuICAgICAgICB7IHZhbHVlOiBcImltYWdlL3N2Zyt4bWxcIiwgdGV4dDogXCJTVkdcIiB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic2lnbmF0dXJlcGFkXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIExvY2FsaXphYmxlU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBIZWxwZXJzLCBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBFbWFpbFZhbGlkYXRvciwgU3VydmV5VmFsaWRhdG9yIH0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgQ3VzdG9tRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRiYXNlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYW4gaW5wdXQgdGV4dCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVGV4dE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25UZXh0QmFzZSB7XG4gIHByaXZhdGUgbG9jRGF0YUxpc3RWYWx1ZTogTG9jYWxpemFibGVTdHJpbmdzO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibWluRXJyb3JUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJtYXhFcnJvclRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5sb2NEYXRhTGlzdFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5ncyh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJtaW5cIiwgXCJtYXhcIiwgXCJpbnB1dFR5cGVcIiwgXCJtaW5WYWx1ZUV4cHJlc3Npb25cIiwgXCJtYXhWYWx1ZUV4cHJlc3Npb25cIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0UmVuZGVyZWRNaW5NYXgoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChbXCJpbnB1dFR5cGVcIiwgXCJzaXplXCJdLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUlucHV0U2l6ZSgpO1xuICAgICAgdGhpcy5jYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpO1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1widGV4dFwiLCBcIm51bWJlclwiLCBcInBhc3N3b3JkXCJdLmluZGV4T2YodGhpcy5pbnB1dFR5cGUpID4gLTE7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ0ZXh0XCI7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLnNldFJlbmRlcmVkTWluTWF4KCk7XG4gICAgdGhpcy51cGRhdGVJbnB1dFNpemUoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGlucHV0IHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbnB1dFR5cGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbnB1dFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodmFsID09IFwiZGF0ZXRpbWVfbG9jYWxcIikgdmFsID0gXCJkYXRldGltZS1sb2NhbFwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0VHlwZVwiLCB2YWwudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLm1pbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWF4ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaWYgKCEhdGhpcy5taW5WYWx1ZUV4cHJlc3Npb24gfHwgISF0aGlzLm1heFZhbHVlRXhwcmVzc2lvbikge1xuICAgICAgdGhpcy5zZXRSZW5kZXJlZE1pbk1heCh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICB2YXIgdmFsaWRhdG9ycyA9IHN1cGVyLmdldFZhbGlkYXRvcnMoKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0VHlwZSA9PT0gXCJlbWFpbFwiICYmXG4gICAgICAhdGhpcy52YWxpZGF0b3JzLnNvbWUoKHYpID0+IHYuZ2V0VHlwZSgpID09PSBcImVtYWlsdmFsaWRhdG9yXCIpXG4gICAgKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobmV3IEVtYWlsVmFsaWRhdG9yKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGlucHV0IHNpemVcbiAgICovXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaXplXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNpemVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVGV4dElucHV0KCkge1xuICAgIHJldHVybiAoXG4gICAgICBbXCJ0ZXh0XCIsIFwic2VhcmNoXCIsIFwidGVsXCIsIFwidXJsXCIsIFwiZW1haWxcIiwgXCJwYXNzd29yZFwiXS5pbmRleE9mKFxuICAgICAgICB0aGlzLmlucHV0VHlwZVxuICAgICAgKSA+IC0xXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0U2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbnB1dFNpemVcIiwgMCk7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlucHV0V2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUlucHV0U2l6ZSgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuaXNUZXh0SW5wdXQgJiYgdGhpcy5zaXplID4gMCA/IHRoaXMuc2l6ZSA6IDA7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1RleHRJbnB1dCAmJlxuICAgICAgc2l6ZSA8IDEgJiZcbiAgICAgIHRoaXMucGFyZW50ICYmXG4gICAgICAhISg8YW55PnRoaXMucGFyZW50KVtcIml0ZW1TaXplXCJdXG4gICAgKSB7XG4gICAgICBzaXplID0gKDxhbnk+dGhpcy5wYXJlbnQpW1wiaXRlbVNpemVcIl07XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0U2l6ZVwiLCBzaXplKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbnB1dFdpZHRoXCIsIHNpemUgPiAwID8gXCJhdXRvXCIgOiBcIlwiKTtcbiAgfVxuICAvKipcbiAgICogVGV4dCBhdXRvIGNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dG9Db21wbGV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdXRvQ29tcGxldGVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBhdXRvQ29tcGxldGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhdXRvQ29tcGxldGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbih2YWw6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzVmFsdWVFeHByZXNzaW9uKHZhbCkpIHtcbiAgICAgIHRoaXMubWluVmFsdWVFeHByZXNzaW9uID0gdmFsLnN1YnN0cigxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXgodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRXhwcmVzc2lvbih2YWwpKSB7XG4gICAgICB0aGlzLm1heFZhbHVlRXhwcmVzc2lvbiA9IHZhbC5zdWJzdHIoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGF0IHlvdSBjYW4gc2V0dXAgYXMgZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgdG9kYXkoLTEpID0geWVzdGVyZGF5O1xuICAgKi9cbiAgcHVibGljIGdldCBtaW5WYWx1ZUV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVFeHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluVmFsdWVFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVFeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgeW91IGNhbiBzZXR1cCBhcyBleHByZXNzaW9uLCBmb3IgZXhhbXBsZSB0b2RheSgxKSA9IHRvbW9ycm93O1xuICAgKi9cbiAgcHVibGljIGdldCBtYXhWYWx1ZUV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVFeHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VmFsdWVFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVFeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZE1pbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZE1pblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkTWF4KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWF4XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGF0IHNob3dzIHdoZW4gdmFsdWUgaXMgbGVzcyB0aGFuIG1pbiBwcm9wZXJ0eS5cbiAgICogQHNlZSBtaW5cbiAgICogQHNlZSBtYXhFcnJvclRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJtaW5FcnJvclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtaW5FcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBtaW5FcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1pbkVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNaW5FcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWluRXJyb3JUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGF0IHNob3dzIHdoZW4gdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1hbiBwcm9wZXJ0eS5cbiAgICogQHNlZSBtYXhcbiAgICogQHNlZSBtaW5FcnJvclRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4RXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJtYXhFcnJvclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXhFcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhFcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1heEVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNYXhFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWF4RXJyb3JUZXh0XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRvbmx5IHByb3BlcnR5IHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGlucHV0VHlwZSBhbGxvd3MgdG8gc2V0IG1pbiBhbmQgbWF4IHByb3BlcnRpZXNcbiAgICogQHNlZSBpbnB1dFR5cGVcbiAgICogQHNlZSBtaW5cbiAgICogQHNlZSBtYXhcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNNaW5NYXhUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtaW5NYXhUeXBlcy5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA+IC0xO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmIChpc09uVmFsdWVDaGFuZ2VkIHx8IHRoaXMuY2FuU2V0VmFsdWVUb1N1cnZleSgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUxlc3NNaW4pIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBuZXcgQ3VzdG9tRXJyb3IoXG4gICAgICAgICAgdGhpcy5nZXRNaW5NYXhFcnJvclRleHQoXG4gICAgICAgICAgICB0aGlzLm1pbkVycm9yVGV4dCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnJlbmRlcmVkTWluKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlck1heCkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIG5ldyBDdXN0b21FcnJvcihcbiAgICAgICAgICB0aGlzLmdldE1pbk1heEVycm9yVGV4dChcbiAgICAgICAgICAgIHRoaXMubWF4RXJyb3JUZXh0LFxuICAgICAgICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMucmVuZGVyZWRNYXgpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5TZXRWYWx1ZVRvU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc01pbk1heFR5cGUpIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVMZXNzTWluKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJNYXgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldE1pbk1heEVycm9yVGV4dChlcnJvclRleHQ6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGVycm9yVGV4dDtcbiAgICByZXR1cm4gZXJyb3JUZXh0LnJlcGxhY2UoXCJ7MH1cIiwgdmFsdWUudG9TdHJpbmcoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNWYWx1ZUxlc3NNaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnJlbmRlcmVkTWluKSAmJlxuICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMudmFsdWUpIDxcbiAgICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMucmVuZGVyZWRNaW4pXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1ZhbHVlR3JlYXRlck1heCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMucmVuZGVyZWRNYXgpICYmXG4gICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy52YWx1ZSkgPlxuICAgICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy5yZW5kZXJlZE1heClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzRGF0ZUlucHV0VHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dFR5cGUgPT09IFwiZGF0ZVwiIHx8IHRoaXMuaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDYWxjdWxhdGVkTWluTWF4KG1pbk1heDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkobWluTWF4KSkgcmV0dXJuIG1pbk1heDtcbiAgICByZXR1cm4gdGhpcy5pc0RhdGVJbnB1dFR5cGUgPyBuZXcgRGF0ZShtaW5NYXgpIDogbWluTWF4O1xuICB9XG4gIHByaXZhdGUgc2V0UmVuZGVyZWRNaW5NYXgoXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwsXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsXG4gICkge1xuICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5taW5WYWx1ZUV4cHJlc3Npb24sXG4gICAgICB0aGlzLm1pbixcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pc0RhdGVJbnB1dFR5cGUgJiYgISFzZXR0aW5ncy5taW5EYXRlKSB7XG4gICAgICAgICAgdmFsID0gc2V0dGluZ3MubWluRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZE1pblwiLCB2YWwpO1xuICAgICAgfSxcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5tYXhWYWx1ZUV4cHJlc3Npb24sXG4gICAgICB0aGlzLm1heCxcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pc0RhdGVJbnB1dFR5cGUpIHtcbiAgICAgICAgICB2YWwgPSAhIXNldHRpbmdzLm1heERhdGUgPyBzZXR0aW5ncy5tYXhEYXRlIDogXCIyOTk5LTEyLTMxXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRNYXhcIiwgdmFsKTtcbiAgICAgIH0sXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RlcCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBzdGVwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0ZXBcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdGVwKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RlcFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRTdGVwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuc3RlcCkgPyBcImFueVwiIDogdGhpcy5zdGVwO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBbXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA8IDA7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSB7XG4gICAgcmV0dXJuIFtcImRhdGVcIiwgXCJkYXRldGltZVwiLCBcImRhdGV0aW1lLWxvY2FsXCJdLmluZGV4T2YodGhpcy5pbnB1dFR5cGUpIDwgMDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcmVjb21tZW5kZWQgb3B0aW9ucyBhdmFpbGFibGUgdG8gY2hvb3NlLlxuICAgKi9cbiAgcHVibGljIGdldCBkYXRhTGlzdCgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NEYXRhTGlzdC52YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGFMaXN0KHZhbDogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMubG9jRGF0YUxpc3QudmFsdWUgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY0RhdGFMaXN0KCk6IExvY2FsaXphYmxlU3RyaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMubG9jRGF0YUxpc3RWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGFMaXN0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMubG9jRGF0YUxpc3QuaXNFbXB0eSA/IHRoaXMuaWQgKyBcIl9kYXRhbGlzdFwiIDogXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUnVuVmFsaWRhdG9ycyhpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgfHxcbiAgICAgICFpc09uVmFsdWVDaGFuZ2VkIHx8XG4gICAgICB0aGlzLnN1cHBvcnRHb05leHRQYWdlRXJyb3IoKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuY29ycmVjdFZhbHVlVHlwZShuZXdWYWx1ZSk7XG4gICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBjb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcbiAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT0gXCJudW1iZXJcIiB8fCB0aGlzLmlucHV0VHlwZSA9PSBcInJhbmdlXCIpIHtcbiAgICAgIHJldHVybiBIZWxwZXJzLmlzTnVtYmVyKG5ld1ZhbHVlKSA/IHBhcnNlRmxvYXQobmV3VmFsdWUpIDogXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRDb250cm9sQ2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIGxldCByZXN1bHQgPVxuICAgICAgY3NzQ2xhc3Nlcy5yb290ICtcbiAgICAgICh0aGlzLmVycm9ycy5sZW5ndGggPiAwID8gXCIgXCIgKyBjc3NDbGFzc2VzLm9uRXJyb3IgOiBcIlwiKTtcbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmNvbnRyb2xEaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUGxhY2VIb2xkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5pbnB1dFR5cGUgIT09IFwicmFuZ2VcIjtcbiAgfVxufVxuXG5jb25zdCBtaW5NYXhUeXBlcyA9IFtcbiAgXCJudW1iZXJcIixcbiAgXCJyYW5nZVwiLFxuICBcImRhdGVcIixcbiAgXCJkYXRldGltZS1sb2NhbFwiLFxuICBcIm1vbnRoXCIsXG4gIFwidGltZVwiLFxuICBcIndlZWtcIixcbl07XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidGV4dFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJpbnB1dFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwidGV4dFwiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICBcImNvbG9yXCIsXG4gICAgICAgIFwiZGF0ZVwiLFxuICAgICAgICBcImRhdGV0aW1lXCIsXG4gICAgICAgIFwiZGF0ZXRpbWUtbG9jYWxcIixcbiAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICBcIm1vbnRoXCIsXG4gICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgIFwicGFzc3dvcmRcIixcbiAgICAgICAgXCJyYW5nZVwiLFxuICAgICAgICBcInRlbFwiLFxuICAgICAgICBcInRleHRcIixcbiAgICAgICAgXCJ0aW1lXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwid2Vla1wiLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2l6ZTpudW1iZXJcIixcbiAgICAgIG1pblZhbHVlOiAwLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidGV4dFVwZGF0ZU1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYXV0b0NvbXBsZXRlXCIsXG4gICAgICBkYXRhTGlzdDogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJob25vcmlmaWMtcHJlZml4XCIsXG4gICAgICAgIFwiZ2l2ZW4tbmFtZVwiLFxuICAgICAgICBcImFkZGl0aW9uYWwtbmFtZVwiLFxuICAgICAgICBcImZhbWlseS1uYW1lXCIsXG4gICAgICAgIFwiaG9ub3JpZmljLXN1ZmZpeFwiLFxuICAgICAgICBcIm5pY2tuYW1lXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uLXRpdGxlXCIsXG4gICAgICAgIFwidXNlcm5hbWVcIixcbiAgICAgICAgXCJuZXctcGFzc3dvcmRcIixcbiAgICAgICAgXCJjdXJyZW50LXBhc3N3b3JkXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uXCIsXG4gICAgICAgIFwic3RyZWV0LWFkZHJlc3NcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUxXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lMlwiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTNcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsNFwiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwzXCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDJcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsMVwiLFxuICAgICAgICBcImNvdW50cnlcIixcbiAgICAgICAgXCJjb3VudHJ5LW5hbWVcIixcbiAgICAgICAgXCJwb3N0YWwtY29kZVwiLFxuICAgICAgICBcImNjLW5hbWVcIixcbiAgICAgICAgXCJjYy1naXZlbi1uYW1lXCIsXG4gICAgICAgIFwiY2MtYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgIFwiY2MtZmFtaWx5LW5hbWVcIixcbiAgICAgICAgXCJjYy1udW1iZXJcIixcbiAgICAgICAgXCJjYy1leHBcIixcbiAgICAgICAgXCJjYy1leHAtbW9udGhcIixcbiAgICAgICAgXCJjYy1leHAteWVhclwiLFxuICAgICAgICBcImNjLWNzY1wiLFxuICAgICAgICBcImNjLXR5cGVcIixcbiAgICAgICAgXCJ0cmFuc2FjdGlvbi1jdXJyZW5jeVwiLFxuICAgICAgICBcInRyYW5zYWN0aW9uLWFtb3VudFwiLFxuICAgICAgICBcImxhbmd1YWdlXCIsXG4gICAgICAgIFwiYmRheVwiLFxuICAgICAgICBcImJkYXktZGF5XCIsXG4gICAgICAgIFwiYmRheS1tb250aFwiLFxuICAgICAgICBcImJkYXkteWVhclwiLFxuICAgICAgICBcInNleFwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcInBob3RvXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGVsLWNvdW50cnktY29kZVwiLFxuICAgICAgICBcInRlbC1uYXRpb25hbFwiLFxuICAgICAgICBcInRlbC1hcmVhLWNvZGVcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWxcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWwtcHJlZml4XCIsXG4gICAgICAgIFwidGVsLWxvY2FsLXN1ZmZpeFwiLFxuICAgICAgICBcInRlbC1leHRlbnNpb25cIixcbiAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICBcImltcHBcIixcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1pblwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgb2JqLmlzTWluTWF4VHlwZTtcbiAgICAgIH0sXG4gICAgICBvblByb3BlcnR5RWRpdG9yVXBkYXRlOiBmdW5jdGlvbihvYmo6IGFueSwgcHJvcGVydHlFZGl0b3I6IGFueSkge1xuICAgICAgICBwcm9wZXJ0eUVkaXRvci5pbnB1dFR5cGUgPSBvYmouaW5wdXRUeXBlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4XCIsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiAhIW9iaiAmJiBvYmouaXNNaW5NYXhUeXBlO1xuICAgICAgfSxcbiAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uKG9iajogYW55LCBwcm9wZXJ0eUVkaXRvcjogYW55KSB7XG4gICAgICAgIHByb3BlcnR5RWRpdG9yLmlucHV0VHlwZSA9IG9iai5pbnB1dFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5WYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgY2F0ZWdvcnk6IFwibG9naWNcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgY2F0ZWdvcnk6IFwibG9naWNcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5FcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNaW5FcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhFcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNYXhFcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzdGVwOm51bWJlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlucHV0VHlwZSA9PT0gXCJudW1iZXJcIjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heExlbmd0aDpudW1iZXJcIixcbiAgICAgIGRlZmF1bHQ6IC0xLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGxhY2VIb2xkZXJcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGF0YUxpc3Q6c3RyaW5nW11cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEYXRhTGlzdFwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlucHV0VHlwZSA9PT0gXCJ0ZXh0XCI7XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwidGV4dGJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwobmFtZSk7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbi8qKlxuICogQSBCYXNlIE1vZGVsIGZvciBhIGNvbW1lbnQgYW5kIHRleHQgcXVlc3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRCYXNlIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGxhY2VIb2xkZXJcIiwgdGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVGV4dFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0ZXh0IGxlbmd0aC4gSWYgaXQgaXMgLTEsIGRlZmF1bCB2YWx1ZSwgdGhlbiB0aGUgc3VydmV5IG1heFRleHRMZW5ndGggcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICAgKiBJZiBpdCBpcyAwLCB0aGVuIHRoZSB2YWx1ZSBpcyB1bmxpbWl0ZWRcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5tYXhUZXh0TGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0TWF4TGVuZ3RoKCk6IGFueSB7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0TWF4TGVuZ3RoKFxuICAgICAgdGhpcy5tYXhMZW5ndGgsXG4gICAgICB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5Lm1heFRleHRMZW5ndGggOiAtMVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgaW5wdXQgcGxhY2UgaG9sZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlSG9sZGVyXCIsIHZhbCk7XG4gICAgdGhpcy5jYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpO1xuICB9XG4gIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRleHRiYXNlXCI7XG4gIH1cbiAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuaXNFbXB0eSgpIHx8IHRoaXMudmFsdWUgPT09IFwiXCI7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgcXVlc3Rpb24gdXBkYXRlcyBpdCdzIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICogLSBgZGVmYXVsdGAgLSBnZXQgdGhlIHZhbHVlIGZyb20gc3VydmV5LnRleHRVcGRhdGVNb2RlXG4gICAqIC0gYG9uQmx1cmAgLSB0aGUgdmFsdWUgaXMgdXBkYXRlZCBhZnRlciBhbiBpbnB1dCBsb3NlcyB0aGUgZm9jdXMuXG4gICAqIC0gYG9uVHlwaW5nYCAtIHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGV4dCBxdWVzdGlvbnMsIFwidGV4dFwiIGFuZCBcImNvbW1lbnRcIiwgb24gZXZlcnkga2V5IHByZXNzLlxuICAgKlxuICAgKiBOb3RlLCB0aGF0IHNldHRpbmcgdG8gXCJvblR5cGluZ1wiIG1heSBsZWFkIHRvIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sIGluIGNhc2UgeW91IGhhdmUgbWFueSBleHByZXNzaW9ucyBpbiB0aGUgc3VydmV5LlxuICAgKiBAc2VlIHN1cnZleS50ZXh0VXBkYXRlTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCB0ZXh0VXBkYXRlTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHRVcGRhdGVNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGV4dFVwZGF0ZU1vZGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnRleHRVcGRhdGVNb2RlID09IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc1VwZGF0ZVZhbHVlVGV4dE9uVHlwaW5nIDogZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudGV4dFVwZGF0ZU1vZGUgPT0gXCJvblR5cGluZ1wiO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRQbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRSZW5kZXJlZFBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRQbGFjZUhvbGRlclwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICAgIHRoaXMuY2FsY1JlbmRlcmVkUGxhY2VIb2xkZXIoKTtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5jYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpO1xuICB9XG4gIHByb3RlY3RlZCBjYWxjUmVuZGVyZWRQbGFjZUhvbGRlcigpIHtcbiAgICB0aGlzLnNldFJlbmRlcmVkUGxhY2VIb2xkZXIoXG4gICAgICB0aGlzLmhhc1BsYWNlSG9sZGVyKCkgPyB0aGlzLnBsYWNlSG9sZGVyIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUGxhY2VIb2xkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHk7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidGV4dGJhc2VcIixcbiAgW10sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0QmFzZShcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5cbi8vVE9ETyByZXBsYWNlIGNvbXBsZXRlbHkgd2l0aCBFbGVtZW50RmFjdG9yeVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBRdWVzdGlvbkZhY3RvcnkoKTtcbiAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdENob2ljZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIxXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIyXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIzXCIsXG4gICAgXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q29sdW1zKCk6IHN0cmluZ1tdIHtcbiAgICB2YXIgY29sTmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpICsgXCIgXCI7XG4gICAgcmV0dXJuIFtjb2xOYW1lICsgXCIxXCIsIGNvbE5hbWUgKyBcIjJcIiwgY29sTmFtZSArIFwiM1wiXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Um93cygpOiBzdHJpbmdbXSB7XG4gICAgdmFyIHJvd05hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X3Jvd1wiKSArIFwiIFwiO1xuICAgIHJldHVybiBbcm93TmFtZSArIFwiMVwiLCByb3dOYW1lICsgXCIyXCJdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRNdXRsaXBsZVRleHRJdGVtcygpOiBzdHJpbmdbXSB7XG4gICAgdmFyIGl0ZW1OYW1lID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm11bHRpcGxldGV4dF9pdGVtbmFtZVwiKTtcbiAgICByZXR1cm4gW2l0ZW1OYW1lICsgXCIxXCIsIGl0ZW1OYW1lICsgXCIyXCJdO1xuICB9XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbj4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uXG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgdW5yZWdpc3RlckVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRWxlbWVudEZhY3RvcnkgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoXG4gICAgZWxlbWVudFR5cGU6IHN0cmluZyxcbiAgICBlbGVtZW50Q3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSUVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyB1bnJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIHJlbW92ZUZyb21TZXJpYWxpemVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgZGVsZXRlIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICAgIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS51bnJlZ2lzdGVyRWxlbWVudChlbGVtZW50VHlwZSk7XG4gICAgaWYgKHJlbW92ZUZyb21TZXJpYWxpemVyKSB7XG4gICAgICBTZXJpYWxpemVyLnJlbW92ZUNsYXNzKGVsZW1lbnRUeXBlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuZ2V0QWxsVHlwZXMoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbClcbiAgICAgIHJldHVybiBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oZWxlbWVudFR5cGUsIG5hbWUpO1xuICAgIHJldHVybiBjcmVhdG9yKG5hbWUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiwgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBub24gdmFsdWUgcXVlc3Rpb24uIFRoaXMgcXVlc3Rpb24gZG9lc24ndCBhZGQgYW55IG5ldyBmdW5jdGlvbmFsaXR5LiBJdCBoaWRlcyBzb21lIHByb3BlcnRpZXMsIGluY2x1ZGluZyB0aGUgdmFsdWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk5vblZhbHVlIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm5vbnZhbHVlXCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldFRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0NvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7fVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibm9udmFsdWVcIixcbiAgW1xuICAgIHsgbmFtZTogXCJ0aXRsZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWx1ZU5hbWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaXNSZXF1aXJlZFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlYWRPbmx5XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ0aXRsZUxvY2F0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTm9uVmFsdWUoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFJlbmRlcmVyRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlbmRlcmVyRmFjdG9yeSA9IG5ldyBSZW5kZXJlckZhY3RvcnkoKTtcblxuICBwcml2YXRlIHJlbmRlcmVyc0hhc2g6IHtcbiAgICBbcXVlc3Rpb25UeXBlOiBzdHJpbmddOiB7IFtyZW5kZXJBczogc3RyaW5nXTogYW55IH07XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgdW5yZWdpc3RlclJlbmRlcmVyKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCByZW5kZXJlckFzOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV1bcmVuZGVyZXJBc107XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJSZW5kZXJlcihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICByZW5kZXJBczogc3RyaW5nLFxuICAgIHJlbmRlcmVyOiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXSkge1xuICAgICAgdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV0gPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV1bcmVuZGVyQXNdID0gcmVuZGVyZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVuZGVyZXIocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHJlbmRlckFzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdICYmXG4gICAgICAgIHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdW3JlbmRlckFzXSkgfHxcbiAgICAgIFwiZGVmYXVsdFwiXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW5kZXJlckJ5UXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlcihxdWVzdGlvbi5nZXRUeXBlKCksIHF1ZXN0aW9uLnJlbmRlckFzKTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5yZW5kZXJlcnNIYXNoID0ge307XG4gIH1cbn1cbiIsIi8qKlxuICogR2xvYmFsIHN1cnZleSBzZXR0aW5nc1xuICovXG5leHBvcnQgdmFyIHNldHRpbmdzID0ge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0aGF0IHVzZXMgdG8gc3RvcmUgdGhlIHF1ZXN0aW9uIGNvbW1lbnQsIGFzIHtxdWVzdGlvbk5hbWV9ICsge2NvbW1lbnRQcmVmaXh9LlxuICAgKiBUaGUgZGVmYXVsdFxuICAgKi9cbiAgY29tbWVudFByZWZpeDogXCItQ29tbWVudFwiLFxuICAvKipcbiAgICogRW5jb2RlIHBhcmFtZXRlciBvbiBjYWxsaW5nIHJlc3RmdWwgd2ViIEFQSVxuICAgKi9cbiAgd2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnM6IHRydWUsXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgcmVzdWx0IGZvciBjaG9pY2VzIGdldHRpbmcgZnJvbSB3ZWIgc2VydmljZXMuIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBkaXNhYmxlIHRoZSBjYWNoaW5nLlxuICAgKi9cbiAgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsOiB0cnVlLFxuICBnZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCgpIHtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9LFxuICBzZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWwgPSB2YWw7XG4gIH0sXG4gIC8qKlxuICAgKiBTdXJ2ZXlKUyB3ZWIgc2VydmljZSBBUEkgdXJsXG4gICAqL1xuICBzdXJ2ZXlTZXJ2aWNlVXJsOiBcImh0dHBzOi8vYXBpLnN1cnZleWpzLmlvL3B1YmxpYy92MS9TdXJ2ZXlcIixcbiAgLyoqXG4gICAqIHNlcGFyYXRvciB0aGF0IGNhbiBhbGxvdyB0byBzZXQgdmFsdWUgYW5kIHRleHQgb2YgSXRlbVZhbHVlIG9iamVjdCBpbiBvbmUgc3RyaW5nIGFzOiBcInZhbHVlfHRleHRcIlxuICAgKi9cbiAgaXRlbVZhbHVlU2VwYXJhdG9yOiBcInxcIixcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBuYW1lIGZvciBtYXRyaXggKHNpbmdsZSBjaG9pY2UpXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Um93TmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IGNlbGwgdHlwZSBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXNcbiAgICovXG4gIG1hdHJpeERlZmF1bHRDZWxsVHlwZTogXCJkcm9wZG93blwiLFxuICAvKipcbiAgICogVG90YWwgdmFsdWUgcG9zdGZpeCBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXMuIFRoZSB0b3RhbCB2YWx1ZSBzdG9yZXMgYXM6IHttYXRyaXhOYW1lfSArIHtwb3N0Zml4fVxuICAgKi9cbiAgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXg6IFwiLXRvdGFsXCIsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvdyBjb3VudCBpbiBkeW5hbWljIG1hdHJpeFxuICAgKi9cbiAgbWF0cml4TWF4aW11bVJvd0NvdW50OiAxMDAwLFxuICAvKipcbiAgICogTWF4aW11bSByb3dDb3VudCB0aGF0IHJldHVybnMgaW4gYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCBmdW5jdGlvblxuICAgKi9cbiAgbWF0cml4TWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgLyoqXG4gICAqIE1heGltdW0gcGFuZWwgY291bnQgaW4gZHluYW1pYyBwYW5lbFxuICAgKi9cbiAgcGFuZWxNYXhpbXVtUGFuZWxDb3VudDogMTAwLFxuICAvKipcbiAgICogTWF4aW11bSByYXRlIHZhbHVlIGNvdW50IGluIHJhdGluZyBxdWVzdGlvblxuICAgKi9cbiAgcmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50OiAyMCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHF1ZXN0aW9uIHdoaWxlIGNob2ljZXMgYXJlIGdldHRpbmcgZnJvbSB0aGUgd2ViIHNlcnZpY2VcbiAgICovXG4gIGRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYjogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBhbHdheXMgc2VyaWFsaXplIHRoZSBsb2NhbGl6YXRpb24gc3RyaW5nIGFzIG9iamVjdCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGZvciBkZWZhdWx0IGxvY2FsZS4gSW5zdGVhZCBvZiBzdHJpbmcgXCJNeVN0clwiIHNlcmlhbGl6ZSBhcyB7ZGVmYXVsdDogXCJNeVN0clwifVxuICAgKi9cbiAgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIHRyaWdnZXIgb24gdmFsdWUgY2hhbmdlIGluc3RlYWQgb2Ygb24gbmV4dCBwYWdlLlxuICAgKi9cbiAgZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGV4ZWN1dGUgdGhlIHNraXAgdHJpZ2dlciBvbiBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqL1xuICBleGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIG9yIChkaXYpXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWluV2lkdGg6IFwiMzAwcHhcIixcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWF4V2lkdGg6IFwiaW5pdGlhbFwiLFxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSB0ZWxscyBob3cgbWFueSB0aW1lcyBzdXJ2ZXkgcmUtcnVuIGV4cHJlc3Npb25zIG9uIHZhbHVlIGNoYW5nZXMgZHVyaW5nIGNvbmRpdGlvbiBydW5uaW5nLiBXZSBuZWVkIGl0IHRvIGF2b2lkIHJlY3Vyc2lvbnMgaW4gdGhlIGV4cHJlc3Npb25zXG4gICAqL1xuICBtYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZDogMTAsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCB0aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIiBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5UaXRsZTogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCBoaWRlTnVtYmVyID0gdHJ1ZSBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSBudW1iZXIgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuTnVtYmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgYWxsIHJvd3MgYXJlIHJlbmRlcmVkIG5vIG1hdHRlcnMgd2h3dGhlciB0aGV5IGFyZSB2aXNpYmxlLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBsYXp5Um93c1JlbmRlcmluZzogZmFsc2UsXG4gIGxhenlSb3dzUmVuZGVyaW5nU3RhcnRSb3c6IDMsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGNoZWNrYm94IGFuZCByYWRpb2dyb3VwIGl0ZW1zIGFyZSBvcmRlcmVkIGluIHJvd3MuXG4gICAqIFNldCBpdCBcImNvbHVtblwiLCBhbmQgaXRlbXMgd2lsbCBiZSBvcmRlcmVkIGluIGNvbHVtbnMuXG4gICAqL1xuICBzaG93SXRlbXNJbk9yZGVyOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIFN1cHBvcnRlZCB2YWxpZGF0b3JzIGJ5IHF1ZXN0aW9uIHR5cGVzLiBZb3UgY2FuIG1vZGlmeSB0aGlzIHZhcmlhYmxlIHRvIGFkZCB2YWxpZGF0b3JzIGZvciBuZXcgcXVlc3Rpb24gdHlwZXMgb3IgYWRkL3JlbW92ZSBmb3IgZXhpc3RpbmcgcXVlc3Rpb24gdHlwZXMuXG4gICAqL1xuICBzdXBwb3J0ZWRWYWxpZGF0b3JzOiB7XG4gICAgcXVlc3Rpb246IFtcImV4cHJlc3Npb25cIl0sXG4gICAgY29tbWVudDogW1widGV4dFwiLCBcInJlZ2V4XCJdLFxuICAgIHRleHQ6IFtcIm51bWVyaWNcIiwgXCJ0ZXh0XCIsIFwicmVnZXhcIiwgXCJlbWFpbFwiXSxcbiAgICBjaGVja2JveDogW1wiYW5zd2VyY291bnRcIl0sXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgbGVzcyB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1pbkRhdGU6IFwiXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1heERhdGU6IFwiXCIsXG4gIHNob3dNb2RhbDogPFxuICAgIChcbiAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gICAgICBvbkNhbmNlbD86ICgpID0+IHZvaWRcbiAgICApID0+IHZvaWRcbiAgPnVuZGVmaW5lZCxcbiAgc3VwcG9ydENyZWF0b3JWMjogZmFsc2UsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGN1c3RvbSBpY29ucy5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVwbGFjZSBTdXJ2ZXlKUyBkZWZhdWx0IGljb25zIChkaXNwbGF5ZWQgaW4gVUkgZWxlbWVudHMgb2YgU3VydmV5SlMgTGlicmFyeSBvciBDcmVhdG9yKSB3aXRoIHlvdXIgY3VzdG9tIGljb25zLlxuICAgKiBGb3IgZXZlcnkgZGVmYXVsdCBpY29uIHRvIHJlcGxhY2UsIGFkZCBhIGtleS92YWx1ZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBpY29uJ3MgbmFtZSBhcyBhIGtleSBhbmQgdGhlIG5hbWUgb2YgeW91ciBjdXN0b20gaWNvbiBhcyBhIHZhbHVlLlxuICAgKiBGb3IgZXhhbXBsZTogU3VydmV5LnNldHRpbmdzLmN1c3RvbUljb25zW1wiaWNvbi1yZWRvXCJdID0gXCJteS1vd24tcmVkby1pY29uXCJcbiAgICovXG4gIGN1c3RvbUljb25zOiB7fSxcbn07XG4iLCJpbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XG5leHBvcnQgY2xhc3MgU3R5bGVzTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIFN1cnZleUpTU3R5bGVzU2hlZXRJZCA9IFwic3VydmV5anMtc3R5bGVzXCI7XG5cbiAgcHVibGljIHN0YXRpYyBTdHlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2Nzc1wiOlxuICAgIC8vICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0XCIsXG4gICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfY3VzdG9tX2hlYWRlclwiOlxuICAgIC8vICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDI3NXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1wiLFxuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X2NvbnRhaW5lclwiOlxuICAgIC8vICAgXCJtYXgtd2lkdGg6IDgwJTsgbWFyZ2luOiBhdXRvOyBwb3NpdGlvbjogcmVsYXRpdmU7IGNvbG9yOiAjNmQ3MDcyOyBwYWRkaW5nOiAwIDFlbTtcIixcbiAgICAvLyBcIi5zdl9ib290c3RyYXBfY3NzIC5wYW5lbC1ib2R5XCI6XG4gICAgLy8gICBcImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBwYWRkaW5nOiAxZW0gMWVtIDVlbSAxZW07IGJvcmRlci10b3A6IDJweCBzb2xpZCBsaWdodGdyYXk7XCIsXG4gICAgXCIuc3ZfbWFpbiBzcGFuXCI6IFwid29yZC1icmVhazogYnJlYWstd29yZDtcIixcblxuICAgIFwiLnN2X21haW4gbGVnZW5kXCI6IFwiYm9yZGVyOiBub25lOyBtYXJnaW46IDA7XCIsXG5cbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuXCI6IFwicGFkZGluZzogMC41ZW0gMWVtIDEuNWVtIDFlbTtcIixcbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xY2JjIGlucHV0W3R5cGU9Y2hlY2tib3hdLCAuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcWNiYyBpbnB1dFt0eXBlPXJhZGlvXVwiOlxuICAgICAgXCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4tdG9wOiAtMXB4XCIsXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcXN0biBmaWVsZHNldFwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gIC5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gLnN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXIgXCI6XG4gICAgICBcInBvc2l0aW9uOiByZWxhdGl2ZTsgbWFyZ2luLXJpZ2h0OiAyNTBweDsgbWFyZ2luLWxlZnQ6IDQwcHg7IG1hcmdpbi10b3A6IDEwcHg7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9yYWRpb2dyb3VwX2NvbnRyb2xfbGFiZWxcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lOyBwb3NpdGlvbjogc3RhdGljO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveFwiOlxuICAgICAgXCJtYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4O1wiLFxuXG4gICAgXCIuc3Zfcm93XCI6IFwiY2xlYXI6IGJvdGg7IG1pbi13aWR0aDozMDBweDtcIixcbiAgICBcIi5zdl9yb3cgLnN2X3FzdG5cIjogXCJmbG9hdDogbGVmdFwiLFxuICAgIFwiLnN2X3JvdyAuc3ZfcXN0bjpsYXN0LWNoaWxkXCI6IFwiZmxvYXQ6IG5vbmVcIixcbiAgICBcIi5zdl9xc3RuXCI6XG4gICAgICBcImRpc3BsYXk6IHZlcnRpY2FsLWFsaWduOiB0b3A7IG92ZXJmbG93OiBhdXRvOyBtaW4td2lkdGg6MzAwcHg7XCIsXG4gICAgXCIuc3ZfcF9jb250YWluZXJcIjogXCJkaXNwbGF5OiB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtaW4td2lkdGg6MzAwcHg7XCIsXG5cbiAgICBcIi5zdl9xX3RpdGxlIC5zdl9xdWVzdGlvbl9pY29uXCI6IFwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5zdl9xX3RpdGxlIC5zdl9xdWVzdGlvbl9pY29uOjpiZWZvcmVcIjpcbiAgICAgIFwiY29udGVudDogJyc7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgcGFkZGluZzogMC41ZW07IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TUNBeE1DSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UQWdNVEE3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0RRb0pMbk4wTUh0bWFXeHNPaU0yUkRjd056STdmUTBLUEM5emRIbHNaVDROQ2p4d2IyeDVaMjl1SUdOc1lYTnpQU0p6ZERBaUlIQnZhVzUwY3owaU1pd3lJREFzTkNBMUxEa2dNVEFzTkNBNExESWdOU3cxSUNJdlBnMEtQQzl6ZG1jK0RRbz0pO1wiLFxuICAgIFwiLnN2X3FfdGl0bGUgLnN2X3F1ZXN0aW9uX2ljb24uc3ZfZXhwYW5kZWQ6OmJlZm9yZVwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgIFwiLnN2X3FibG4gLmNoZWNrYm94LW1hdGVyaWFsXCI6IFwibWFyZ2luLXJpZ2h0OiAzcHg7XCIsXG4gICAgXCIuc3ZfcWNieCAuY2hlY2tib3gtbWF0ZXJpYWxcIjogXCJtYXJnaW4tcmlnaHQ6IDVweDtcIixcbiAgICBcIi5zdl9xY2J4IC5jaGVja2JveCBsYWJlbFwiOiBcImp1c3RpZnktY29udGVudDogbGVmdDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FzdG4gLnJhZGlvIGxhYmVsXCI6IFwianVzdGlmeS1jb250ZW50OiBsZWZ0OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgPiBsYWJlbCBpbWdcIjogXCJwb2ludGVyLWV2ZW50czogbm9uZTtcIixcbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbC5zdl9xX2ltYWdlcGlja2VyX2lubGluZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IG1hcmdpbjogMDsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlO1wiLFxuICAgIFwiLnN2X3FzdG4gdGRcIjogXCJwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgXCIuc3ZfcV9tdF9pdGVtX3ZhbHVlXCI6IFwiZmxvYXQ6IGxlZnQ7XCIsXG4gICAgJ1tkaXI9XCJydGxcIl0gLnN2X3FfbXRfaXRlbV92YWx1ZSc6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiLnN2X3FzdG4uc3ZfcXN0bl9sZWZ0XCI6IFwibWFyZ2luLXRvcDogMC43NWVtO1wiLFxuICAgIFwiLnN2X3FzdG4gLnRpdGxlLWxlZnRcIjogXCJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgJ1tkaXI9XCJydGxcIl0gLnN2X3FzdG4gLnRpdGxlLWxlZnQnOiBcImZsb2F0OiByaWdodDsgbWFyZ2luLWxlZnQ6IDFlbTtcIixcbiAgICBcIi5zdl9xc3RuIC5jb250ZW50LWxlZnRcIjogXCJvdmVyZmxvdzogaGlkZGVuXCIsXG4gICAgXCIuc3ZfcV9yYWRpb2dyb3VwX2lubGluZSAuc3ZfcV9yYWRpb2dyb3VwX290aGVyXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FfY2hlY2tib3hfaW5saW5lIC5zdl9xX2NoZWNrYm94X290aGVyXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FfY2hlY2tib3hfaW5saW5lLCAuc3ZfcV9yYWRpb2dyb3VwX2lubGluZSwgLnN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCI6XG4gICAgICBcImxpbmUtaGVpZ2h0OiAyLjVlbTtcIixcbiAgICBcIi5mb3JtLWlubGluZSAuc3ZfcV9jaGVja2JveF9pbmxpbmU6bm90KDpsYXN0LWNoaWxkKVwiOiBcIm1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLmZvcm0taW5saW5lIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lOm5vdCg6bGFzdC1jaGlsZClcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuc3ZfaW1nc2VsIC5zdl9xX2ltYWdlcGlja2VyX2lubGluZTpub3QoOmxhc3QtY2hpbGQpXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXRcIjogXCJib3JkZXI6IG5vbmU7IG1hcmdpbjogMDsgcGFkZGluZzogMDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIjogXCJkaXNwbGF5Om5vbmVcIixcblxuICAgIFwiLnN2X3BfdGl0bGVcIjogXCJwYWRkaW5nLWxlZnQ6IDFlbTsgcGFkZGluZy1ib3R0b206IDAuM2VtO1wiLFxuICAgIFwiLnN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiOiBcImN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdl9xX3RpdGxlX2V4cGFuZGFibGVcIjogXCJjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvblwiOiBcImZsb2F0OiByaWdodDsgbWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvbjo6YmVmb3JlXCI6XG4gICAgICBcImNvbnRlbnQ6ICcnOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IHBhZGRpbmc6IDAuNWVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5DandoTFMwZ1IyVnVaWEpoZEc5eU9pQkJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlNaTR3TGpFc0lGTldSeUJGZUhCdmNuUWdVR3gxWnkxSmJpQXVJRk5XUnlCV1pYSnphVzl1T2lBMkxqQXdJRUoxYVd4a0lEQXBJQ0F0TFQ0TkNqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaURRb0pJSFpwWlhkQ2IzZzlJakFnTUNBeE1DQXhNQ0lnYzNSNWJHVTlJbVZ1WVdKc1pTMWlZV05yWjNKdmRXNWtPbTVsZHlBd0lEQWdNVEFnTVRBN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajROQ2p4emRIbHNaU0IwZVhCbFBTSjBaWGgwTDJOemN5SStEUW9KTG5OME1IdG1hV3hzT2lNMlJEY3dOekk3ZlEwS1BDOXpkSGxzWlQ0TkNqeHdiMng1WjI5dUlHTnNZWE56UFNKemREQWlJSEJ2YVc1MGN6MGlNaXd5SURBc05DQTFMRGtnTVRBc05DQTRMRElnTlN3MUlDSXZQZzBLUEM5emRtYytEUW89KTtcIixcbiAgICBcIi5zdl9wX3RpdGxlIC5zdl9wYW5lbF9pY29uLnN2X2V4cGFuZGVkOjpiZWZvcmVcIjpcbiAgICAgIFwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIixcbiAgICBcIi5zdl9wX2Zvb3RlclwiOiBcInBhZGRpbmctbGVmdDogMWVtOyBwYWRkaW5nLWJvdHRvbTogMWVtO3BhZGRpbmctdG9wOiAxZW07XCIsXG5cbiAgICBcIi5zdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uXCI6IFwicG9zaXRpb246IHJlbGF0aXZlXCIsXG4gICAgXCIuc3ZfZGV0YWlsX3BhbmVsX2ljb25cIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogNTAlOyB0b3A6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7IHdpZHRoOiAxNHB4OyBoZWlnaHQ6IDE0cHg7XCIsXG4gICAgXCIuc3ZfZGV0YWlsX3BhbmVsX2ljb246OmJlZm9yZVwiOlxuICAgICAgXCJjb250ZW50OiAnJzsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyB3aWR0aDogMTRweDsgaGVpZ2h0OiAxNHB4OyBkaXNwbGF5OiBibG9jazsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDJTNGeG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyUzRiUzRSUzQyEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgLS0lM0UlM0NzdmcgdmVyc2lvbj0nMS4xJyBpZD0nTGF5ZXJfMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIHZpZXdCb3g9JzAgMCAxNSAxNScgc3R5bGU9J2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTUgMTU7JyB4bWw6c3BhY2U9J3ByZXNlcnZlJyUzRSUzQ3N0eWxlIHR5cGU9J3RleHQvY3NzJyUzRSAuc3QwJTdCZmlsbDolMjNGRkZGRkY7JTdEJTBBJTNDL3N0eWxlJTNFJTNDcG9seWdvbiBjbGFzcz0nc3QwJyBwb2ludHM9JzE0LDUuNSAxMi42LDQuMSA3LjUsOS4xIDIuNCw0LjEgMSw1LjUgNy41LDEyICcvJTNFJTNDL3N2ZyUzRSUwQVxcXCIpO1wiLFxuICAgIFwiLnN2X2RldGFpbF9wYW5lbF9pY29uLnN2X2RldGFpbF9leHBhbmRlZDo6YmVmb3JlXCI6XG4gICAgICBcInRyYW5zZm9ybTogcm90YXRlKDBkZWcpXCIsXG4gICAgXCIuc3ZfbWF0cml4X2VtcHR5X3Jvd3Nfc2VjdGlvblwiOlxuICAgICAgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XCIsXG4gICAgXCIuc3ZfbWF0cml4X2VtcHR5X3Jvd3NfdGV4dFwiOiBcInBhZGRpbmc6MjBweFwiLFxuXG4gICAgXCIuc3ZfcV9maWxlID4gaW5wdXRbdHlwZT1maWxlXSwgLnN2X3FfZmlsZSA+IGJ1dHRvblwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcV9maWxlX3ByZXZpZXdcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7IHBhZGRpbmc6IDVweDsgbWFyZ2luLXRvcDogMTBweDtcIixcbiAgICBcIi5zdl9xX2ZpbGVfcHJldmlldyA+IGFcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IG92ZXJmbG93OiBoaWRkZW47IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1wiLFxuICAgIFwiLnN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCI6IFwibGluZS1oZWlnaHQ6IG5vcm1hbDtcIixcbiAgICBcIi5zdl9xX2ZpbGVfcmVtb3ZlXCI6IFwiZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlcjtcIixcblxuICAgIFwiLnN2X3FfbV9jZWxsX3RleHRcIjogXCJjdXJzb3I6IHBvaW50ZXI7XCIsXG5cbiAgICBcIi5zdl9xX2RkX290aGVyXCI6IFwibWFyZ2luLXRvcDogMWVtO1wiLFxuICAgIFwiLnN2X3FfZGRfb3RoZXIgaW5wdXRcIjogXCJ3aWR0aDogMTAwJTtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTEsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtMVwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtMiwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC0yXCI6XG4gICAgICBcIndpZHRoOiBjYWxjKDUwJSAtIDFlbSk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTMsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtM1wiOlxuICAgICAgXCJ3aWR0aDogY2FsYygzMy4zMzMzMyUgLSAxZW0pOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC00LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTRcIjpcbiAgICAgIFwid2lkdGg6IGNhbGMoMjUlIC0gMWVtKTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtNSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC01XCI6XG4gICAgICBcIndpZHRoOiBjYWxjKDIwJSAtIDFlbSk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tMSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi0xXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDEwMCU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTIsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tMlwiOlxuICAgICAgXCJtYXgtd2lkdGg6IDUwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tMywgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi0zXCI6XG4gICAgICBcIm1heC13aWR0aDogMzMuMzMzMzMlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi00LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTRcIjpcbiAgICAgIFwibWF4LXdpZHRoOiAyNSU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTUsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tNVwiOlxuICAgICAgXCJtYXgtd2lkdGg6IDIwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ZpbGVfaW5wdXRcIjogXCJjb2xvcjogdHJhbnNwYXJlbnQ7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbCBsYWJlbCA+IGRpdlwiOlxuICAgICAgXCJvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgcGFkZGluZzogNHB4OyBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7IGJvcmRlci1yYWRpdXM6IDRweDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbCBsYWJlbCA+IGRpdiA+IGltZywgLnN2X3FzdG4gLnN2X3FfaW1nc2VsIGxhYmVsID4gZGl2ID4gZW1iZWRcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7XCIsXG5cbiAgICBcIi5zdl9xc3RuIHRhYmxlIHRyIHRkIC5zdl9xX21fY2VsbF9sYWJlbFwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDtcIixcblxuICAgIFwiZi1wYW5lbFwiOiBcInBhZGRpbmc6IDAuNWVtIDFlbTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBsaW5lLWhlaWdodDogMmVtO1wiLFxuXG4gICAgXCIuc3ZfcHJvZ3Jlc3NfYmFyID4gc3BhblwiOiBcIndoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG5cbiAgICAvL3Byb2dyZXNzIGJ1dHRvbnNcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXItY2VudGVyXCI6IFwidGV4dC1hbGlnbjogY2VudGVyO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lclwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTowOyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMTAwcHg7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tdG9wOiAyMnB4OyBmb250LXNpemU6IDE0cHg7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGN1cnNvcjogcG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TmlBeE5pSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UWWdNVFk3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlNVEVzTVRJZ09Td3hOQ0F6TERnZ09Td3lJREV4TERRZ055dzRJQ0l2UGcwS1BDOXpkbWMrRFFvPSk7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLXJpZ2h0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXRvcDogMjJweDsgZm9udC1zaXplOiAxNHB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5DandoTFMwZ1IyVnVaWEpoZEc5eU9pQkJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlNaTR3TGpFc0lGTldSeUJGZUhCdmNuUWdVR3gxWnkxSmJpQXVJRk5XUnlCV1pYSnphVzl1T2lBMkxqQXdJRUoxYVd4a0lEQXBJQ0F0TFQ0TkNqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaURRb0pJSFpwWlhkQ2IzZzlJakFnTUNBeE5pQXhOaUlnYzNSNWJHVTlJbVZ1WVdKc1pTMWlZV05yWjNKdmRXNWtPbTVsZHlBd0lEQWdNVFlnTVRZN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajROQ2p4d2IyeDVaMjl1SUhCdmFXNTBjejBpTlN3MElEY3NNaUF4TXl3NElEY3NNVFFnTlN3eE1pQTVMRGdnSWk4K0RRbzhMM04yWno0TkNnPT0pO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCI6IFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCI6XG4gICAgICBcIm1heC13aWR0aDogY2FsYygxMDAlIC0gMzZweCk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IG1heC1jb250ZW50OyBwYWRkaW5nLWxlZnQ6IDI4cHg7IHBhZGRpbmctcmlnaHQ6IDI4cHg7IG1hcmdpbi10b3A6IDE0cHg7IG1hcmdpbi1ib3R0b206IDE0cHg7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaVwiOlxuICAgICAgXCJ3aWR0aDogMTM4cHg7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdGV4dC1hbGlnbjogY2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpiZWZvcmVcIjpcbiAgICAgIFwid2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgY29udGVudDogJyc7IGxpbmUtaGVpZ2h0OiAzMHB4OyBib3JkZXI6IDNweCBzb2xpZCAjOGRkOWNhOyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG8gMTBweCBhdXRvOyBib3JkZXItcmFkaXVzOiA1MCU7IGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyBiYWNrZ3JvdW5kLWNvbG9yOiAjOGRkOWNhOyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOlxuICAgICAgXCJ3aWR0aDogNzMlOyBoZWlnaHQ6IDNweDsgY29udGVudDogJyc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZDRkNDsgdG9wOiAxNXB4OyBsZWZ0OiAtMzYuNSU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpmaXJzdC1jaGlsZDphZnRlclwiOiBcImNvbnRlbnQ6IG5vbmU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiAkdGV4dC1jb2xvcjsgZm9udC13ZWlnaHQ6IGJvbGQ7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkOmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICMxYWIzOTQ7IGJhY2tncm91bmQtY29sb3I6ICMxYWIzOTQ7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZCArIGxpOmFmdGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICM4ZGQ5Y2E7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnQ6YmVmb3JlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogIzFhYjM5NDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnQ6YmVmb3JlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogIzFhYjM5NDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZTpiZWZvcmVcIjpcbiAgICAgIFwiY3Vyc29yOiBub3QtYWxsb3dlZDtcIixcblxuICAgIC8vIHJhbmtpbmdcbiAgICBcIi5zdi1yYW5raW5nXCI6IFwib3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1cIjpcbiAgICAgIFwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiA1cHg7cG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1cyAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtOmhvdmVyIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6IHZpc2libGU7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb24tLWRpc2FibGVkIC5zdi1yYW5raW5nLWl0ZW06aG92ZXIgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1c1wiOiBcIm91dGxpbmU6IG5vbmU7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtOmZvY3VzIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCI6XG4gICAgICBcInZpc2liaWxpdHk6IHZpc2libGU7IHRvcDogMTVweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW06Zm9jdXMgLnN2LXJhbmtpbmctaXRlbV9faW5kZXhcIjpcbiAgICAgIFwiYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMnB4IHNvbGlkICMxOWIzOTQ7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtX19jb250ZW50XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtwYWRkaW5nLXRvcDogNXB4O3BhZGRpbmctYm90dG9tOiA1cHg7cGFkZGluZy1sZWZ0OiAzNXB4O3BhZGRpbmctcmlnaHQ6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDEwMHB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9faWNvbi1jb250YWluZXJcIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDA7dG9wOiAwO2JvdHRvbTogMDt3aWR0aDogMzVweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2ljb25cIjpcbiAgICAgIFwidmlzaWJpbGl0eTogaGlkZGVuO2xlZnQ6MTBweDt0b3A6MjBweDtmaWxsOiMxOWIzOTQ7cG9zaXRpb246IGFic29sdXRlO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9faW5kZXhcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrO3BhZGRpbmc6IDEwcHggMTZweDtiYWNrZ3JvdW5kOiByZ2JhKDI1LCAxNzksIDE0OCwgMC4xKTtib3JkZXItcmFkaXVzOiAxMDBweDtib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsgbWFyZ2luLXJpZ2h0OiAxMHB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9fdGV4dFwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2dob3N0XCI6XG4gICAgICBcImRpc3BsYXk6IG5vbmU7YmFja2dyb3VuZDogI2YzZjNmMztib3JkZXItcmFkaXVzOiAxMDBweDt3aWR0aDogMjAwcHg7aGVpZ2h0OiA1NXB4O3otaW5kZXg6IDE7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDM1cHg7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtLS1naG9zdCAuc3YtcmFua2luZy1pdGVtX19naG9zdFwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbS0tZ2hvc3QgLnN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiOiBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW0tLWRyYWcgLnN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiOlxuICAgICAgXCJib3gtc2hhZG93OiAwcHggOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEpO2JvcmRlci1yYWRpdXM6IDEwMHB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctLWRyYWcgLnN2LXJhbmtpbmctaXRlbTpob3ZlciAuc3YtcmFua2luZy1pdGVtX19pY29uXCI6XG4gICAgICBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW0tLWRyYWcgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTogdmlzaWJsZTtcIixcbiAgICBcIi5zdi1yYW5raW5nLS1tb2JpbGUgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTp2aXNpYmxlOyBmaWxsOiM5ZjlmOWY7XCIsXG4gICAgXCIuc3YtcmFua2luZy0tbW9iaWxlLnN2LXJhbmtpbmctLWRyYWcgLnN2LXJhbmtpbmctaXRlbS0tZ2hvc3QgLnN2LXJhbmtpbmctaXRlbV9faWNvbi5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6aGlkZGVuO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9zZWxlY3RfY29sdW1uXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWluLXdpZHRoOiAxMCU7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdl9xX3NlbGVjdF9jb2x1bW4gPiAqOm5vdCguc3ZfdGVjaG5pY2FsKVwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5zdl9ib2R5IC5zdl9wX3Jvb3QgLnN2X3FzdG4gLnN2X3Ffc2VsZWN0X2NvbHVtbiB0ZXh0YXJlYVwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogMDsgcGFkZGluZy1sZWZ0OiAwOyBsaW5lLWhlaWdodDogaW5pdGlhbDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1oaWRkZW5cIjogXCJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtdmlzdWFsbHloaWRkZW5cIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IDFweCAhaW1wb3J0YW50OyB3aWR0aDogMXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBoaWRkZW47IGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTsgY2xpcDogcmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO1wiLFxuXG4gICAgLy8gcGFuZWxkeW5hbWljIHByb2dyZXNzXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjpcbiAgICAgIFwiaGVpZ2h0OiAwLjE5ZW07IGJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjsgcG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzX19iYXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGhlaWdodDogMTAwJTsgcG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIC8vIEVPIHBhbmVsZHluYW1pYyBwcm9ncmVzc1xuXG4gICAgLy8gcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIjpcbiAgICAgIFwicG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiBjYWxjKDEwMCUgLSAyNTBweCk7IG1hcmdpbi10b3A6IDIwcHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0bi0tbGlzdC1tb2RlXCI6XG4gICAgICBcImZsb2F0OiBub25lOyBtYXJnaW4tdG9wOiAwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcIm1hcmdpbi10b3A6IDEuMjVlbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCI6XG4gICAgICBcIm1hcmdpbi10b3A6IDA7IG1hcmdpbi1sZWZ0OiAxLjI1ZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBjdXJzb3I6IHBvaW50ZXI7IHdpZHRoOiAwLjdlbTsgdG9wOiAtMC4yOGVtOyBwb3NpdGlvbjogYWJzb2x1dGU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiOlxuICAgICAgXCJsZWZ0OiAtMS4zZW07IHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuIFwiOlxuICAgICAgXCJyaWdodDogLTEuM2VtOyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4uc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi0tZGlzYWJsZWQsIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6XG4gICAgICBcImN1cnNvcjogYXV0bztcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjpcbiAgICAgIFwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMC44N2VtOyBtYXJnaW4tdG9wOiAwLjY5ZW07IG1hcmdpbi1sZWZ0OiA0ZW1cIixcbiAgICAvLyBFTyBwYW5lbGR5bmFtaWNcbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3aWR0aDogNjNweDsgaGVpZ2h0OiAyNHB4OyBtYXJnaW4tcmlnaHQ6IDE3cHg7IG1hcmdpbi1sZWZ0OiAyMXB4OyBwYWRkaW5nOiAycHggM3B4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBib3JkZXItcmFkaXVzOiAxMnB4OyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDsgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjRzOyB0cmFuc2l0aW9uLXByb3BlcnR5OiBtYXJnaW4tbGVmdDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiAxMDAlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsXCI6IFwidmVydGljYWwtYWxpZ246IG1pZGRsZTsgY3Vyc29yOiBwb2ludGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGUgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IGNhbGMoNTAlIC0gMTBweCk7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tY2hlY2tlZCAgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gMjBweCk7XCIsXG4gICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbl9fbGFiZWwgXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGUgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IGNhbGMoNTAlIC0gMC42MjVlbSk7XCIsXG4gICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbi0tY2hlY2tlZCAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMS4yNWVtKTtcIixcbiAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW5fX2xhYmVsIFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYyg1MCUgLSAwLjYyNWVtKTtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbi0tY2hlY2tlZCAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMS4yNWVtKTtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuXG4gICAgLy8gRU8gYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2X3FfbnVtXCI6IFwiXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9udW0gKyBzcGFuXCI6IFwiXCIsXG5cbiAgICAvLyBTaWduYXR1cmVQYWRcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfY29udGFpbmVyXCI6XG4gICAgICBcInBvc2l0aW9uOiByZWxhdGl2ZTsgYm94LXNpemluZzogY29udGVudC1ib3g7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzXCI6IFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyBib3R0b206IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzID4gYnV0dG9uXCI6IFwidXNlci1zZWxlY3Q6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lcj5kaXY+Y2FudmFzOmZvY3VzXCI6IFwib3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfcGxhY2Vob2xkZXJcIjpcbiAgICAgIFwiZGlzcGxheTogZmxleDsgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDA7IHVzZXItc2VsZWN0OiBub25lOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIixcblxuICAgIC8vIGxvZ29cbiAgICAvLyBcIi5zdl9tYWluIC5zdl9oZWFkZXJcIjogXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2xvZ29cIjogXCJcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS1sZWZ0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXJpZ2h0OiAyZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tbGVmdDogMmVtOyBmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHQrLnN2LWxvZ28tLXJpZ2h0LXRhaWxcIjogXCJjbGVhcjogYm90aDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS10b3BcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tYm90dG9tXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2hlYWRlcl9fdGV4dFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1heC13aWR0aDogMTAwJVwiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtZXhwYW5kLWFjdGlvbjpiZWZvcmVcIjogYGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQyUzRnhtbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCclM0YlM0UlM0MhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApIC0tJTNFJTNDc3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgMTAgMTAnIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDEwIDEwOycgeG1sOnNwYWNlPSdwcmVzZXJ2ZSclM0UlM0NzdHlsZSB0eXBlPSd0ZXh0L2NzcyclM0UgLnN0MCU3QmZpbGw6JTIzNDA0MDQwOyU3RCUwQSUzQy9zdHlsZSUzRSUzQ3BvbHlnb24gY2xhc3M9J3N0MCcgcG9pbnRzPScyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyBoZWlnaHQ6IDEwcHg7IHdpZHRoOiAxMnB4OyBtYXJnaW46IGF1dG8gOHB4O2AsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1leHBhbmQtYWN0aW9uLS1leHBhbmRlZDpiZWZvcmVcIjogYHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7YCxcblxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXJcIjogYGRpc3BsYXk6IGZsZXg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWFyZ2luLWxlZnQ6IGF1dG87IHBhZGRpbmc6IDAgMCAwIDE2cHg7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7YCxcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiOiBgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDI0cHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1yaWdodDogMTZweDsgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDZkNjtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbVwiOiBgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAtbW96LWFwcGVhcmFuY2U6IG5vbmU7IGFwcGVhcmFuY2U6IG5vbmU7IGRpc3BsYXk6IGZsZXg7IGhlaWdodDogNDBweDsgcGFkZGluZzogOHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBtYXJnaW4tcmlnaHQ6IDE2cHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgY3Vyc29yOiBwb2ludGVyOyBsaW5lLWhlaWdodDogMjRweDsgZm9udC1zaXplOiAxNnB4OyBvdmVyZmxvdy14OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IG1pbi13aWR0aDogYXV0bzsgZm9udC13ZWlnaHQ6IG5vcm1hbGAsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX190aXRsZVwiOiBgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgd2hpdGUtc3BhY2U6IG5vd3JhcDtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9fdGl0bGUtLXdpdGgtaWNvblwiOiBgbWFyZ2luLWxlZnQ6IDhweDtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvblwiOiBgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi0taGlkZGVuXCI6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1fX2ljb24gc3ZnXCI6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtOmFjdGl2ZVwiOiBcIm9wYWNpdHk6IDAuNTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06Zm9jdXNcIjogXCJvdXRsaW5lOiBub25lO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtdGl0bGUtYWN0aW9uc1wiOiBcImRpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi10aXRsZS1hY3Rpb25zX190aXRsZVwiOlxuICAgICAgXCJmbGV4LXdyYXA6IHdyYXA7IG1heC13aWR0aDogOTAlOyBtaW4td2lkdGg6IDUwJTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi10aXRsZS1hY3Rpb25zX19iYXJcIjogXCJtaW4td2lkdGg6IDU2cHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfbWF0cml4X2NlbGxfYWN0aW9ucyAuc3YtYWN0aW9uLWJhclwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogMDsgcGFkZGluZy1sZWZ0OiAwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3Bfd3JhcHBlcl9pbl9yb3dcIjpcbiAgICAgIFwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIixcbiAgICBcIi5zdl9tYWluICAuc3ZfcF9yZW1vdmVfYnRuX3JpZ2h0XCI6IFwibWFyZ2luLWxlZnQ6IDFlbTtcIixcbiAgICAvL2J1dHRvbi1ncm91cFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cFwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LWRpcmVjdGlvbjogcm93OyBmb250LXNpemU6IDE2cHg7IGhlaWdodDogNDhweDsgb3ZlcmZsb3c6IGF1dG87XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyB3aWR0aDogMTAwJTsgcGFkZGluZzogMTFweCAxNnB4OyBsaW5lLWhlaWdodDogMjRweDsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDQwMDsgY3Vyc29yOiBwb2ludGVyOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW06bm90KDpmaXJzdC1vZi10eXBlKVwiOiBcIm1hcmdpbi1sZWZ0OiAtMXB4O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCI6IFwiZGlzcGxheTogYmxvY2s7IGhlaWdodDogMjRweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCI6IFwiZm9udC13ZWlnaHQ6IDYwMDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uICsgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiA4cHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLS1kaXNhYmxlZFwiOiBcImNvbG9yOiBjdXJzb3I6IGRlZmF1bHQ7XCIsXG4gICAgLy9lbyBidXR0b24tZ3JvdXBcbiAgICAvL3BvcHVwXG4gICAgXCJzdi1wb3B1cFwiOiBcImRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IC0xO1wiLFxuICAgIFwiLnN2LXBvcHVwXCI6XG4gICAgICBcInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyB6LWluZGV4OiAxMDAwOyB3aWR0aDogMTAwdnc7IGhlaWdodDogMTAwdmg7IG91dGxpbmU6IG5vbmU7XCIsXG4gICAgXCIuc3YtcG9wdXAtLW1vZGFsXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1tb2RhbCAuc3YtcG9wdXBfX2NvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogc3RhdGljOyBmaWx0ZXI6IG5vbmU7IHBhZGRpbmc6IGNhbGMoNCAqIDhweCk7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2NvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IGNhbGMoMSAqIDhweCkgY2FsYygyICogOHB4KSByZ2JhKDAsIDAsIDAsIDAuMSkpOyBwYWRkaW5nOiBjYWxjKDEgKiA4cHgpIDA7IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiA0cHg7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI6XG4gICAgICBcIm1heC13aWR0aDogOTB2dzsgbWF4LWhlaWdodDogOTB2aDsgb3ZlcmZsb3c6IGF1dG87XCIsXG4gICAgXCIuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhclwiOlxuICAgICAgXCJoZWlnaHQ6IDZweDsgd2lkdGg6IDZweDsgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcIixcbiAgICBcIi5zdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXCI6XG4gICAgICBcImJhY2tncm91bmQ6IHJnYmEoMjUsIDE3OSwgMTQ4LCAwLjEpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19jb250ZW50XCI6IFwibWluLXdpZHRoOiAxMDAlO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXRvcFwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXRvcCAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIDhweCkpIHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLWJvdHRvbVwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygxICogOHB4KSk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tYm90dG9tIC5zdi1wb3B1cF9fcG9pbnRlclwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKC0xICogOHB4KSwgY2FsYygtMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXJpZ2h0XCI6XG4gICAgICBcInRyYW5zZm9ybTogdHJhbnNsYXRlKGNhbGMoMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXJpZ2h0IC5zdi1wb3B1cF9fcG9pbnRlclwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTJweCwgLTRweCkgcm90YXRlKC05MGRlZyk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tbGVmdFwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKC0xICogOHB4KSk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tbGVmdCAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoLTRweCwgLTRweCkgcm90YXRlKDkwZGVnKTtcIixcbiAgICBcIi5zdi1wb3B1cF9fcG9pbnRlclwiOiBcImRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3BvaW50ZXI6YWZ0ZXJcIjpcbiAgICAgIFwiY29udGVudDogJyAnOyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDA7IGhlaWdodDogMDsgYm9yZGVyLWxlZnQ6IGNhbGMoMSAqIDhweCkgc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1yaWdodDogY2FsYygxICogOHB4KSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWJvdHRvbTogY2FsYygxICogOHB4KSBzb2xpZCB3aGl0ZTsgYWxpZ24tc2VsZjogY2VudGVyO1wiLFxuICAgIFwiLnN2LXBvcHVwX19mb290ZXJcIjogXCJkaXNwbGF5OiBmbGV4OyBtYXJnaW4tdG9wOiBjYWxjKDQgKiA4cHgpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19mb290ZXItaXRlbTpmaXJzdC1jaGlsZFwiOiBcIm1hcmdpbi1sZWZ0OiBhdXRvO1wiLFxuICAgIFwiLnN2LXBvcHVwX19mb290ZXItaXRlbSArIC5zdi1wb3B1cF9fZm9vdGVyLWl0ZW1cIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IGNhbGMoMSAqIDhweCk7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvblwiOlxuICAgICAgXCJwYWRkaW5nOiBjYWxjKDIgKiA4cHgpIGNhbGMoNiAqIDhweCk7IGJhY2tncm91bmQ6ICNmZmY7IGJveC1zaGFkb3c6IDBweCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyOyBtYXJnaW46IDJweDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiBjYWxjKDIgKiA4cHgpOyBsaW5lLWhlaWdodDogY2FsYygzICogOHB4KTsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzE5YjM5NDsgYm9yZGVyOiBub25lOyBvdXRsaW5lOiBub25lO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b246aG92ZXJcIjogXCJib3gtc2hhZG93OiAwIDAgMCAycHggIzE5YjM5NDtcIixcbiAgICBcIi5zdi1wb3B1cF9fYnV0dG9uOmRpc2FibGVkXCI6XG4gICAgICBcImNvbG9yOiByZ2JhKDIyLCAyMiwgMjIsIDAuMTYpOyBjdXJzb3I6IGRlZmF1bHQ7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvbjpkaXNhYmxlZDpob3ZlclwiOlxuICAgICAgXCJib3gtc2hhZG93OiAwcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b24tLWFwcGx5XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogIzE5YjM5NDsgY29sb3I6ICNmZmY7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvbi0tYXBwbHk6ZGlzYWJsZWRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1wiLFxuICAgIC8vZW8gcG9wdXBcbiAgICAvL2xpc3RcbiAgICBcIi5zdi1saXN0XCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGJhY2tncm91bmQ6ICNmZmZmZmY7IGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJzsgbGlzdC1zdHlsZS10eXBlOiBub25lO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW1cIjpcbiAgICAgIFwid2lkdGg6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHBhZGRpbmc6IGNhbGMoMSAqIDhweCkgY2FsYygyICogOHB4KTsgY3Vyc29yOiBwb2ludGVyO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0taWNvblwiOlxuICAgICAgXCJmbG9hdDogbGVmdDsgd2lkdGg6IGNhbGMoMyAqIDhweCk7IGhlaWdodDogY2FsYygzICogOHB4KTsgbWFyZ2luLXJpZ2h0OiBjYWxjKDIgKiA4cHgpO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0taWNvbiBzdmdcIjogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLWljb24gdXNlXCI6IFwiZmlsbDogIzkwOTA5MDtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtOm5vdCguc3YtbGlzdF9faXRlbS0tc2VsZWN0ZWQpOmhvdmVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLS1zZWxlY3RlZFwiOiBcImJhY2tncm91bmQtY29sb3I6ICMxOWIzOTQ7IGNvbG9yOiAjZmZmO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0tLXNlbGVjdGVkIC5zdi1saXN0X19pdGVtLWljb24gdXNlXCI6IFwiZmlsbDogI2ZmZjtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLS1kaXNhYmxlZFwiOlxuICAgICAgXCJjb2xvcjogcmdiYSgyMiwgMjIsIDIyLCAwLjE2KTsgY3Vyc29yOiBkZWZhdWx0OyBwb2ludGVyLWV2ZW50czogbm9uZTtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtIHNwYW5cIjogXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIC8vZW8gbGlzdFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgTWVkaWE6IHsgW2tleTogc3RyaW5nXTogeyBtZWRpYTogc3RyaW5nOyBzdHlsZTogc3RyaW5nIH0gfSA9IHtcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC0xXCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTJcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtM1wiOiB7XG4gICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC00XCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTVcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAudGl0bGUtbGVmdFwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfcmFkaW9ncm91cF9pbmxpbmUsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZVwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGhlYWRcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGJvZHksIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlIHRyLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZSB0ZFwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGU6bm90KC5zdl9xX21hdHJpeCkgdGQ6YmVmb3JlXCI6IHtcbiAgICAgIHN0eWxlOiBcImNvbnRlbnQ6IGF0dHIodGl0bGUpO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS5zdl9xX21hdHJpeCB0ZDphZnRlclwiOiB7XG4gICAgICBzdHlsZTogXCJjb250ZW50OiBhdHRyKHRpdGxlKTsgcGFkZGluZy1sZWZ0OiAxZW1cIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnJhZGlvIGxhYmVsLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuY2hlY2tib3ggbGFiZWxcIjoge1xuICAgICAgc3R5bGU6IFwibGluZS1oZWlnaHQ6IDEycHg7IHZlcnRpY2FsLWFsaWduOiB0b3A7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBpbmxpbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jdXN0b21faGVhZGVyXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogMTMwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5zdl9oZWFkZXIgaDNcIjoge1xuICAgICAgc3R5bGU6IFwiZm9udC1zaXplOiAxLjVlbTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiAxMzAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2hlYWRlciBoMyBzcGFuXCI6IHtcbiAgICAgIHN0eWxlOiBcImZvbnQtc2l6ZTogMC43NWVtO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcF9jc3MgLnN2LXByb2dyZXNzX190ZXh0XCI6IHtcbiAgICAgIHN0eWxlOiBcIm1hcmdpbi1sZWZ0OiA4ZW07XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2X3Jvd1wiOiB7XG4gICAgICBzdHlsZTogXCIgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwO1wiLFxuICAgICAgbWVkaWE6IFwiQHN1cHBvcnRzIChkaXNwbGF5OiBmbGV4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi12dWUtcm93LWFkZGl0aW9uYWwtZGl2XCI6IHtcbiAgICAgIHN0eWxlOiBcIiBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGZsZXgtYmFzaXM6IDEwMCU7IHdpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQHN1cHBvcnRzIChkaXNwbGF5OiBmbGV4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb246bm90KDpsYXN0LWNoaWxkKVwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogbGVmdDtcIixcbiAgICAgIG1lZGlhOlxuICAgICAgICBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgIH0sXG5cbiAgICBcIltkaXI9J3J0bCddLFtzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3Ytcm93X19xdWVzdGlvbjpub3QoOmxhc3QtY2hpbGQpXCI6IHtcbiAgICAgIHN0eWxlOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgIG1lZGlhOlxuICAgICAgICBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb25cIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCUgIWltcG9ydGFudDsgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDb2xvcnM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNGY0ZjRcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxYWIzOTRcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMGFhMzg0XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBvcmFuZ2U6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmOGY4ZjhcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiNmNzgxMTlcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjZTc3MTA5XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjZjc4MTE5XCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBkYXJrYmx1ZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZDlkOGRkXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y2ZjdmMlwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzNjNGY2ZFwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMyYzNmNWRcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIGRhcmtyb3NlOiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNkZGQyY2VcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjdlZmVkXCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjNjg2NTZlXCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzU4NTU1ZVwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIH0sXG4gICAgc3RvbmU6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2NkY2NkMlwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlZmVkZjRcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMTkxOTU1XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICB3aW50ZXI6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzgyYjhkYVwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNkYWUxZTdcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMzYzNiNDBcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMWUxZDIwXCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjMDAwXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjMDAwXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICB3aW50ZXJzdG9uZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjMzIzMjMyXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y4ZjhmOFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzVhYzhmYVwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMwNmExZTdcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzAwMFwiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIG1vZGVybjoge1xuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxYWIzOTRcIixcbiAgICAgIFwiJGFkZC1idXR0b24tY29sb3JcIjogXCIjMTk0OGIzXCIsXG4gICAgICBcIiRyZW1vdmUtYnV0dG9uLWNvbG9yXCI6IFwiI2ZmMTgwMFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2Q1MjkwMVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0MDQwNDBcIixcbiAgICAgIFwiJGxpZ2h0LXRleHQtY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRidXR0b24tdGV4dC1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJGNoZWNrbWFyay1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJG1hdHJpeC10ZXh0LWNoZWNrZWQtY29sb3JcIjogXCIjZmZmXCIsXG5cbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNDA0MDQwXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHRleHQtYm9yZGVyLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiLFxuICAgICAgXCIkZGlzYWJsZWQtdGV4dC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwicmdiKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJGRyb3Bkb3duLWJvcmRlci1jb2xvclwiOiBcIiNkNGQ0ZDRcIixcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgICAgXCIkYW5zd2VyLWJhY2tncm91bmQtY29sb3JcIjogXCJyZ2JhKDI2LCAxNzksIDE0OCwgMC4yKVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcInJnYmEoMjEzLCA0MSwgMSwgMC4yKVwiLFxuICAgICAgXCIkcmFkaW8tY2hlY2tlZC1jb2xvclwiOiBcIiM0MDQwNDBcIixcbiAgICAgIFwiJGNsZWFuLWJ1dHRvbi1jb2xvclwiOiBcIiMxOTQ4YjNcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBib290c3RyYXA6IHtcbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMThhNjg5XCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIGJvb3RzdHJhcG1hdGVyaWFsOiB7XG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzE4YTY4OVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0MDQwNDA7XCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfZGVmYXVsdF9jc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGhyXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXRbdHlwZT0nYnV0dG9uJ10sIC5zdl9kZWZhdWx0X2NzcyBidXR0b25cIjpcbiAgICAgIFwiY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddOmhvdmVyLCAuc3ZfZGVmYXVsdF9jc3MgYnV0dG9uOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2hlYWRlclwiOiBcImNvbG9yOiAkaGVhZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9jdXN0b21faGVhZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfY29udGFpbmVyXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9ib2R5XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Byb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcHJvZ3Jlc3NfYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9yb290ID4gLnN2X3Jvd1wiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9yb290ID4gLnN2X3JvdzpudGgtY2hpbGQob2RkKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wX3Jvb3QgPiAuc3Zfcm93Om50aC1jaGlsZChldmVuKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX290aGVyIGlucHV0XCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICR0ZXh0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV90ZXh0X3Jvb3RcIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWNvbG9yOyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX2Ryb3Bkb3duX2NvbnRyb2xcIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dFt0eXBlPSd0ZXh0J11cIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWNvbG9yOyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHNlbGVjdFwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRleHRhcmVhXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dDpub3QoW3R5cGU9J2J1dHRvbiddKTpub3QoW3R5cGU9J3Jlc2V0J10pOm5vdChbdHlwZT0nc3VibWl0J10pOm5vdChbdHlwZT0naW1hZ2UnXSk6bm90KFt0eXBlPSdjaGVja2JveCddKTpub3QoW3R5cGU9J3JhZGlvJ10pXCI6XG4gICAgICBcImJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dDpub3QoW3R5cGU9J2J1dHRvbiddKTpub3QoW3R5cGU9J3Jlc2V0J10pOm5vdChbdHlwZT0nc3VibWl0J10pOm5vdChbdHlwZT0naW1hZ2UnXSk6bm90KFt0eXBlPSdjaGVja2JveCddKTpub3QoW3R5cGU9J3JhZGlvJ10pOmZvY3VzXCI6XG4gICAgICBcImJvcmRlcjogMXB4IHNvbGlkICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9jb250YWluZXIgLnN2X2JvZHkgLnN2X3Bfcm9vdCAuc3ZfcSAuc3Zfc2VsZWN0X3dyYXBwZXIgLnN2X3FfZHJvcGRvd25fY29udHJvbCBcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX290aGVyIGlucHV0OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV90ZXh0X3Jvb3Q6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX2Ryb3Bkb3duX2NvbnRyb2w6Zm9jdXNcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dFt0eXBlPSd0ZXh0J106Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgICcuc3ZfZGVmYXVsdF9jc3MgLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cywgLnN2X2RlZmF1bHRfY3NzIC5zdl9jb250YWluZXIgLnN2X2JvZHkgLnN2X3Bfcm9vdCAuc3ZfcSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Zm9jdXMnOlxuICAgICAgXCJvdXRsaW5lOiAxcHggZG90dGVkICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHNlbGVjdDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGV4dGFyZWE6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3NlbGVjdF93cmFwcGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3NlbGVjdF93cmFwcGVyOjpiZWZvcmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9yYXRpbmdfaXRlbS5hY3RpdmUgLnN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfcmF0aW5nX2l0ZW0gLnN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfcmF0aW5nX2l0ZW0gLnN2X3FfcmF0aW5nX2l0ZW1fdGV4dDpob3ZlclwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGFibGUuc3ZfcV9tYXRyaXggdHJcIjogXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGFibGUuc3ZfcV9tYXRyaXhfZHJvcGRvd24gdHJcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRhYmxlLnN2X3FfbWF0cml4X2R5bmFtaWMgdHJcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfbV9jZWxsX3NlbGVjdGVkXCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X3FfZmlsZV9yZW1vdmU6aG92ZXJcIjogXCJjb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9maWxlX2Nob29zZV9idXR0b25cIjpcbiAgICAgIFwiY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3FfZmlsZV9jaG9vc2VfYnV0dG9uOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWdzZWwuY2hlY2tlZCBsYWJlbD5kaXZcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvclwiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3BfZGVzY3JpcHRpb25cIjogXCJwYWRkaW5nLWxlZnQ6IDEuMjllbTtcIixcbiAgICAvL3Byb2dyZXNzIGJhclxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzX19iYXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIC8vcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImZpbGw6ICR0ZXh0LWNvbG9yXCIsXG5cbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cblxuICAgIC8vc2lnbmF0dXJlIHBhZFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXJcIjogXCJib3JkZXI6IDFweCBkYXNoZWQgJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX3BsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfbWF0cml4X2RldGFpbF9yb3dcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIC8vYWN0aW9uLWJhclxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbVwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1fX2ljb24gdXNlXCI6IFwiZmlsbDogJGZvcmVncm91bmQtbGlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtOmhvdmVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtZGltO1wiLFxuICAgIC8vZW8gYWN0aW9uLWJhclxuXG4gICAgLy9idXR0b24tZ3JvdXBcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWhvdmVyOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCI6IFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWQgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uIHVzZVwiOlxuICAgICAgXCJmaWxsOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWRpc2FibGVkO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWQgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uIHVzZVwiOlxuICAgICAgXCJmaWxsOiAkZm9yZWdyb3VuZC1kaXNhYmxlZDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW1cIjpcbiAgICAgIFwiYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgLy9lbyBidXR0b24tZ3JvdXBcblxuICAgIFwiLnN2X21haW4gLnN2X3FzdG4gdGV4dGFyZWFcIjogXCJtYXgtd2lkdGg6IDEwMCVcIixcblxuICAgIFwiLnN2X21haW4gLnN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiOiBcInBhZGRpbmctdG9wOjE0cHhcIixcbiAgICBcIi5zdl9tYWluIC5zdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb246YWZ0ZXJcIjpcbiAgICAgIFwiY29udGVudDogJyAnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiA0cHg7IHdpZHRoOiAxNnB4OyBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXItcmFkaXVzOiAxMHB4OyBjdXJzb3I6IG1vdmU7XCIsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBtb2Rlcm5UaGVtZUNzczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAvLyBcIi5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICAvLyBcIi5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW4tLWRpc2FibGVkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcblxuICAgIFwiLnN2LWJ0blwiOiBcImNvbG9yOiAkYnV0dG9uLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3hfX3N2Z1wiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgZmlsbDogdHJhbnNwYXJlbnQ7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWFsbG93aG92ZXI6aG92ZXIgLnN2LWNoZWNrYm94X19zdmdcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7IGZpbGw6ICRjaGVja21hcmstY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWNoZWNrZWQgLnN2LWNoZWNrYm94X19zdmdcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGZpbGw6ICRjaGVja21hcmstY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWNoZWNrZWQuc3YtY2hlY2tib3gtLWRpc2FibGVkIC5zdi1jaGVja2JveF9fc3ZnXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBmaWxsOiAkY2hlY2ttYXJrLWNvbG9yO1wiLFxuICAgIFwiLnN2LWNoZWNrYm94LS1kaXNhYmxlZCAuc3YtY2hlY2tib3hfX3N2Z1wiOiBcImJvcmRlci1jb2xvcjogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtY29tbWVudFwiOiBcImJvcmRlci1jb2xvcjogJHRleHQtYm9yZGVyLWNvbG9yOyBtYXgtd2lkdGg6IDEwMCU7XCIsXG4gICAgXCIuc3YtY29tbWVudDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtY29tcGxldGVkcGFnZVwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LWNvbnRhaW5lci1tb2Rlcm5cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtY29udGFpbmVyLW1vZGVybl9fdGl0bGVcIjogXCJjb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZGVzY3JpcHRpb25cIjogXCJjb2xvcjogJGRpc2FibGVkLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd25cIjogXCJib3JkZXItYm90dG9tOiAwLjA2ZW0gc29saWQgJHRleHQtYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duOmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkZHJvcGRvd24tYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvclwiOiBcImJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yOyBjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvcjo6cGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvcjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19kZWNvcmF0b3JcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fY2xlYW4tYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHJlbW92ZS1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fY2hvb3NlLWJ0bjpub3QoLnN2LWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19jaG9vc2UtYnRuLS1kaXNhYmxlZFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZpbGVfX3JlbW92ZS1zdmdcIjogXCJmaWxsOiAjZmYxODAwO1wiLFxuICAgIFwiLnN2LWZpbGVfX3NpZ24gYVwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX2NvbXBsZXRlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fbmV4dC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX3ByZXYtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19zdGFydC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX3ByZXZpZXctYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19lZGl0LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWltYWdlcGlja2VyX19pdGVtLS1hbGxvd2hvdmVyOmhvdmVyIC5zdi1pbWFnZXBpY2tlcl9faW1hZ2VcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG4gICAgXCIuc3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWNoZWNrZWQgLnN2LWltYWdlcGlja2VyX19pbWFnZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1pbWFnZXBpY2tlcl9faXRlbS0tZGlzYWJsZWQuc3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWNoZWNrZWQgLnN2LWltYWdlcGlja2VyX19pbWFnZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1pdGVtX19jb250cm9sOmZvY3VzICsgLnN2LWl0ZW1fX2RlY29yYXRvclwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeF9fdGV4dC0tY2hlY2tlZFwiOlxuICAgICAgXCJjb2xvcjogJG1hdHJpeC10ZXh0LWNoZWNrZWQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeF9fdGV4dC0tZGlzYWJsZWQuc3YtbWF0cml4X190ZXh0LS1jaGVja2VkXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1tYXRyaXhkeW5hbWljX19yZW1vdmUtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHJlbW92ZS1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uXCI6IFwicGFkZGluZy10b3A6MTZweFwiLFxuICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvbjphZnRlclwiOlxuICAgICAgXCJjb250ZW50OiAnICc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDRweDsgd2lkdGg6IDE2cHg7IGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGN1cnNvcjogbW92ZTtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLCAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiOlxuICAgICAgXCJmaWxsOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6XG4gICAgICBcImZpbGw6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOiBcImNvbG9yOiAkcHJvZ3Jlc3MtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc19fYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcHJvZ3Jlc3NfX3RleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb25fX2VyYm94XCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi1xdWVzdGlvbl9fdGl0bGUtLWFuc3dlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYW5zd2VyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb25fX3RpdGxlLS1lcnJvclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsX190aXRsZS0tZXJyb3JcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZXJyb3ItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpb19fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBmaWxsOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi1yYWRpby0tYWxsb3dob3Zlcjpob3ZlciAuc3YtcmFkaW9fX3N2Z1wiOiBcImZpbGw6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtcmFkaW8tLWNoZWNrZWQgLnN2LXJhZGlvX19zdmdcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkcmFkaW8tY2hlY2tlZC1jb2xvcjsgZmlsbDogJHJhZGlvLWNoZWNrZWQtY29sb3I7XCIsXG4gICAgXCIuc3YtcmFkaW8tLWRpc2FibGVkIC5zdi1yYWRpb19fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tZGlzYWJsZWQuc3YtcmFkaW8tLWNoZWNrZWQgLnN2LXJhZGlvX19zdmdcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZyBpbnB1dDpmb2N1cyArIC5zdi1yYXRpbmdfX21pbi10ZXh0ICsgLnN2LXJhdGluZ19faXRlbS10ZXh0LCAuc3YtcmF0aW5nIGlucHV0OmZvY3VzICsgLnN2LXJhdGluZ19faXRlbS10ZXh0XCI6XG4gICAgICBcIm91dGxpbmUtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZ19faXRlbS10ZXh0XCI6XG4gICAgICBcImNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgYm9yZGVyOiBzb2xpZCAwLjE4NzVlbSAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdfX2l0ZW0tdGV4dDpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nX19pdGVtLS1zZWxlY3RlZCAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0XCI6XG4gICAgICBcImNvbG9yOiAkZGlzYWJsZS1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmctLWRpc2FibGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dDpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi1yYXRpbmctLWRpc2FibGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dDpob3ZlciAuc3YtcmF0aW5nX19pdGVtLS1zZWxlY3RlZCAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiOjotd2Via2l0LXNjcm9sbGJhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuICAgIFwiOjotd2Via2l0LXNjcm9sbGJhci10aHVtYlwiOiBcImJhY2tncm91bmQ6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LXNlbGVjdGJhc2VfX2NsZWFyLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRjbGVhbi1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtdGFibGVcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRtYWluLWhvdmVyLWNvbG9yLCAwLjEpO1wiLFxuICAgIFwiLnN2LXRleHQ6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgICcuc3YtdGV4dFt0eXBlPVwiZGF0ZVwiXTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yJzpcbiAgICAgIFwiY29sb3I6IHRyYW5zcGFyZW50OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7IGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQtLWVycm9yOjpwbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dC0tZXJyb3I6Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dC0tZXJyb3I6LW1zLXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcImlucHV0LnN2LXRleHQsIHRleHRhcmVhLnN2LWNvbW1lbnQsIHNlbGVjdC5zdi1kcm9wZG93blwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0OjpwbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0OjotbXMtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dDotbXMtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7XCIsXG4gICAgXCIuc3YtdGFibGVfX3Jvdy0tZGV0YWlsXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIC8vc2lnbmF0dXJlIHBhZFxuICAgIFwiLnNqc19zcF9jb250YWluZXJcIjogXCJib3JkZXI6IDFweCBkYXNoZWQgJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc2pzX3NwX3BsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgYm9vdHN0cmFwVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWdzZWwuY2hlY2tlZCBsYWJlbD5kaXZcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvclwiLFxuICAgIFwiLnN2X21haW4gLnN2X3BfZGVzY3JpcHRpb25cIjogXCJwYWRkaW5nLWxlZnQ6IDEuNjZlbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xc3RuX2Vycm9yX2JvdHRvbVwiOiBcIm1hcmdpbi10b3A6IDIwcHg7IG1hcmdpbi1ib3R0b206IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAucHJvZ3Jlc3NcIjogXCJ3aWR0aDogNjAlO1wiLFxuICAgIFwiLnN2X21haW4gLnByb2dyZXNzLWJhclwiOlxuICAgICAgXCJ3aWR0aDogYXV0bzsgbWFyZ2luLWxlZnQ6IDJweDsgbWFyZ2luLXJpZ2h0OiAycHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAudGFibGU+dGJvZHk+dHI+dGRcIjogXCJtaW4td2lkdGg6IDkwcHg7XCIsXG4gICAgXCIuc3ZfbWFpbiBmLXBhbmVsIC5zdl9xc3RuXCI6IFwicGFkZGluZzogMDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X3FfaW1hZ2VcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9xc3RuOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGRcIjpcbiAgICAgIFwiZmxleDogbm9uZSAhaW1wb3J0YW50O1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3JvdyAuc3ZfcF9jb250YWluZXI6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG5cbiAgICAvL3Byb2dyZXNzIGJhclxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzX19iYXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIC8vcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImZpbGw6ICR0ZXh0LWNvbG9yXCIsXG5cbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zbGlkZXItY29sb3I7XCIsXG4gICAgLy9lbyBib29sZWFuXG5cbiAgICAvL3NpZ25hdHVyZSBwYWRcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfY29udGFpbmVyXCI6IFwiYm9yZGVyOiAxcHggZGFzaGVkICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZm9yZWdyb3VuZC1saWdodDtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X21hdHJpeF9kZXRhaWxfcm93XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7IGJvcmRlci10b3A6IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGJvb3RzdHJhcG1hdGVyaWFsVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAuaXMtZm9jdXNlZCAuZm9ybS1jb250cm9sXCI6XG4gICAgICBcImxpbmVhci1ncmFkaWVudCgwZGVnLCAkbWFpbi1jb2xvciAycHgsICRtYWluLWNvbG9yIDApLGxpbmVhci1ncmFkaWVudCgwZGVnLCAjRDJEMkQyIDFweCwgdHJhbnNwYXJlbnQgMCk7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FzdG5cIjogXCJtYXJnaW4tYm90dG9tOiAxcmVtO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOlxuICAgICAgXCJoZWlnaHQ6IDEwMCU7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9tYWluIC5zdl9yb3cgLnN2X3FzdG46Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9wX2NvbnRhaW5lcjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkXCI6XG4gICAgICBcImZsZXg6IG5vbmUgIWltcG9ydGFudDtcIixcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0LmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0OmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuYnRuLXNlY29uZGFyeTphY3RpdmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddLmJ0bi1wcmltYXJ5LCAuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgYnV0dG9uLmJ0bi1wcmltYXJ5XCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBpbnB1dFt0eXBlPSdidXR0b24nXS5idG4tcHJpbWFyeTpob3ZlciwgLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGJ1dHRvbi5idG4tcHJpbWFyeTpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FfZmlsZV9yZW1vdmU6aG92ZXJcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAgaW5wdXRbdHlwZT1maWxlXVwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG9wYWNpdHk6IDE7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnByb2dyZXNzXCI6IFwid2lkdGg6IDYwJTsgaGVpZ2h0OiAxLjVlbTtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAucHJvZ3Jlc3MtYmFyXCI6XG4gICAgICBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4gLmNoZWNrYm94LWRlY29yYXRvclwiOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbC5zdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIjpcbiAgICAgIFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbFwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdl9tYXRyaXhfZGV0YWlsX3Jvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkOyBib3JkZXItdG9wOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuXG4gICAgLy9zaWduYXR1cmUgcGFkXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lclwiOiBcImJvcmRlcjogMXB4IGRhc2hlZCAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGZvcmVncm91bmQtbGlnaHQ7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgfTtcblxuICBwcml2YXRlIHNoZWV0OiBDU1NTdHlsZVNoZWV0ID0gbnVsbDtcblxuICBzdGF0aWMgZmluZFNoZWV0KHN0eWxlU2hlZXRJZDogc3RyaW5nKTogYW55IHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEhZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlICYmXG4gICAgICAgICg8YW55PmRvY3VtZW50KS5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGVbXCJpZFwiXSA9PT0gc3R5bGVTaGVldElkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIDxDU1NTdHlsZVNoZWV0PmRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVTaGVldChzdHlsZVNoZWV0SWQ6IHN0cmluZykge1xuICAgIGxldCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZS5pZCA9IHN0eWxlU2hlZXRJZDtcbiAgICAvLyBBZGQgYSBtZWRpYSAoYW5kL29yIG1lZGlhIHF1ZXJ5KSBoZXJlIGlmIHlvdSdkIGxpa2UhXG4gICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJzY3JlZW5cIilcbiAgICAvLyBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBcIm9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogMTAyNHB4KVwiKVxuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKTtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICByZXR1cm4gPENTU1N0eWxlU2hlZXQ+c3R5bGUuc2hlZXQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFwcGx5VGhlbWUoXG4gICAgdGhlbWVOYW1lOiBzdHJpbmcgPSBcImRlZmF1bHRcIixcbiAgICB0aGVtZVNlbGVjdG9yOiBzdHJpbmcgPSBcIi5zdl9tYWluXCJcbiAgKSB7XG4gICAgbGV0IFRoZW1lQ3NzOiBhbnk7XG5cbiAgICBpZiAodGhlbWVOYW1lID09PSBcIm1vZGVyblwiKSB0aGVtZVNlbGVjdG9yID0gXCIuc3Ytcm9vdC1tb2Rlcm4gXCI7XG5cbiAgICBpZiAoXG4gICAgICBbXCJib290c3RyYXBcIiwgXCJib290c3RyYXBtYXRlcmlhbFwiLCBcIm1vZGVyblwiXS5pbmRleE9mKHRoZW1lTmFtZSkgIT09IC0xXG4gICAgKSB7XG4gICAgICBUaGVtZUNzcyA9ICg8YW55PlN0eWxlc01hbmFnZXIpW3RoZW1lTmFtZSArIFwiVGhlbWVDc3NcIl07XG4gICAgICBzdXJ2ZXlDc3MuY3VycmVudFR5cGUgPSB0aGVtZU5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIFRoZW1lQ3NzID0gU3R5bGVzTWFuYWdlci5UaGVtZUNzcztcbiAgICAgIHN1cnZleUNzcy5jdXJyZW50VHlwZSA9IFwic3RhbmRhcmRcIjtcbiAgICB9XG5cbiAgICBpZiAoU3R5bGVzTWFuYWdlci5FbmFibGVkKSB7XG4gICAgICBsZXQgc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmZpbmRTaGVldCh0aGVtZU5hbWUgKyB0aGVtZVNlbGVjdG9yKTtcbiAgICAgIGlmICghc2hlZXQpIHtcbiAgICAgICAgc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmNyZWF0ZVNoZWV0KHRoZW1lTmFtZSArIHRoZW1lU2VsZWN0b3IpO1xuICAgICAgICBsZXQgdGhlbWUgPVxuICAgICAgICAgIFN0eWxlc01hbmFnZXIuVGhlbWVDb2xvcnNbdGhlbWVOYW1lXSB8fFxuICAgICAgICAgIFN0eWxlc01hbmFnZXIuVGhlbWVDb2xvcnNbXCJkZWZhdWx0XCJdO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKFRoZW1lQ3NzKS5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICAgIGxldCBjc3NSdWxlVGV4dCA9IFRoZW1lQ3NzW3NlbGVjdG9yXTtcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGVtZSkuZm9yRWFjaChcbiAgICAgICAgICAgIChjb2xvclZhcmlhYmxlTmFtZSkgPT5cbiAgICAgICAgICAgICAgKGNzc1J1bGVUZXh0ID0gY3NzUnVsZVRleHQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKFwiXFxcXFwiICsgY29sb3JWYXJpYWJsZU5hbWUsIFwiZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVtZVtjb2xvclZhcmlhYmxlTmFtZV1cbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgICB0aGVtZVNlbGVjdG9yICsgc2VsZWN0b3IgKyBcIiB7IFwiICsgY3NzUnVsZVRleHQgKyBcIiB9XCIsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBFbmFibGVkID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoU3R5bGVzTWFuYWdlci5FbmFibGVkKSB7XG4gICAgICB0aGlzLnNoZWV0ID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQoU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWQpO1xuICAgICAgaWYgKCF0aGlzLnNoZWV0KSB7XG4gICAgICAgIHRoaXMuc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmNyZWF0ZVNoZWV0KFxuICAgICAgICAgIFN0eWxlc01hbmFnZXIuU3VydmV5SlNTdHlsZXNTaGVldElkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0eWxlcyh0aGlzLnNoZWV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVN0eWxlcyhzaGVldDogQ1NTU3R5bGVTaGVldCkge1xuICAgIGlmIChTdHlsZXNNYW5hZ2VyLkVuYWJsZWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKFN0eWxlc01hbmFnZXIuU3R5bGVzKS5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNoZWV0Lmluc2VydFJ1bGUoXG4gICAgICAgICAgICBzZWxlY3RvciArIFwiIHsgXCIgKyBTdHlsZXNNYW5hZ2VyLlN0eWxlc1tzZWxlY3Rvcl0gKyBcIiB9XCIsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmtleXMoU3R5bGVzTWFuYWdlci5NZWRpYSkuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5NZWRpYVtzZWxlY3Rvcl0ubWVkaWEgK1xuICAgICAgICAgICAgICBcIiB7IFwiICtcbiAgICAgICAgICAgICAgc2VsZWN0b3IgK1xuICAgICAgICAgICAgICBcIiB7IFwiICtcbiAgICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5NZWRpYVtzZWxlY3Rvcl0uc3R5bGUgK1xuICAgICAgICAgICAgICBcIiB9IH1cIixcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcIi4vcmVuZGVyZXJGYWN0b3J5XCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnMvYWN0aW9uXCI7XHJcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcclxuaW1wb3J0IHtcclxuICBJU3VydmV5RWxlbWVudCxcclxuICBJRWxlbWVudCxcclxuICBJUGFnZSxcclxuICBJUGFuZWwsXHJcbiAgSVByb2dyZXNzSW5mbyxcclxuICBJU3VydmV5LFxyXG4gIElTdXJ2ZXlEYXRhLFxyXG4gIElTdXJ2ZXlJbXBsLFxyXG4gIElUZXh0UHJvY2Vzc29yLFxyXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3Mgb2YgU3VydmV5SlMgRWxlbWVudHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJU3VydmV5RWxlbWVudCB7XHJcbiAgc3RhdGVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhcclxuICAgIGNoaWxkcmVuOiBBcnJheTxTdXJ2ZXlFbGVtZW50PixcclxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW5cclxuICApOiBJUHJvZ3Jlc3NJbmZvIHtcclxuICAgIHZhciBpbmZvID0gQmFzZS5jcmVhdGVQcm9ncmVzc0luZm8oKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCFjaGlsZHJlbltpXS5pc1Zpc2libGUpIGNvbnRpbnVlO1xyXG4gICAgICB2YXIgY2hpbGRJbmZvID0gY2hpbGRyZW5baV0uZ2V0UHJvZ3Jlc3NJbmZvKCk7XHJcbiAgICAgIGluZm8ucXVlc3Rpb25Db3VudCArPSBjaGlsZEluZm8ucXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKz0gY2hpbGRJbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQgKz0gY2hpbGRJbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCArPVxyXG4gICAgICAgIGNoaWxkSW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDtcclxuICAgIH1cclxuICAgIGlmIChpc1JlcXVpcmVkICYmIGluZm8ucXVlc3Rpb25Db3VudCA+IDApIHtcclxuICAgICAgaWYgKGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID09IDApIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID0gMTtcclxuICAgICAgaWYgKGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50ID4gMClcclxuICAgICAgICBpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ID0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbmZvO1xyXG4gIH1cclxuICBwcml2YXRlIHN1cnZleUltcGxWYWx1ZTogSVN1cnZleUltcGw7XHJcbiAgcHJpdmF0ZSBzdXJ2ZXlEYXRhVmFsdWU6IElTdXJ2ZXlEYXRhO1xyXG4gIHByaXZhdGUgc3VydmV5VmFsdWU6IElTdXJ2ZXk7XHJcbiAgcHJpdmF0ZSB0ZXh0UHJvY2Vzc29yVmFsdWU6IElUZXh0UHJvY2Vzc29yO1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ25WYWx1ZTogU3VydmV5RWxlbWVudCA9IHRoaXM7XHJcbiAgcHJpdmF0ZSBleHBhbmRBY3Rpb246IEFjdGlvbjtcclxuICBwdWJsaWMgcmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2Nyb2xsRWxlbWVudFRvVG9wKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWVsZW1lbnRJZCB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICBpZiAoIWVsIHx8ICFlbC5zY3JvbGxJbnRvVmlldykgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGVsZW1Ub3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICBpZiAoZWxlbVRvcCA8IDApIGVsLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICByZXR1cm4gZWxlbVRvcCA8IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0Rmlyc3ROb25UZXh0RWxlbWVudChcclxuICAgIGVsZW1lbnRzOiBhbnksXHJcbiAgICByZW1vdmVTcGFjZXM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoIHx8IGVsZW1lbnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChyZW1vdmVTcGFjZXMpIHtcclxuICAgICAgdmFyIHRFbCA9IGVsZW1lbnRzWzBdO1xyXG4gICAgICBpZiAodEVsLm5vZGVOYW1lID09PSBcIiN0ZXh0XCIpIHRFbC5kYXRhID0gXCJcIjtcclxuICAgICAgdEVsID0gZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIGlmICh0RWwubm9kZU5hbWUgPT09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjdGV4dFwiICYmIGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI2NvbW1lbnRcIilcclxuICAgICAgICByZXR1cm4gZWxlbWVudHNbaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBGb2N1c0VsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghZWxlbWVudElkIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIHJlcyA9IFN1cnZleUVsZW1lbnQuZm9jdXNFbGVtZW50Q29yZShlbGVtZW50SWQpO1xyXG4gICAgaWYgKCFyZXMpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgU3VydmV5RWxlbWVudC5mb2N1c0VsZW1lbnRDb3JlKGVsZW1lbnRJZCk7XHJcbiAgICAgIH0sIDEwKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIGZvY3VzRWxlbWVudENvcmUoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgZWwuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNhYmxlRGVzaWduQWN0aW9uczogYm9vbGVhbiA9XHJcbiAgICBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHM7XHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJlcnJvcnNcIik7XHJcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidGl0bGVBY3Rpb25zXCIpO1xyXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzUmVhZE9ubHlcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJlcnJvcnNcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVFcnJvcnMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHN1cGVyLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIGlmIChuYW1lID09PSBcInN0YXRlXCIpIHtcclxuICAgICAgaWYgKG9sZFZhbHVlID09PSBcImRlZmF1bHRcIiB8fCBuZXdWYWx1ZSA9PT0gXCJkZWZhdWx0XCIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlQWN0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXBkYXRlRXhwYW5kQWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc3RhdGVDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc3RhdGVDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gXCJjb2xsYXBzZWRcIiB0byByZW5kZXIgb25seSBQYW5lbCB0aXRsZSBhbmQgZXhwYW5kZWQgYnV0dG9uIGFuZCB0byBcImV4cGFuZGVkXCIgdG8gcmVuZGVyIHRoZSBjb2xsYXBzZWQgYnV0dG9uIGluIHRoZSBQYW5lbCBjYXB0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBzdGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0YXRlXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHN0YXRlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGF0ZVwiLCB2YWwpO1xyXG4gICAgdGhpcy5ub3RpZnlTdGF0ZUNoYW5nZWQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBub3RpZnlTdGF0ZUNoYW5nZWQoKSB7XHJcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgdGhpcy5zdXJ2ZXkuZWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBFbGVtZW50IGlzIGluIHRoZSBjb2xsYXBzZWQgc3RhdGVcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICogQHNlZSBjb2xsYXBzZVxyXG4gICAqIEBzZWUgaXNFeHBhbmRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNDb2xsYXBzZWQoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlID09IFwiY29sbGFwc2VkXCI7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgRWxlbWVudCBpcyBpbiB0aGUgZXhwYW5kZWQgc3RhdGVcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICogQHNlZSBleHBhbmRcclxuICAgKiBAc2VlIGlzQ29sbGFwc2VkXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT0gXCJleHBhbmRlZFwiO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb2xsYXBzZSB0aGUgRWxlbWVudFxyXG4gICAqIEBzZWUgc3RhdGVcclxuICAgKi9cclxuICBwdWJsaWMgY29sbGFwc2UoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImNvbGxhcHNlZFwiO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFeHBhbmQgdGhlIEVsZW1lbnRcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIGV4cGFuZCgpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImV4cGFuZGVkXCI7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSBlbGVtZW50J3Mgc3RhdGVcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZVN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcclxuICAgICAgdGhpcy5leHBhbmQoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzU3RhdGVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkIHx8IHRoaXMuaXNDb2xsYXBzZWQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgdGl0bGVUb29sYmFyVmFsdWU6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyO1xyXG4gIHB1YmxpYyBnZXRUaXRsZVRvb2xiYXIoKTogQWRhcHRpdmVBY3Rpb25Db250YWluZXIge1xyXG4gICAgaWYgKCF0aGlzLnRpdGxlVG9vbGJhclZhbHVlKSB7XHJcbiAgICAgIHRoaXMudGl0bGVUb29sYmFyVmFsdWUgPSBuZXcgQWRhcHRpdmVBY3Rpb25Db250YWluZXIoKTtcclxuICAgICAgdGhpcy50aXRsZVRvb2xiYXJWYWx1ZS5zZXRJdGVtcyh0aGlzLmdldFRpdGxlQWN0aW9ucygpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRpdGxlVG9vbGJhclZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZUV4cGFuZEFjdGlvbigpIHtcclxuICAgIGlmICghIXRoaXMuZXhwYW5kQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWN0aW9uLnZpc2libGUgPSB0aGlzLmlzRXhwYW5kZWQgfHwgdGhpcy5pc0NvbGxhcHNlZDtcclxuICAgICAgdGhpcy5leHBhbmRBY3Rpb24uaW5uZXJDc3MgPVxyXG4gICAgICAgIFwic3YtZXhwYW5kLWFjdGlvblwiICtcclxuICAgICAgICAodGhpcy5pc0V4cGFuZGVkID8gXCIgc3YtZXhwYW5kLWFjdGlvbi0tZXhwYW5kZWRcIiA6IFwiXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRpdGxlQWN0aW9ucygpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUFjdGlvbnNcIik7XHJcbiAgfVxyXG4gIHByaXZhdGUgaXNUaXRsZUFjdGlvblJlcXVlc3RlZDogYm9vbGVhbjtcclxuICBwdWJsaWMgZ2V0VGl0bGVBY3Rpb25zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzVGl0bGVBY3Rpb25SZXF1ZXN0ZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVUaXRsZUFjdGlvbnMoKTtcclxuICAgICAgdGhpcy5pc1RpdGxlQWN0aW9uUmVxdWVzdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRpdGxlQWN0aW9ucztcclxuICB9XHJcbiAgcHJpdmF0ZSB1cGRhdGVUaXRsZUFjdGlvbnMoKSB7XHJcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhdGVCdXR0b24gJiYgIXRoaXMuZXhwYW5kQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWN0aW9uID0gbmV3IEFjdGlvbih7XHJcbiAgICAgICAgaWQ6IFwiZXhwYW5kLWNvbGxhcHNlLWFjdGlvblwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIGRpc2FibGVUYWJTdG9wOiB0cnVlLFxyXG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2dnbGVTdGF0ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5leHBhbmRBY3Rpb24pIHtcclxuICAgICAgYWN0aW9ucy5wdXNoKHRoaXMuZXhwYW5kQWN0aW9uKTtcclxuICAgIH1cclxuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XHJcbiAgICAgIGFjdGlvbnMgPSB0aGlzLnN1cnZleS5nZXRVcGRhdGVkRWxlbWVudFRpdGxlQWN0aW9ucyh0aGlzLCBhY3Rpb25zKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlRXhwYW5kQWN0aW9uKCk7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUFjdGlvbnNcIiwgYWN0aW9ucyk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzVGl0bGVBY3Rpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGVBY3Rpb25zKCkubGVuZ3RoID4gMDtcclxuICB9XHJcbiAgcHVibGljIGdldFRpdGxlQ29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBSZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UuZ2V0UmVuZGVyZXIoXHJcbiAgICAgIFwiZWxlbWVudFwiLFxyXG4gICAgICBcInRpdGxlLWFjdGlvbnNcIlxyXG4gICAgKTtcclxuICAgIGlmIChjb21wb25lbnROYW1lID09IFwiZGVmYXVsdFwiKSB7XHJcbiAgICAgIHJldHVybiBcInN2LWRlZmF1bHQtdGl0bGVcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBjb21wb25lbnROYW1lO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRpdGxlVGFiSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlICE9PSBcImRlZmF1bHRcIiA/IDAgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGl0bGVBcmlhRXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gXCJkZWZhdWx0XCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJleHBhbmRlZFwiO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcclxuICAgIHRoaXMuc3VydmV5SW1wbFZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAoIXRoaXMuc3VydmV5SW1wbFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3VydmV5Q29yZShudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3VydmV5RGF0YVZhbHVlID0gdGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5RGF0YSgpO1xyXG4gICAgICB0aGlzLnNldFN1cnZleUNvcmUodGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5KCkpO1xyXG4gICAgICB0aGlzLnRleHRQcm9jZXNzb3JWYWx1ZSA9IHRoaXMuc3VydmV5SW1wbFZhbHVlLmdldFRleHRQcm9jZXNzb3IoKTtcclxuICAgICAgdGhpcy5vblNldERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXlJbXBsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5SW1wbFZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGRhdGEoKTogSVN1cnZleURhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5RGF0YVZhbHVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzdXJ2ZXkgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IElTdXJ2ZXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VydmV5KCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XHJcbiAgICBpZiAoISF0aGlzLnN1cnZleVZhbHVlKSByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcclxuICAgIGlmICghIXRoaXMuc3VydmV5SW1wbFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3VydmV5Q29yZSh0aGlzLnN1cnZleUltcGxWYWx1ZS5nZXRTdXJ2ZXkoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIHNldFN1cnZleUNvcmUodmFsdWU6IElTdXJ2ZXkpIHtcclxuICAgIHRoaXMuc3VydmV5VmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmICghIXRoaXMuc3VydmV5Q2hhbmdlZENhbGxiYWNrKSB7XHJcbiAgICAgIHRoaXMuc3VydmV5Q2hhbmdlZENhbGxiYWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gaW4gZGVzaWduIG1vZGUgcmlnaHQgbm93LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlO1xyXG4gIH1cclxuICBwdWJsaWMgaXNDb250ZW50RWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0VkaXRhYmxlVGVtcGxhdGVFbGVtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzSW50ZXJhY3RpdmVEZXNpZ25FbGVtZW50OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcm90ZWN0ZWQgZ2V0IGlzSW50ZXJuYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0NvbnRlbnRFbGVtZW50O1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcclxuICAgICAgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nICYmXHJcbiAgICAgICF0aGlzLmlzQ29udGVudEVsZW1lbnRcclxuICAgICk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gbWFrZSBhbiBlbGVtZW50IHF1ZXN0aW9uL3BhbmVsL3BhZ2UgcmVhZG9ubHkuXHJcbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxyXG4gICAqIEBzZWUgZW5hYmxlSWZcclxuICAgKiBAc2VlIGlzUmVhZE9ubHlcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlYWRPbmx5XCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLnJlYWRPbmx5ID09IHZhbCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVhZE9ubHlcIiwgdmFsKTtcclxuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xyXG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlYWRPbmx5XCIsIHRoaXMuaXNSZWFkT25seSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcclxuICAgIGlmICghIXRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spIHtcclxuICAgICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHt9XHJcbiAgcHJvdGVjdGVkIGdldElzTG9hZGluZ0Zyb21Kc29uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHN1cGVyLmdldElzTG9hZGluZ0Zyb21Kc29uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuaXNMb2FkaW5nRnJvbUpzb24gOiBmYWxzZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiBhIHN1cnZleSBlbGVtZW50IC0gcXVlc3Rpb24gb3IgcGFuZWwuXHJcbiAgICogQHNlZSB2YWx1ZU5hbWVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcclxuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubmFtZTtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdGhpcy5nZXRWYWxpZE5hbWUodmFsKSk7XHJcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgISFvbGRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm9uTmFtZUNoYW5nZWQob2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0VmFsaWROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIG9uTmFtZUNoYW5nZWQob2xkVmFsdWU6IHN0cmluZykge31cclxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICEhdGhpcy5kYXRhICYmXHJcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuZGF0YS5nZXRWYWx1ZSh2YWx1ZU5hbWUpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0YS5zZXRWYWx1ZSh2YWx1ZU5hbWUsIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGVycm9ycy4gSXQgaXMgY3JlYXRlZCBieSBjYWxsaWcgaGFzRXJyb3JzIGZ1bmN0aW9uc1xyXG4gICAqIEBzZWUgaGFzRXJyb3JzXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBlcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlcnJvcnNcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZXJyb3JzKHZhbDogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJlcnJvcnNcIiwgdmFsKTtcclxuICB9XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBoYXNWaXNpYmxlRXJyb3JzOiBib29sZWFuO1xyXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUVycm9ycygpIHtcclxuICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lcnJvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuZXJyb3JzW2ldLnZpc2libGUpIGNvdW50ZXIrKztcclxuICAgIH1cclxuICAgIHRoaXMuaGFzVmlzaWJsZUVycm9ycyA9IGNvdW50ZXIgPiAwO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBxdWVzdGlvbiBvciBhIGNvbnRhaW5lciAocGFuZWwvcGFnZSkgb3IgdGhlaXIgY2hpZHJlbiBoYXZlIGFuIGVycm9yLlxyXG4gICAqIFRoZSB2YWx1ZSBjYW4gYmUgb3V0IG9mIGRhdGUuIGhhc0Vycm9ycyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGNvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHVwZGF0ZUNvbnRhaW5zRXJyb3JzKCkge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29udGFpbnNFcnJvcnNcIiwgdGhpcy5nZXRDb250YWluc0Vycm9ycygpKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ24oKTogU3VydmV5RWxlbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkRWxlbWVudEluRGVzaWduKHZhbDogU3VydmV5RWxlbWVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgdXBkYXRlQ3VzdG9tV2lkZ2V0cygpIHt9XHJcblxyXG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7fVxyXG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge31cclxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XHJcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcclxuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgdGhpcy5vblN1cnZleUxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHNldFZpc2libGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNQYWdlKCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBwYW5lbC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzUGFuZWwoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBhIHF1ZXN0aW9uLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNRdWVzdGlvbigpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGRlbGV0ZSgpIHt9XHJcbiAgcHJvdGVjdGVkIHJlbW92ZVNlbGZGcm9tTGlzdChsaXN0OiBBcnJheTxhbnk+KSB7XHJcbiAgICBpZiAoIWxpc3QgfHwgIUFycmF5LmlzQXJyYXkobGlzdCkpIHJldHVybjtcclxuICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZih0aGlzKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldCB0ZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcclxuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3JWYWx1ZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFByb2Nlc3NlZEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghaHRtbCB8fCAhdGhpcy50ZXh0UHJvY2Vzc29yKSByZXR1cm4gaHRtbDtcclxuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQoaHRtbCwgdHJ1ZSk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBvblNldERhdGEoKSB7fVxyXG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IElQYW5lbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIG51bGwpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IElQYW5lbCkge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0UGFnZShwYXJlbnQ6IElQYW5lbCk6IElQYWdlIHtcclxuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIDxJUGFnZT4oPGFueT5wYXJlbnQpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBtb3ZlVG9CYXNlKFxyXG4gICAgcGFyZW50OiBJUGFuZWwsXHJcbiAgICBjb250YWluZXI6IElQYW5lbCxcclxuICAgIGluc2VydEJlZm9yZTogYW55ID0gbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybiBmYWxzZTtcclxuICAgIHBhcmVudC5yZW1vdmVFbGVtZW50KDxJRWxlbWVudD4oPGFueT50aGlzKSk7XHJcbiAgICB2YXIgaW5kZXggPSAtMTtcclxuICAgIGlmIChIZWxwZXJzLmlzTnVtYmVyKGluc2VydEJlZm9yZSkpIHtcclxuICAgICAgaW5kZXggPSBwYXJzZUludChpbnNlcnRCZWZvcmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4ID09IC0xICYmICEhaW5zZXJ0QmVmb3JlICYmICEhaW5zZXJ0QmVmb3JlLmdldFR5cGUpIHtcclxuICAgICAgaW5kZXggPSBjb250YWluZXIuaW5kZXhPZihpbnNlcnRCZWZvcmUpO1xyXG4gICAgfVxyXG4gICAgY29udGFpbmVyLmFkZEVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpLCBpbmRleCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRQYWdlKHBhcmVudDogSVBhbmVsLCB2YWw6IElQYWdlKSB7XHJcbiAgICB2YXIgb2xkUGFnZSA9IHRoaXMuZ2V0UGFnZShwYXJlbnQpO1xyXG4gICAgaWYgKG9sZFBhZ2UgPT09IHZhbCkgcmV0dXJuO1xyXG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpKTtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdmFsLmFkZEVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpLCAtMSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICBrZXlzLnB1c2goXCJ0aXRsZVwiKTtcclxuICAgIGtleXMucHVzaChcImRlc2NyaXB0aW9uXCIpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJU3VydmV5RXJyb3JPd25lciB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5RXJyb3Ige1xyXG4gIHByaXZhdGUgbG9jVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nID0gbnVsbCxcclxuICAgIHByb3RlY3RlZCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGxcclxuICApIHt9XHJcbiAgcHVibGljIGdldCBsb2NUZXh0KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1RleHRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLmVycm9yT3duZXIsIHRydWUpO1xyXG4gICAgICB0aGlzLmxvY1RleHRWYWx1ZS50ZXh0ID0gdGhpcy5nZXRUZXh0KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0VmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICB2YXIgcmVzID0gdGhpcy50ZXh0O1xyXG4gICAgaWYgKCFyZXMpIHJlcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHQoKTtcclxuICAgIGlmICghIXRoaXMuZXJyb3JPd25lcikge1xyXG4gICAgICByZXMgPSB0aGlzLmVycm9yT3duZXIuZ2V0RXJyb3JDdXN0b21UZXh0KHJlcywgdGhpcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJiYXNlXCI7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEpzb25PYmplY3QsIEpzb25FcnJvciwgU2VyaWFsaXplciwgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBFdmVudEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge1xuICBJU3VydmV5LFxuICBJU3VydmV5RGF0YSxcbiAgSVN1cnZleUltcGwsXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUXVlc3Rpb24sXG4gIElQYW5lbCxcbiAgSUVsZW1lbnQsXG4gIElQYWdlLFxuICBJU3VydmV5RXJyb3JPd25lcixcbiAgSVN1cnZleUVsZW1lbnQsXG4gIElQcm9ncmVzc0luZm8sXG4gIElGaW5kRWxlbWVudCxcbn0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vc3VydmV5LWVsZW1lbnRcIjtcbmltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIjtcbmltcG9ydCB7IElTdXJ2ZXlUcmlnZ2VyT3duZXIsIFN1cnZleVRyaWdnZXIgfSBmcm9tIFwiLi90cmlnZ2VyXCI7XG5pbXBvcnQgeyBDYWxjdWxhdGVkVmFsdWUgfSBmcm9tIFwiLi9jYWxjdWxhdGVkVmFsdWVcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IFRleHRQcmVQcm9jZXNzb3IsIFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB9IGZyb20gXCIuL3RleHRQcmVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuaW1wb3J0IHsgZHhTdXJ2ZXlTZXJ2aWNlIH0gZnJvbSBcIi4vZHhTdXJ2ZXlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBDdXN0b21FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuL3N0eWxlc21hbmFnZXJcIjtcbmltcG9ydCB7IFN1cnZleVRpbWVyIH0gZnJvbSBcIi4vc3VydmV5dGltZXJcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHtcbiAgSHRtbENvbmRpdGlvbkl0ZW0sXG4gIFVybENvbmRpdGlvbkl0ZW0sXG4gIEV4cHJlc3Npb25JdGVtLFxufSBmcm9tIFwiLi9leHByZXNzaW9uSXRlbXNcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIsIENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldFNpemUsIGlzTW9iaWxlLCBzY3JvbGxFbGVtZW50QnlDaGlsZElkIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBJQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9ucy9hY3Rpb25cIjtcblxuLyoqXG4gKiBUaGUgYFN1cnZleWAgb2JqZWN0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXJ2ZXksIFBhZ2VzLCBRdWVzdGlvbnMsIGZsb3cgbG9naWMgYW5kIGV0Yy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleU1vZGVsIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzXG4gICAgSVN1cnZleSxcbiAgICBJU3VydmV5RGF0YSxcbiAgICBJU3VydmV5SW1wbCxcbiAgICBJU3VydmV5VHJpZ2dlck93bmVyLFxuICAgIElTdXJ2ZXlFcnJvck93bmVyLFxuICAgIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTogc3RyaW5nID1cbiAgICBcInN2LXRlbXBsYXRlLXJlbmRlcmVyXCI7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBzdHlsZXNNYW5hZ2VyOiBTdHlsZXNNYW5hZ2VyID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBwbGF0Zm9ybTogc3RyaW5nID0gXCJ1bmtub3duXCI7XG4gIHB1YmxpYyBnZXQgcGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleU1vZGVsLnBsYXRmb3JtO1xuICB9XG4gIC8qKlxuICAgKiBZb3UgY2FuIGRpc3BsYXkgYW4gYWRkaXRpb25hbCBmaWVsZCAoY29tbWVudCBmaWVsZCkgZm9yIHRoZSBtb3N0IG9mIHF1ZXN0aW9uczsgdXNlcnMgY2FuIGVudGVyIGFkZGl0aW9uYWwgY29tbWVudHMgdG8gdGhlaXIgcmVzcG9uc2UuXG4gICAqIFRoZSBjb21tZW50IGZpZWxkIGlucHV0IGlzIHNhdmVkIGFzIGAncXVlc3Rpb24gbmFtZScgKyAnY29tbWVudFByZWZpeCdgLlxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBRdWVzdGlvbi5oYXNDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2V0dGluZ3MuY29tbWVudFByZWZpeDtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbW1lbnRQcmVmaXgodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5jb21tZW50UHJlZml4ID0gdmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudFBhZ2VWYWx1ZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHByaXZhdGUgc2V0IGN1cnJlbnRQYWdlVmFsdWUodmFsOiBQYWdlTW9kZWwpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVZhbHVlXCIsIHZhbCk7XG4gIH1cblxuICBwcml2YXRlIHZhbHVlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XG4gIHByaXZhdGUgdmFyaWFibGVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcbiAgcHJpdmF0ZSBlZGl0aW5nT2JqVmFsdWU6IEJhc2U7XG5cbiAgcHJpdmF0ZSBsb2NhbGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIHByaXZhdGUgY29tcGxldGVkU3RhdGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBjb21wbGV0ZWRTdGF0ZVRleHRWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIGlzVGltZXJTdGFydGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8jcmVnaW9uIEV2ZW50IGRlY2xhcmF0aW9uc1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGVkIGFuZCB0aGUgYG9uQ29tcGxldGVgIGV2ZW50IGlzIGZpcmVkLiBZb3UgY2FuIHByZXZlbnQgdGhlIHN1cnZleSBmcm9tIGNvbXBsZXRpbmcgYnkgc2V0dGluZyBgb3B0aW9ucy5hbGxvd0NvbXBsZXRlYCB0byBgZmFsc2VgXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmFsbG93Q29tcGxldGVgIC0gU3BlY2lmaWVzIHdoZXRoZXIgYSB1c2VyIGNhbiBjb21wbGV0ZSBhIHN1cnZleS4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBzdXJ2ZXkgZnJvbSBjb21wbGV0aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqIDxici8+IGBvcHRpb25zLmlzQ29tcGxldGVPblRyaWdnZXJgIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGluZyBvbiBcImNvbXBsZXRlXCIgdHJpZ2dlci5cbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgb25Db21wbGV0aW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBhIHVzZXIgY2xpY2tzIHRoZSAnQ29tcGxldGUnIGJ1dHRvbiBhbmQgZmluaXNoZXMgYSBzdXJ2ZXkuIFVzZSB0aGlzIGV2ZW50IHRvIHNlbmQgdGhlIHN1cnZleSBkYXRhIHRvIHlvdXIgd2ViIHNlcnZlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmcodGV4dClgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBzaG93IHRoYXQgdGhlIHN1cnZleSBpcyBzYXZpbmcgc3VydmV5IGRhdGEgb24geW91ciBzZXJ2ZXIuIFRoZSBgdGV4dGAgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNob3cgYSBjdXN0b20gbWVzc2FnZSBpbnN0ZWFkIG9mIGRlZmF1bHQuXG4gICAqIDxici8+IGBvcHRpb25zLnNob3dEYXRhU2F2aW5nRXJyb3IodGV4dClgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBzaG93IHRoYXQgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nIHRoZSBkYXRhIG9uIHlvdXIgc2VydmVyLiBJZiB5b3Ugd2FudCB0byBzaG93IGEgY3VzdG9tIGVycm9yLCB1c2UgYW4gb3B0aW9uYWwgYHRleHRgIHBhcmFtZXRlci5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdTdWNjZXNzKHRleHQpYCAtIGNhbGwgdGhpcyBtZXRob2QgdG8gc2hvdyB0aGF0IHRoZSBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgb24gdGhlIHNlcnZlci5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdDbGVhcmAgLSBjYWxsIHRoaXMgbWV0aG9kIHRvIGhpZGUgdGhlIHRleHQgYWJvdXQgdGhlIHNhdmluZyBwcm9ncmVzcy5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNDb21wbGV0ZU9uVHJpZ2dlcmAgLSByZXR1cm5zIHRydWUgaWYgdGhlIHN1cnZleSBpcyBjb21wbGV0ZWQgb24gXCJjb21wbGV0ZVwiIHRyaWdnZXIuXG4gICAqICBAc2VlIGRhdGFcbiAgICogQHNlZSBjbGVhckludmlzaWJsZVZhbHVlc1xuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBzdXJ2ZXlQb3N0SWRcbiAgICovXG4gIHB1YmxpYyBvbkNvbXBsZXRlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIHN1cnZleSBpcyBnb2luZyB0byBwcmV2aWV3IG1vZGUsIHN0YXRlIGVxdWFscyB0byBgcHJldmlld2AuIEl0IGhhcHBlbnMgd2hlbiBhIHVzZXIgY2xpY2sgb24gXCJQcmV2aWV3XCIgYnV0dG9uLiBJdCBzaG93cyB3aGVuIFwic2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVwiIHByb2VwcnR5IGVxdWFscyB0byBcInNob3dBbGxRdWVzdGlvbnNcIiBvciBcInNob3dBbnN3ZXJlZFF1ZXN0aW9uc1wiLlxuICAgKiBZb3UgY2FuIHByZXZlbnQgc2hvd2luZyBpdCBieSBzZXR0aW5nIGFsbG93U2hvd1ByZXZpZXcgdG8gYGZhbHNlYC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dTaG93UHJldmlld2AgLSBTcGVjaWZpZXMgd2hldGhlciBhIHVzZXIgY2FuIHNlZSBhIHByZXZpZXcuIFNldCB0aGlzIHByb3BlcnR5IHRvIGBmYWxzZWAgdG8gcHJldmVudCBmcm9tIHNob3dpbmcgdGhlIHByZXZpZXcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgb25TaG93aW5nUHJldmlldzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgdXNlciBjbGlja3MgdGhlICdDb21wbGV0ZScgYnV0dG9uLiBUaGUgZXZlbnQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBVUkwgb3BlbmVkIGFmdGVyIGNvbXBsZXRpbmcgYSBzdXJ2ZXkuXG4gICAqIFNwZWNpZnkgdGhlIGBuYXZpZ2F0ZVRvVXJsYCBwcm9wZXJ0eSB0byBtYWtlIHN1cnZleSBuYXZpZ2F0ZSB0byBhbm90aGVyIHVybC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudXJsYCAtIFNwZWNpZmllcyBhIFVSTCBvcGVuZWQgYWZ0ZXIgY29tcGxldGluZyBhIHN1cnZleS4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIGNhbmNlbCB0aGUgbmF2aWdhdGlvbiBhbmQgc2hvdyB0aGUgY29tcGxldGVkIHN1cnZleSBwYWdlLlxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG9Vcmw6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBzdXJ2ZXkgY2hhbmdlZCBpdCdzIHN0YXRlIGZyb20gXCJzdGFydGluZ1wiIHRvIFwicnVubmluZ1wiLiBUaGUgXCJzdGFydGluZ1wiIHN0YXRlIG1lYW5zIHRoYXQgc3VydmV5IHNob3dzIHRoZSBzdGFydGVkIHBhZ2UuXG4gICAqIFRoZSBgZmlyc3RQYWdlSXNTdGFydGVkYCBwcm9wZXJ0eSBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYCwgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBhIHN0YXJ0IHBhZ2UgaW4geW91ciBzdXJ2ZXkuIEluIHRoaXMgY2FzZSwgYW4gZW5kIHVzZXIgc2hvdWxkIGNsaWNrIHRoZSBcIlN0YXJ0XCIgYnV0dG9uIHRvIHN0YXJ0IHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAqL1xuICBwdWJsaWMgb25TdGFydGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBjbGlja2luZyB0aGUgJ05leHQnIGJ1dHRvbiBpZiB0aGUgYHNlbmRSZXN1bHRPblBhZ2VOZXh0YCBpcyBzZXQgdG8gYHRydWVgLiBZb3UgY2FuIHVzZSBpdCB0byBzYXZlIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0cywgZm9yIGV4YW1wbGUsIGlmIHlvdXIgc3VydmV5IGlzIGxhcmdlIGVub3VnaC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogQHNlZSBzZW5kUmVzdWx0T25QYWdlTmV4dFxuICAgKi9cbiAgcHVibGljIG9uUGFydGlhbFNlbmQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgY3VycmVudCBwYWdlIGNoYW5nZXMgdG8gYW5vdGhlciBwYWdlLiBUeXBpY2FsbHkgaXQgaGFwcGVucyB3aGVuIGEgdXNlciBjbGljayB0aGUgJ05leHQnIG9yICdQcmV2JyBidXR0b25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9uLm9sZEN1cnJlbnRQYWdlYCAtIHRoZSBwcmV2aW91cyBjdXJyZW50L2FjdGl2ZSBwYWdlLlxuICAgKiA8YnIvPiBgb3B0aW9uLm5ld0N1cnJlbnRQYWdlYCAtIGEgbmV3IGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb24uYWxsb3dDaGFuZ2luZ2AgLSBzZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZSBjdXJyZW50IHBhZ2UgY2hhbmdpbmcuIEl0IGlzIGB0cnVlYCBieSBkZWZhdWx0LlxuICAgKiA8YnIvPiBgb3B0aW9uLmlzTmV4dFBhZ2VgIC0gY29tbW9ubHkgbWVhbnMsIHRoYXQgZW5kLXVzZXIgcHJlc3MgdGhlIG5leHQgcGFnZSBidXR0b24uIEluIGdlbmVyYWwsIGl0IG1lYW5zIHRoYXQgb3B0aW9ucy5uZXdDdXJyZW50UGFnZSBpcyB0aGUgbmV4dCBwYWdlIGFmdGVyIG9wdGlvbnMub2xkQ3VycmVudFBhZ2VcbiAgICogPGJyLz4gYG9wdGlvbi5pc1ByZXZQYWdlYCAtIGNvbW1vbmx5IG1lYW5zLCB0aGF0IGVuZC11c2VyIHByZXNzIHRoZSBwcmV2aW91cyBwYWdlIGJ1dHRvbi4gSW4gZ2VuZXJhbCwgaXQgbWVhbnMgdGhhdCBvcHRpb25zLm5ld0N1cnJlbnRQYWdlIGlzIHRoZSBwcmV2aW91cyBwYWdlIGJlZm9yZSBvcHRpb25zLm9sZEN1cnJlbnRQYWdlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZU5vXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICogQHNlZSBwcmV2UGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBvbkN1cnJlbnRQYWdlQ2hhbmdlZFxuICAgKiovXG4gIHB1YmxpYyBvbkN1cnJlbnRQYWdlQ2hhbmdpbmc6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBjdXJyZW50IHBhZ2UgaGFzIGJlZW4gY2hhbmdlZCB0byBhbm90aGVyIHBhZ2UuIFR5cGljYWxseSBpdCBoYXBwZW5zIHdoZW4gYSB1c2VyIGNsaWNrIG9uICdOZXh0JyBvciAnUHJldicgYnV0dG9ucy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbi5vbGRDdXJyZW50UGFnZWAgLSBhIHByZXZpb3VzIGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb24ubmV3Q3VycmVudFBhZ2VgIC0gYSBuZXcgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbi5pc05leHRQYWdlYCAtIGNvbW1vbmx5IG1lYW5zLCB0aGF0IGVuZC11c2VyIHByZXNzIHRoZSBuZXh0IHBhZ2UgYnV0dG9uLiBJbiBnZW5lcmFsLCBpdCBtZWFucyB0aGF0IG9wdGlvbnMubmV3Q3VycmVudFBhZ2UgaXMgdGhlIG5leHQgcGFnZSBhZnRlciBvcHRpb25zLm9sZEN1cnJlbnRQYWdlXG4gICAqIDxici8+IGBvcHRpb24uaXNQcmV2UGFnZWAgLSBjb21tb25seSBtZWFucywgdGhhdCBlbmQtdXNlciBwcmVzcyB0aGUgcHJldmlvdXMgcGFnZSBidXR0b24uIEluIGdlbmVyYWwsIGl0IG1lYW5zIHRoYXQgb3B0aW9ucy5uZXdDdXJyZW50UGFnZSBpcyB0aGUgcHJldmlvdXMgcGFnZSBiZWZvcmUgb3B0aW9ucy5vbGRDdXJyZW50UGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VOb1xuICAgKiBAc2VlIG5leHRQYWdlXG4gICAqIEBzZWUgcHJldlBhZ2VcbiAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAqIEBzZWUgb25DdXJyZW50UGFnZUNoYW5naW5nXG4gICAqL1xuICBwdWJsaWMgb25DdXJyZW50UGFnZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpIGlzIGNoYW5nZWQuIEl0IGNhbiBiZSBkb25lIHZpYSBVSSBieSBhIHVzZXIgb3IgcHJvZ3JhbW1hdGljYWxseSBvbiBjYWxsaW5nIHRoZSBgc2V0VmFsdWVgIG1ldGhvZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgdmFsdWUgbmFtZSB0aGF0IGhhcyBiZWluZyBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoaWNoIGBxdWVzdGlvbi5uYW1lYCBlcXVhbHMgdG8gdGhlIHZhbHVlIG5hbWUuIElmIHRoZXJlIGFyZSBzZXZlcmFsIHF1ZXN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyB1c2VkLiBJZiB0aGVyZSBpcyBubyBzdWNoIHF1ZXN0aW9ucywgdGhlIGBvcHRpb25zLnF1ZXN0aW9uYCBpcyBudWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5vbGRWYWx1ZWAgLSBhbiBvbGQsIHByZXZpb3VzIHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS4gWW91IGNhbiBjaGFuZ2UgaXQuXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICogQHNlZSBvblZhbHVlQ2hhbmdlZFxuICAgKi9cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2luZzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgcXVlc3Rpb24gdmFsdWUgKGkuZS4sIGFuc3dlcikgaGFzIGJlZW4gY2hhbmdlZC4gVGhlIHF1ZXN0aW9uIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGluIFVJIChieSBhIHVzZXIpIG9yIHByb2dyYW1tYXRpY2FsbHkgKG9uIGNhbGxpbmcgYHNldFZhbHVlYCBtZXRob2QpLlxuICAgKiBVc2UgdGhlIGBvbkR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWRgIGFuZCBgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkYCBldmVudHMgdG8gaGFuZGxlIGNoYW5nZXMgaW4gYSBxdWVzdGlvbiBpbiB0aGUgUGFuZWwgRHluYW1pYyBhbmQgYSBjZWxsIHF1ZXN0aW9uIGluIG1hdHJpY2VzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSB2YWx1ZSBuYW1lIHRoYXQgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiB3aGljaCBgcXVlc3Rpb24ubmFtZWAgZXF1YWxzIHRvIHRoZSB2YWx1ZSBuYW1lLiBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBxdWVzdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgdXNlZC4gSWYgdGhlcmUgaXMgbm8gc3VjaCBxdWVzdGlvbnMsIHRoZSBgb3B0aW9ucy5xdWVzdGlvbmAgaXMgYG51bGxgLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS5cbiAgICogQHNlZSBzZXRWYWx1ZVxuICAgKiBAc2VlIG9uVmFsdWVDaGFuZ2luZ1xuICAgKiBAc2VlIG9uRHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZFxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZFxuICAgKi9cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIGEgcXVlc3Rpb24gdmlzaWJpbGl0eSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoaWNoIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZpc2libGVgIC0gYSBxdWVzdGlvbiBgdmlzaWJsZWAgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHNlZSBRdWVzdGlvbi52aXNpYmlsZVxuICAgKiBAc2VlIFF1ZXN0aW9uLnZpc2liaWxlSWZcbiAgICovXG4gIHB1YmxpYyBvblZpc2libGVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2hhbmdpbmcgYSBwYWdlIHZpc2liaWxpdHkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBwYWdlIHdoaWNoIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudmlzaWJsZWAgLSBhIHBhZ2UgYHZpc2libGVgIGJvb2xlYW4gdmFsdWUuXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2liaWxlXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2liaWxlSWZcbiAgICovXG4gIHB1YmxpYyBvblBhZ2VWaXNpYmxlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNoYW5naW5nIGEgcGFuZWwgdmlzaWJpbGl0eS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBwYW5lbCB3aGljaCB2aXNpYmlsaXR5IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnZpc2libGVgIC0gYSBwYW5lbCBgdmlzaWJsZWAgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHNlZSBQYW5lbE1vZGVsLnZpc2liaWxlXG4gICAqIEBzZWUgUGFuZWxNb2RlbC52aXNpYmlsZUlmXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbFZpc2libGVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY3JlYXRpbmcgYSBuZXcgcXVlc3Rpb24uXG4gICAqIFVubGlrZSB0aGUgb25RdWVzdGlvbkFkZGVkIGV2ZW50LCB0aGlzIGV2ZW50IGNhbGxzIGZvciBhbGwgcXVlc3Rpb24gY3JlYXRlZCBpbiBzdXJ2ZXkgaW5jbHVkaW5nIGluc2lkZTogYSBwYWdlLCBwYW5lbCwgbWF0cml4IGNlbGwsIGR5bmFtaWMgcGFuZWwgYW5kIG11bHRpcGxlIHRleHQuXG4gICAqIG9yIGluc2lkZSBhIG1hdHJpeCBjZWxsIG9yIGl0IGNhbiBiZSBhIHRleHQgcXVlc3Rpb24gaW4gbXVsdGlwbGUgdGV4dCBpdGVtcyBvciBpbnNpZGUgYSBwYW5lbCBvZiBhIHBhbmVsIGR5bmFtaWMuXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdG8gc2V0IHVwIHByb3BlcnRpZXMgdG8gYSBxdWVzdGlvbiBiYXNlZCBvbiBpdCdzIHR5cGUgZm9yIGFsbCBxdWVzdGlvbnMsIHJlZ2FyZGxlc3Mgd2hlcmUgdGhleSBhcmUgbG9jYXRlZCwgb24gdGhlIHBhZ2Ugb3IgaW5zaWRlIGEgbWF0cml4IGNlbGwuXG4gICAqIFBsZWFzZSBub3RlOiBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBldmVudCBmb3IgcXVlc3Rpb25zIGxvYWRlZCBmcm9tIEpTT04gdGhlbiB5b3UgaGF2ZSB0byBjcmVhdGUgc3VydmV5IHdpdGggZW1wdHkvbnVsbCBKU09OIHBhcmFtZXRlciwgYXNzaWduIHRoZSBldmVudCBhbmQgY2FsbCBzdXJ2ZXkuZnJvbUpTT04oeW91ckpTT04pIGZ1bmN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG5ld2x5IGNyZWF0ZWQgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqIEBzZWUgb25RdWVzdGlvbkFkZGVkXG4gICAqL1xuICBwdWJsaWMgb25RdWVzdGlvbkNyZWF0ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBuZXcgcXVlc3Rpb24gaW50byBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbmV3bHkgYWRkZWQgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5kZXhgIC0gYW4gaW5kZXggb2YgdGhlIHF1ZXN0aW9uIGluIHRoZSBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRQYW5lbGAgLSBhIGNvbnRhaW5lciB3aGVyZSBhIG5ldyBxdWVzdGlvbiBpcyBsb2NhdGVkLiBJdCBjYW4gYmUgYSBwYWdlIG9yIHBhbmVsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb290UGFuZWxgIC0gdHlwaWNhbGx5LCBpdCBpcyBhIHBhZ2UuXG4gICAqIEBzZWUgUXVlc3Rpb25cbiAgICogQHNlZSBvblF1ZXN0aW9uQ3JlYXRlZFxuICAgKi9cbiAgcHVibGljIG9uUXVlc3Rpb25BZGRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gcmVtb3ZpbmcgYSBxdWVzdGlvbiBmcm9tIHN1cnZleS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSByZW1vdmVkIHF1ZXN0aW9uIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIEBzZWUgUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBvblF1ZXN0aW9uUmVtb3ZlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIHBhbmVsIGludG8gc3VydmV5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhIG5ld2x5IGFkZGVkIHBhbmVsIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHBhbmVsIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLmluZGV4YCAtIGFuIGluZGV4IG9mIHRoZSBwYW5lbCBpbiB0aGUgY29udGFpbmVyIChhIHBhZ2Ugb3IgcGFuZWwpLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRQYW5lbGAgLSBhIGNvbnRhaW5lciAoYSBwYWdlIG9yIHBhbmVsKSB3aGVyZSBhIG5ldyBwYW5lbCBpcyBsb2NhdGVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb290UGFuZWxgIC0gYSByb290IGNvbnRhaW5lciwgdHlwaWNhbGx5IGl0IGlzIGEgcGFnZS5cbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbEFkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHBhbmVsIGZyb20gc3VydmV5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhIHJlbW92ZWQgcGFuZWwgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcGFuZWwgbmFtZS5cbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbFJlbW92ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIHBhZ2UgaW50byBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBuZXdseSBhZGRlZCBgcGFuZWxgIG9iamVjdC5cbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25QYWdlQWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHZhbGlkYXRpbmcgdmFsdWUgaW4gYSBxdWVzdGlvbi4gWW91IGNhbiBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgdXNpbmcgYG9wdGlvbnMuZXJyb3JgLiBUaGUgc3VydmV5IGJsb2NrcyBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkgb3IgZ29pbmcgdG8gdGhlIG5leHQgcGFnZSB3aGVuIHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgZGlzcGxheWVkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHZhbGlkYXRlZCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIHRoZSBjdXJyZW50IHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcmAgLSBhbiBlcnJvciBzdHJpbmcuIEl0IGlzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqIEBzZWUgb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9uc1xuICAgKiBAc2VlIG9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgb25WYWxpZGF0ZVF1ZXN0aW9uOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGVycm9ycyBhcmUgYXNzaWduZWQgdG8gYSBxdWVzdGlvbi4gWW91IG1heSBhZGQvcmVtb3ZlL21vZGlmeSBlcnJvcnMgZm9yIGEgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgdmFsaWRhdGVkIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcnNgIC0gdGhlIGxpc3Qgb2YgZXJyb3JzLiBUaGUgbGlzdCBpcyBlbXB0eSBieSBkZWZhdWx0IGFuZCByZW1haW5zIGVtcHR5IGlmIGEgdmFsaWRhdGVkIHF1ZXN0aW9uIGhhcyBubyBlcnJvcnMuXG4gICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25TZXR0aW5nUXVlc3Rpb25FcnJvcnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHZhbGlkYXRlIGRhdGEgb24geW91ciBzZXJ2ZXIuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFgIC0gdGhlIHZhbHVlcyBvZiBhbGwgbm9uLWVtcHR5IHF1ZXN0aW9ucyBvbiB0aGUgY3VycmVudCBwYWdlLiBZb3UgY2FuIGdldCBhIHF1ZXN0aW9uIHZhbHVlIGFzIGBvcHRpb25zLmRhdGFbXCJteVF1ZXN0aW9uTmFtZVwiXWAuXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yc2AgLSBzZXQgeW91ciBlcnJvcnMgdG8gdGhpcyBvYmplY3QgYXM6IGBvcHRpb25zLmVycm9yc1tcIm15UXVlc3Rpb25OYW1lXCJdID0gXCJFcnJvciB0ZXh0XCI7YC4gSXQgd2lsbCBiZSBzaG93biBhcyBhIHF1ZXN0aW9uIGVycm9yLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb21wbGV0ZSgpYCAtIGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0ZWxsIHN1cnZleSB0aGF0IHlvdXIgc2VydmVyIGNhbGxiYWNrIGhhcyBiZWVuIHByb2Nlc3NlZC5cbiAgICogQHNlZSBvblZhbGlkYXRlUXVlc3Rpb25cbiAgICogQHNlZSBvblZhbGlkYXRlUGFuZWxcbiAgICovXG4gIHB1YmxpYyBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zOiBhbnkgPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gbW9kaWZ5IHRoZSBIVE1MIGJlZm9yZSByZW5kZXJpbmcsIGZvciBleGFtcGxlIEhUTUwgb24gYSBjb21wbGV0ZWQgcGFnZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbGAgLSBhbiBIVE1MIHRoYXQgeW91IG1heSBjaGFuZ2UgYmVmb3JlIHRleHQgcHJvY2Vzc2luZyBhbmQgdGhlbiByZW5kZXJpbmcuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGxvYWRpbmdIdG1sXG4gICAqIEBzZWUgUXVlc3Rpb25IdG1sTW9kZWwuaHRtbFxuICAgKi9cbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiB2YWxpZGF0aW5nIGEgcGFuZWwuIFNldCB5b3VyIGVycm9yIHRvIGBvcHRpb25zLmVycm9yYCBhbmQgc3VydmV5IHdpbGwgc2hvdyB0aGUgZXJyb3IgZm9yIHRoZSBwYW5lbCBhbmQgYmxvY2sgY29tcGxldGluZyB0aGUgc3VydmV5IG9yIGdvaW5nIHRvIHRoZSBuZXh0IHBhZ2UuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwYW5lbCBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcmAgLSBhbiBlcnJvciBzdHJpbmcuIEl0IGlzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25WYWxpZGF0ZVBhbmVsOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGUgZXZlbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGVycm9yIHRleHQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnRleHRgIC0gYW4gZXJyb3IgdGV4dC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JgIC0gYW4gaW5zdGFuY2Ugb2YgdGhlIGBTdXJ2ZXlFcnJvcmAgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBlcnJvciBuYW1lLiBUaGUgZm9sbG93aW5nIGVycm9yIG5hbWVzIGFyZSBhdmFpbGFibGU6XG4gICAqIHJlcXVpcmVkLCByZXF1aXJlb25lYW5zd2VyLCByZXF1aXJlbnVtZXJpYywgZXhjZWVkc2l6ZSwgd2VicmVxdWVzdCwgd2VicmVxdWVzdGVtcHR5LCBvdGhlcmVtcHR5LFxuICAgKiB1cGxvYWRpbmdmaWxlLCByZXF1aXJlZGluYWxscm93c2Vycm9yLCBtaW5yb3djb3VudGVycm9yLCBrZXlkdXBsaWNhdGlvbmVycm9yLCBjdXN0b21cbiAgICovXG4gIHB1YmxpYyBvbkVycm9yQ3VzdG9tVGV4dDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoZSB0aGlzIGV2ZW50IHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHN1cnZleSBmaW5pc2hlZCB2YWxpZGF0ZSBxdWVzdGlvbnMgb24gdGhlIGN1cnJlbnQgcGFnZS4gSXQgY29tbW9ubHkgaGFwcGVucyB3aGVuIGEgdXNlciB0cnkgdG8gZ28gdG8gdGhlIG5leHQgcGFnZSBvciBjb21wbGV0ZSB0aGUgc3VydmV5XG4gICAqIG9wdGlvbnMucXVlc3Rpb25zIC0gdGhlIGxpc3Qgb2YgcXVlc3Rpb25zIHRoYXQgaGF2ZSBlcnJvcnNcbiAgICogb3B0aW9ucy5lcnJvcnMgLSB0aGUgbGlzdCBvZiBlcnJvcnNcbiAgICogb3B0aW9ucy5wYWdlIC0gdGhlIHBhZ2Ugd2hlcmUgcXVlc3Rpb24ocykgYXJlIGxvY2F0ZWRcbiAgICovXG4gIHB1YmxpYyBvblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2U6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSB0aGUgSFRNTCBjb250ZW50IGJlZm9yZSByZW5kZXJpbmcsIGZvciBleGFtcGxlIGBjb21wbGV0ZUh0bWxgIG9yIGBsb2FkaW5nSHRtbGAuXG4gICAqIGBvcHRpb25zLmh0bWxgIC0gc3BlY2lmaWVzIHRoZSBtb2RpZmllZCBIVE1MIGNvbnRlbnQuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGxvYWRpbmdIdG1sXG4gICAqL1xuICBwdWJsaWMgb25Qcm9jZXNzSHRtbDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIHF1ZXN0aW9uIHRpdGxlIGluIGNvZGUuIElmIHlvdSB3YW50IHRvIHJlbW92ZSBxdWVzdGlvbiBudW1iZXJpbmcgdGhlbiBzZXQgc2hvd1F1ZXN0aW9uTnVtYmVycyB0byBcIm9mZlwiLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50aXRsZWAgLSBhIGNhbGN1bGF0ZWQgcXVlc3Rpb24gdGl0bGUsIGJhc2VkIG9uIHF1ZXN0aW9uIGB0aXRsZWAsIGBuYW1lYC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QuXG4gICAqIEBzZWUgc2hvd1F1ZXN0aW9uTnVtYmVyc1xuICAgKiBAc2VlIHJlcXVpcmVkVGV4dFxuICAgKi9cbiAgcHVibGljIG9uR2V0UXVlc3Rpb25UaXRsZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBxdWVzdGlvbiBubyBpbiBjb2RlLiBJZiB5b3Ugd2FudCB0byByZW1vdmUgcXVlc3Rpb24gbnVtYmVyaW5nIHRoZW4gc2V0IHNob3dRdWVzdGlvbk51bWJlcnMgdG8gXCJvZmZcIi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubm9gIC0gYSBjYWxjdWxhdGVkIHF1ZXN0aW9uIG5vLCBiYXNlZCBvbiBxdWVzdGlvbiBgdmlzaWJsZUluZGV4YCwgc3VydmV5IGAucXVlc3Rpb25TdGFydEluZGV4YCBwcm9wZXJ0aWVzLiBZb3UgY2FuIGNoYW5nZSBpdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QuXG4gICAqIEBzZWUgc2hvd1F1ZXN0aW9uTnVtYmVyc1xuICAgKiBAc2VlIHF1ZXN0aW9uU3RhcnRJbmRleFxuICAgKi9cbiAgcHVibGljIG9uR2V0UXVlc3Rpb25ObzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIHByb2dyZXNzIHRleHQgaW4gY29kZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGV4dGAgLSBhIHByb2dyZXNzIHRleHQsIHRoYXQgU3VydmV5SlMgd2lsbCByZW5kZXIgaW4gcHJvZ3Jlc3MgYmFyLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykuIFdlIGRvIG5vdCBjb3VudCBodG1sIG9yIGV4cHJlc3Npb24gcXVlc3Rpb25zXG4gICAqIDxici8+IGBvcHRpb25zLmFuc3dlcmVkUXVlc3Rpb25Db3VudGAgLSBhIG51bWJlciBvZiBxdWVzdGlvbnMgdGhhdCBoYXZlIGlucHV0KHMpIGFuZCBhbiB1c2VyIGhhcyBhbnN3ZXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucmVxdWlyZWRRdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHJlcXVpcmVkIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykuIFdlIGRvIG5vdCBjb3VudCBodG1sIG9yIGV4cHJlc3Npb24gcXVlc3Rpb25zXG4gICAqIDxici8+IGBvcHRpb25zLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHJlcXVpcmVkIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykgYW5kIGFuIHVzZXIgaGFzIGFuc3dlcmVkLlxuICAgKiAgQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBvblByb2dyZXNzVGV4dDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBwcm9jZXNzIHRoZSBtYXJrZG93biB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFN1cnZleUpTIGVsZW1lbnQgKGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlLCBvciBzdXJ2ZXkpIHdoZXJlIHRoZSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwcm9wZXJ0eSBuYW1lIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIGEgdGV4dCB0aGF0IGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sYCAtIGFuIEhUTUwgY29udGVudC4gSXQgaXMgYG51bGxgIGJ5IGRlZmF1bHQuIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEhUTUwgY29udGVudCByZW5kZXJlZCBpbnN0ZWFkIG9mIGBvcHRpb25zLnRleHRgLlxuICAgKi9cbiAgcHVibGljIG9uVGV4dE1hcmtkb3duOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHNwZWNpdHkgcmVuZGVyIGNvbXBvbmVudCBuYW1lIHVzZWQgZm9yIHRleHQgcmVuZGVyaW5nLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFN1cnZleUpTIGVsZW1lbnQgKGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlLCBvciBzdXJ2ZXkpIHdoZXJlIHRoZSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwcm9wZXJ0eSBuYW1lIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZW5kZXJBc2AgLSBhIGNvbXBvbmVudCBuYW1lIHVzZWQgZm9yIHRleHQgcmVuZGVyaW5nLlxuICAgKi9cbiAgcHVibGljIG9uVGV4dFJlbmRlckFzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBmaXJlcyB3aGVuIGl0IGdldHMgcmVzcG9uc2UgZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2Ugb24gc2F2aW5nIHN1cnZleSByZXN1bHRzLiBVc2UgaXQgdG8gZmluZCBvdXQgaWYgdGhlIHJlc3VsdHMgaGF2ZSBiZWVuIHNhdmVkIHN1Y2Nlc3NmdWxseS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc3VjY2Vzc2AgLSBpdCBpcyBgdHJ1ZWAgaWYgdGhlIHJlc3VsdHMgaGFzIGJlZW4gc2VudCB0byB0aGUgc2VydmljZSBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3BvbnNlYCAtIGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBvblNlbmRSZXN1bHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIGl0IHRvIGdldCByZXN1bHRzIGFmdGVyIGNhbGxpbmcgdGhlIGBnZXRSZXN1bHRgIG1ldGhvZC4gSXQgcmV0dXJucyBhIHNpbXBsZSBhbmFseXRpY3MgZnJvbSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc3VjY2Vzc2AgLSBpdCBpcyBgdHJ1ZWAgaWYgdGhlIHJlc3VsdHMgd2VyZSBnb3QgZnJvbSB0aGUgc2VydmljZSBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFgIC0gdGhlIG9iamVjdCBge0Fuc3dlcnNDb3VudCwgUXVlc3Rpb25SZXN1bHQgOiB7fSB9YC4gYEFuc3dlcnNDb3VudGAgaXMgdGhlIG51bWJlciBvZiBwb3N0ZWQgc3VydmV5IHJlc3VsdHMuIGBRdWVzdGlvblJlc3VsdGAgaXMgYW4gb2JqZWN0IHdpdGggYWxsIHBvc3NpYmxlIHVuaXF1ZSBhbnN3ZXJzIHRvIHRoZSBxdWVzdGlvbiBhbmQgbnVtYmVyIG9mIHRoZXNlIGFuc3dlcnMuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFMaXN0YCAtIGFuIGFycmF5IG9mIG9iamVjdHMgYHtuYW1lLCB2YWx1ZX1gLCB3aGVyZSBgbmFtZWAgaXMgYSB1bmlxdWUgdmFsdWUvYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiBhbmQgYHZhbHVlYCBpcyBhIG51bWJlci9jb3VudCBvZiBzdWNoIGFuc3dlcnMuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3BvbnNlYCAtIHRoZSBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAqIEBzZWUgZ2V0UmVzdWx0XG4gICAqL1xuICBwdWJsaWMgb25HZXRSZXN1bHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHVwbG9hZGluZyB0aGUgZmlsZSBpbiBRdWVzdGlvbkZpbGUgd2hlbiBgc3RvcmVEYXRhQXNUZXh0YCBpcyBzZXQgdG8gYGZhbHNlYC4gVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSB1cGxvYWRlZCBmaWxlIG5hbWUgb3IgdG8gcHJldmVudCBhIHBhcnRpY3VsYXIgZmlsZSBmcm9tIGJlaW5nIHVwbG9hZGVkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgZmlsZSBxdWVzdGlvbiBpbnN0YW5jZS5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZmlsZXNgIC0gdGhlIEphdmFzY3JpcHQgRmlsZSBvYmplY3RzIGFycmF5IHRvIHVwbG9hZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2FsbGJhY2tgIC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIGZpbGUgdXBsb2FkIHN0YXR1cyBhbmQgdGhlIHVwZGxvYWRlZCBmaWxlIGNvbnRlbnQuXG4gICAqIEBzZWUgdXBsb2FkRmlsZXNcbiAgICogQHNlZSBRdWVzdGlvbkZpbGVNb2RlbC5zdG9yZURhdGFBc1RleHRcbiAgICogQHNlZSBvbkRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uQ2xlYXJGaWxlc1xuICAgKiBAc2VlIFtWaWV3IEV4YW1wbGVzXShodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPXNpdGUlM0FodHRwcyUzQSUyRiUyRnN1cnZleWpzLmlvJTJGRXhhbXBsZXMlMkYrJTIyb25VcGxvYWRGaWxlcyUyMilcbiAgICovXG4gIHB1YmxpYyBvblVwbG9hZEZpbGVzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBkb3dubG9hZGluZyBhIGZpbGUgaW4gUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byBwYXNzIHRoZSBmaWxlIHRvIGEgcHJldmlldy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29udGVudGAgLSB0aGUgZmlsZSBjb250ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5maWxlVmFsdWVgIC0gc2luZ2xlIGZpbGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmaWxlIGRvd25sb2FkaW5nIHN0YXR1cyBhbmQgdGhlIGRvd25sb2FkZWQgZmlsZSBjb250ZW50LlxuICAgKiBAc2VlIGRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uQ2xlYXJGaWxlc1xuICAgKiBAc2VlIG9uVXBsb2FkRmlsZXNcbiAgICogQHNlZSBbVmlldyBFeGFtcGxlc10oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1zaXRlJTNBaHR0cHMlM0ElMkYlMkZzdXJ2ZXlqcy5pbyUyRkV4YW1wbGVzJTJGKyUyMm9uRG93bmxvYWRGaWxlJTIyKVxuICAgKi9cbiAgcHVibGljIG9uRG93bmxvYWRGaWxlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgb24gY2xlYXJpbmcgdGhlIHZhbHVlIGluIGEgUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byByZW1vdmUgZmlsZXMgc3RvcmVkIG9uIHlvdXIgc2VydmVyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgcXVlc3Rpb25gIC0gdGhlIHF1ZXN0aW9uIGluc3RhbmNlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmZpbGVOYW1lYCAtIGEgcmVtb3ZlZCBmaWxlJ3MgbmFtZSwgc2V0IGl0IHRvIGBudWxsYCB0byBjbGVhciBhbGwgZmlsZXMuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBvcGVyYXRpb24gc3RhdHVzLlxuICAgKiBAc2VlIGNsZWFyRmlsZXNcbiAgICogQHNlZSBvbkRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uVXBsb2FkRmlsZXNcbiAgICogQHNlZSBbVmlldyBFeGFtcGxlc10oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1zaXRlJTNBaHR0cHMlM0ElMkYlMkZzdXJ2ZXlqcy5pbyUyRkV4YW1wbGVzJTJGKyUyMm9uQ2xlYXJGaWxlcyUyMilcbiAgICovXG4gIHB1YmxpYyBvbkNsZWFyRmlsZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGNob2ljZXMgZm9yIHJhZGlvZ3JvdXAsIGNoZWNrYm94LCBhbmQgZHJvcGRvd24gaGFzIGJlZW4gbG9hZGVkIGZyb20gYSBSRVNUZnVsIHNlcnZpY2UgYW5kIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHF1ZXN0aW9uLlxuICAgKiBZb3UgbWF5IGNoYW5nZSB0aGUgY2hvaWNlcywgYmVmb3JlIHRoZXkgYXJlIGFzc2lnbmVkIG9yIGRpc2FibGUvZW5hYmxlZCBtYWtlIHZpc2libGUvaW52aXNpYmxlIHF1ZXN0aW9uLCBiYXNlZCBvbiBsb2FkZWQgcmVzdWx0cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYHF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbiB3aGVyZSBsb2FkZWQgY2hvaWNlcyBhcmUgZ29pbmcgdG8gYmUgYXNzaWduZWQuXG4gICAqIDxici8+IGBjaG9pY2VzYCAtIHRoZSBsb2FkZWQgY2hvaWNlcy4gWW91IGNhbiBjaGFuZ2UgdGhlIGxvYWRlZCBjaG9pY2VzIHRvIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlcnZlclJlc3VsdGAgLSBhIHJlc3VsdCB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlciBhcyBpdCBpcy5cbiAgICovXG4gIHB1YmxpYyBvbkxvYWRDaG9pY2VzRnJvbVNlcnZlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHN1cnZleSBpcyBsb2FkZWQgZnJvbSBhcGkuc3VydmV5anMuaW8gc2VydmljZS5cbiAgICogWW91IGNhbiB1c2UgdGhpcyBldmVudCB0byBwZXJmb3JtIG1hbmlwdWxhdGlvbiB3aXRoIHRoZSBzdXJ2ZXkgbW9kZWwgYWZ0ZXIgaXQgd2FzIGxvYWRlZCBmcm9tIHRoZSB3ZWIgc2VydmljZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogQHNlZSBzdXJ2ZXlJZFxuICAgKiBAc2VlIGxvYWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgKi9cbiAgcHVibGljIG9uTG9hZGVkU3VydmV5RnJvbVNlcnZpY2U6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBwcm9jZXNzaW5nIHRoZSB0ZXh0IHdoZW4gaXQgZmluZHMgYSB0ZXh0IGluIGJyYWNrZXRzOiBge3NvbWV2YWx1ZX1gLiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSB2YWx1ZSBvZiBzdXJ2ZXkgcXVlc3Rpb24gdmFsdWVzIGFuZCB2YXJpYWJsZXMuXG4gICAqIEZvciBleGFtcGxlLCB5b3UgbWF5IHVzZSB0aGUgdGV4dCBwcm9jZXNzaW5nIGluIGxvYWRpbmcgY2hvaWNlcyBmcm9tIHRoZSB3ZWIuIElmIHlvdXIgYGNob2ljZXNCeVVybC51cmxgIGVxdWFscyB0byBcIlVybFRvU2VydmljZVRvR2V0QWxsQ2l0aWVzL3tjb3VudHJ5fS97c3RhdGV9XCIsXG4gICAqIHlvdSBtYXkgc2V0IG9uIHRoaXMgZXZlbnQgYG9wdGlvbnMudmFsdWVgIHRvIFwiYWxsXCIgb3IgZW1wdHkgc3RyaW5nIHdoZW4gdGhlIFwic3RhdGVcIiB2YWx1ZS9xdWVzdGlvbiBpcyBub24gc2VsZWN0ZWQgYnkgYSB1c2VyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzaW5nIHZhbHVlLCBmb3IgZXhhbXBsZSwgXCJzdGF0ZVwiIGluIG91ciBleGFtcGxlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgdmFsdWUgb2YgdGhlIHByb2Nlc3NpbmcgdGV4dC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNFeGlzdHNgIC0gYSBib29sZWFuIHZhbHVlLiBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgdmFsdWUgYW5kIHNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSBkb24ndC5cbiAgICovXG4gIHB1YmxpYyBvblByb2Nlc3NUZXh0VmFsdWU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcXVlc3Rpb24uIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBxdWVzdGlvbiBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3Jvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcImJ1dHRvblwifWAuIFlvdSBjYW4gY2hhbmdlIHRoZW0gdG8geW91ciBvd24gQ1NTIGNsYXNzZXMuXG4gICAqL1xuICBwdWJsaWMgb25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcGFuZWwuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYW5lbCBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBwYW5lbCBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFuZWxDc3NDbGFzc2VzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbmRlcmluZyBhIHBhZ2UuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWdlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgcGFnZSBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFnZUNzc0NsYXNzZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBzdXJ2ZXkgaXMgcmVuZGVyZWQgaW4gRE9NLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhIHJvb3QgSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBzdXJ2ZXkgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJTdXJ2ZXk6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhZ2UgaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgc3VydmV5IGhlYWRlciBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlckhlYWRlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcGFnZSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIHBhZ2Ugb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuIFR5cGljYWxseSB0aGUgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYWdlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFnZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcXVlc3Rpb24gaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgcXVlc3Rpb24gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJRdWVzdGlvbjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgbm9uLWNvbXBvc2l0ZSBxdWVzdGlvbiAodGV4dCwgY29tbWVudCwgZHJvcGRvd24sIHJhZGlvZ3JvdXAsIGNoZWNrYm94KSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogVGhpcyBldmVudCBpcyBub3QgZmlyZWQgZm9yIG1hdHJpY2VzLCBwYW5lbHMsIG11bHRpcGxlIHRleHQgYW5kIGltYWdlIHBpY2tlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBxdWVzdGlvbiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhbmVsIGlzIHJlbmRlcmVkIGluIERPTS4gVXNlIGl0IHRvIG1vZGlmeSBIVE1MIGVsZW1lbnRzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcGFuZWwgb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWRcbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYW5lbCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFuZWw6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBuZXcgcm93IGluIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSBuZXcgYWRkZWQgcm93LlxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwudmlzaWJsZVJvd3NcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeFJvd0FkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGFkZGluZyBhIG5ldyByb3cgaW4gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNhbkFkZFJvd2AgLSBzcGVjaWZpZXMgd2hldGhlciBhIG5ldyByb3cgY2FuIGJlIGFkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC52aXNpYmxlUm93c1xuICAgKi9cbiAgcHVibGljIG9uTWF0cml4QmVmb3JlUm93QWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVtb3ZpbmcgYSByb3cgZnJvbSBNYXRyaXggRHluYW1pYyBxdWVzdGlvbi4gWW91IGNhbiBkaXNhYmxlIHJlbW92aW5nIGFuZCBjbGVhciB0aGUgZGF0YSBpbnN0ZWFkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dJbmRleGAgLSBhIHJvdyBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIGEgcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dgIC0gYSBib29sZWFuIHByb3BlcnR5LiBTZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZSByb3cgcmVtb3ZpbmcuXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBvbk1hdHJpeFJvd1JlbW92ZWRcbiAgICogQHNlZSBvbk1hdHJpeEFsbG93UmVtb3ZlUm93XG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhSb3dSZW1vdmluZzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHJlbW92aW5nIGEgcm93IGZyb20gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb25cbiAgICogPGJyLz4gYG9wdGlvbnMucm93SW5kZXhgIC0gYSByZW1vdmVkIHJvdyBpbmRleFxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSByZW1vdmVkIHJvdyBvYmplY3RcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnZpc2libGVSb3dzXG4gICAqIEBzZWUgb25NYXRyaXhSb3dSZW1vdmluZ1xuICAgKiBAc2VlIG9uTWF0cml4QWxsb3dSZW1vdmVSb3dcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeFJvd1JlbW92ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIFwiUmVtb3ZlXCIgYnV0dG9uIGZvciByZW1vdmluZyBhIHJvdyBmcm9tIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dJbmRleGAgLSBhIHJvdyBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIGEgcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dgIC0gYSBib29sZWFuIHByb3BlcnR5LiBTZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZSByb3cgcmVtb3ZpbmcuXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBvbk1hdHJpeFJvd1JlbW92aW5nXG4gICAqIEBzZWUgb25NYXRyaXhSb3dSZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhBbGxvd1JlbW92ZVJvdzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGZvciBldmVyeSBjZWxsIGNyZWF0ZWQgaW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNlbGxgIC0gdGhlIG1hdHJpeCBjZWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsUXVlc3Rpb25gIC0gdGhlIHF1ZXN0aW9uL2VkaXRvciBpbiB0aGUgY2VsbC4gWW91IG1heSBjdXN0b21pemUgaXQsIGNoYW5nZSBpdCdzIHByb3BlcnRpZXMsIGxpa2UgY2hvaWNlcyBvciB2aXNpYmxlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dWYWx1ZWAgLSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgcm93LiBUbyBhY2Nlc3MgYSBwYXJ0aWN1bGFyIGNvbHVtbidzIHZhbHVlIHdpdGhpbiB0aGUgY3VycmVudCByb3csIHVzZTogYG9wdGlvbnMucm93VmFsdWVbXCJjb2x1bW5WYWx1ZVwiXWAuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbmAgLSB0aGUgbWF0cml4IGNvbHVtbiBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbk5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsQ3JlYXRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGZvciBldmVyeSBjZWxsIGFmdGVyIGlzIGhhcyBiZWVuIHJlbmRlcmVkIGluIERPTS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2VsbGAgLSB0aGUgbWF0cml4IGNlbGwuXG4gICAqIDxici8+IGBvcHRpb25zLmNlbGxRdWVzdGlvbmAgLSB0aGUgcXVlc3Rpb24vZWRpdG9yIGluIHRoZSBjZWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhbiBIVE1MIGVsZW1lbnQgYm91bmQgdG8gdGhlIGBjZWxsUXVlc3Rpb25gIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29sdW1uYCAtIHRoZSBtYXRyaXggY29sdW1uIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogQHNlZSBvbk1hdHJpeENlbGxDcmVhdGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeEFmdGVyQ2VsbFJlbmRlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gY2VsbCB2YWx1ZSBpcyBjaGFuZ2VkIGluIE1hdHJpeCBEeW5hbWljIGFuZCBNYXRyaXggRHJvcGRvd24gcXVlc3Rpb25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5OYW1lYCAtIHRoZSBtYXRyaXggY29sdW1uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gdGhlIG1hdHJpeCByb3cgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5nZXRDZWxsUXVlc3Rpb24oY29sdW1uTmFtZSlgIC0gdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY2VsbCBxdWVzdGlvbiBieSBjb2x1bW4gbmFtZS5cbiAgICogQHNlZSBvbk1hdHJpeENlbGxWYWx1ZUNoYW5naW5nXG4gICAqIEBzZWUgb25NYXRyaXhCZWZvcmVSb3dBZGRlZFxuICAgKiBAc2VlIG9uTWF0cml4Um93QWRkZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNoYW5naW5nIGNlbGwgdmFsdWUgaW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMuIFlvdSBtYXkgY2hhbmdlIHRoZSBgb3B0aW9ucy52YWx1ZWAgcHJvcGVydHkgdG8gY2hhbmdlIGEgY2VsbCB2YWx1ZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29sdW1uTmFtZWAgLSB0aGUgbWF0cml4IGNvbHVtbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMub2xkVmFsdWVgIC0gdGhlIG9sZCB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZ2V0Q2VsbFF1ZXN0aW9uKGNvbHVtbk5hbWUpYCAtIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjZWxsIHF1ZXN0aW9uIGJ5IGNvbHVtbiBuYW1lLlxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZFxuICAgKiBAc2VlIG9uTWF0cml4QmVmb3JlUm93QWRkZWRcbiAgICogQHNlZSBvbk1hdHJpeFJvd0FkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeENlbGxWYWx1ZUNoYW5naW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiBNYXRyaXggRHluYW1pYyBhbmQgTWF0cml4IERyb3Bkb3duIHF1ZXN0aW9ucyB2YWxpZGF0ZSB0aGUgY2VsbCB2YWx1ZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JgIC0gYW4gZXJyb3Igc3RyaW5nLiBJdCBpcyBlbXB0eSBieSBkZWZhdWx0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5OYW1lYCAtIHRoZSBtYXRyaXggY29sdW1uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgY2VsbCB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZ2V0Q2VsbFF1ZXN0aW9uKGNvbHVtbk5hbWUpYCAtIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNlbGwgcXVlc3Rpb24gYnkgY29sdW1uIG5hbWUuXG4gICAqIEBzZWUgb25NYXRyaXhCZWZvcmVSb3dBZGRlZFxuICAgKiBAc2VlIG9uTWF0cml4Um93QWRkZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Q2VsbFZhbGlkYXRlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gYWRkaW5nIGEgbmV3IHBhbmVsIGluIFBhbmVsIER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcGFuZWwgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGFuIGFkZGVkIHBhbmVsLlxuICAgKiBAc2VlIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnBhbmVsc1xuICAgKi9cbiAgcHVibGljIG9uRHluYW1pY1BhbmVsQWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHBhbmVsIGZyb20gUGFuZWwgRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBwYW5lbCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxJbmRleGAgLSBhIHJlbW92ZWQgcGFuZWwgaW5kZXguXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcmVtb3ZlZCBwYW5lbC5cbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wYW5lbHNcbiAgICovXG4gIHB1YmxpYyBvbkR5bmFtaWNQYW5lbFJlbW92ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBldmVyeSBzZWNvbmQgaWYgdGhlIG1ldGhvZCBgc3RhcnRUaW1lcmAgaGFzIGJlZW4gY2FsbGVkLlxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSB0aW1lU3BlbnRcbiAgICogQHNlZSBQYWdlLnRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIG9uVGltZXI6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBkaXNwbGF5aW5nIGEgbmV3IGluZm9ybWF0aW9uIGluIHRoZSBUaW1lciBQYW5lbC4gVXNlIGl0IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIHRoZSB0aW1lciBwYW5lbCBpbmZvIHRleHQuXG4gICAqL1xuICBwdWJsaWMgb25UaW1lclBhbmVsSW5mb1RleHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIGl0ZW0gdmFsdWUgaXMgY2hhbmdlZCBpbiBQYW5lbCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgcGFuZWwgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIHRoZSBkeW5hbWljIHBhbmVsIGl0ZW0uXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIGl0ZW0gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLml0ZW1JbmRleGAgLSB0aGUgcGFuZWwgaXRlbSBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXRlbVZhbHVlYCAtIHRoZSBwYW5lbCBpdGVtIG9iamVjdC5cbiAgICogQHNlZSBvbkR5bmFtaWNQYW5lbEFkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uRHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gZGVmaW5lLCB3aGV0aGVyIGFuIGFuc3dlciB0byBhIHF1ZXN0aW9uIGlzIGNvcnJlY3Qgb3Igbm90LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIG9uIHdoaWNoIHlvdSBoYXZlIHRvIGRlY2lkZSBpZiB0aGUgYW5zd2VyIGlzIGNvcnJlY3Qgb3Igbm90LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZXN1bHRgIC0gcmV0dXJucyBgdHJ1ZWAsIGlmIGFuIGFuc3dlciBpcyBjb3JyZWN0LCBvciBgZmFsc2VgLCBpZiB0aGUgYW5zd2VyIGlzIG5vdCBjb3JyZWN0LiBVc2UgcXVlc3Rpb25zJyBgdmFsdWVgIGFuZCBgY29ycmVjdEFuc3dlcmAgcHJvcGVydGllcyB0byByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNvcnJlY3RBbnN3ZXJzYCAtIHlvdSBtYXkgY2hhbmdlIHRoZSBkZWZhdWx0IG51bWJlciBvZiBjb3JyZWN0IG9yIGluY29ycmVjdCBhbnN3ZXJzIGluIHRoZSBxdWVzdGlvbiwgZm9yIGV4YW1wbGUgZm9yIG1hdHJpeCwgd2hlcmUgZWFjaCByb3cgaXMgYSBxdWl6IHF1ZXN0aW9uLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnZhbHVlXG4gICAqIEBzZWUgUXVlc3Rpb24uY29ycmVjdEFuc3dlclxuICAgKi9cbiAgcHVibGljIG9uSXNBbnN3ZXJDb3JyZWN0OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjb250cm9sIGRyYWcmZHJvcCBvcGVyYXRpb25zIGR1cmluZyBkZXNpZ24gbW9kZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dgIC0gc2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnZ2luZy5cbiAgICogPGJyLz4gYG9wdGlvbnMudGFyZ2V0YCAtIGEgdGFyZ2V0IGVsZW1lbnQgdGhhdCBpcyBkcmFnZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5zb3VyY2VgIC0gYSBzb3VyY2UgZWxlbWVudC4gSXQgY2FuIGJlIGBudWxsYCwgaWYgaXQgaXMgYSBuZXcgZWxlbWVudCwgZHJhZ2dpbmcgZnJvbSB0b29sYm94LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRgIC0gYSBwYWdlIG9yIHBhbmVsIHdoZXJlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pbnNlcnRCZWZvcmVgIC0gYW4gZWxlbWVudCBiZWZvcmUgdGhlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLiBJdCBjYW4gYmUgYG51bGxgIGlmIHBhcmVudCBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpIGlzIGVtcHR5IG9yIGRyYWdnaW5nIGFuIGVsZW1lbnQgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudCBpbiBhIGNvbnRhaW5lci5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5zZXJ0QWZ0ZXJgIC0gYW4gZWxlbWVudCBhZnRlciB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgZHJhZ2dpbmcuIEl0IGNhbiBiZSBgbnVsbGAgaWYgcGFyZW50IGNvbnRhaW5lciAocGFnZSBvciBwYW5lbCkgaXMgZW1wdHkgb3IgZHJhZ2dpbmcgZWxlbWVudCB0byB0aGUgZmlyc3QgcG9zaXRpb24gd2l0aGluIHRoZSBwYXJlbnQgY29udGFpbmVyLlxuICAgKiBAc2VlIHNldERlc2lnbk1vZGVcbiAgICogQHNlZSBpc0Rlc2lnbk1vZGVcbiAgICovXG4gIHB1YmxpYyBvbkRyYWdEcm9wQWxsb3c6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY29udHJvbCBzY3JvbGxpbmcgZWxlbWVudCB0byB0b3AuIFlvdSBjYW4gY2FuY2VsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJ5IHNldHRpbmcgb3B0aW9ucy5jYW5jZWwgcHJvcGVydHkgdG8gdHJ1ZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZWxlbWVudGAgLSBhbiBlbGVtZW50IHRoYXQgaXMgZ29pbmcgdG8gYmUgc2Nyb2xsZWQgb24gdG9wLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgc2Nyb2xsZWQgb24gdG9wLiBJdCBjYW4gYmUgbnVsbCBpZiBvcHRpb25zLnBhZ2UgaXMgbm90IG51bGwuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBwYWdlIHRoYXQgaXMgZ29pbmcgdG8gYmUgc2Nyb2xsZWQgb24gdG9wLiBJdCBjYW4gYmUgbnVsbCBpZiBvcHRpb25zLnF1ZXN0aW9uIGlzIG5vdCBudWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50SWRgIC0gdGhlIHVuaXF1ZSBlbGVtZW50IERPTSBJZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2FuY2VsYCAtIHNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gY2FuY2VsIHRoZSBkZWZhdWx0IHNjcm9sbGluZy5cbiAgICovXG4gIHB1YmxpYyBvblNjcm9sbGluZ0VsZW1lbnRUb1RvcDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuXG4gIHB1YmxpYyBvbkxvY2FsZUNoYW5nZWRFdmVudDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjcmVhdGUvY3VzdG9taXplIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIGEgcXVlc3Rpb24ncyB0aXRsZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSBBIFtTdXJ2ZXldKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPVN1cnZleU1vZGVsKSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIEEgW1F1ZXN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1RdWVzdGlvbikgb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnRpdGxlQWN0aW9uc2AgLSBBIGxpc3Qgb2YgYWN0aW9ucyAoW0lBY3Rpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb24pIG9iamVjdHMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvY2Vzc2VkIHF1ZXN0aW9uLlxuICAgKiBAc2VlIElBY3Rpb25cbiAgICogQHNlZSBRdWVzdGlvblxuICAgKi9cbiAgcHVibGljIG9uR2V0UXVlc3Rpb25UaXRsZUFjdGlvbnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNyZWF0ZS9jdXN0b21pemUgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBwYW5lbCdzIHRpdGxlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIEEgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gQSBwYW5lbCAoW1BhbmVsTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXBhbmVsbW9kZWwpIG9iamVjdCkgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGl0bGVBY3Rpb25zYCAtIEEgbGlzdCBvZiBhY3Rpb25zIChbSUFjdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9SUFjdGlvbikgb2JqZWN0cykgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzZWQgcGFuZWwuXG4gICAqIEBzZWUgSUFjdGlvblxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbkdldFBhbmVsVGl0bGVBY3Rpb25zOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjcmVhdGUvY3VzdG9taXplIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIGEgcGFnZSdzIHRpdGxlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIEEgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBBIHBhZ2UgKFtQYWdlTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXBhZ2Vtb2RlbCkgb2JqZWN0KSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50aXRsZUFjdGlvbnNgIC0gQSBsaXN0IG9mIGFjdGlvbnMgKFtJQWN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1JQWN0aW9uKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBwYWdlLlxuICAgKiBAc2VlIElBY3Rpb25cbiAgICogQHNlZSBQYWdlTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbkdldFBhZ2VUaXRsZUFjdGlvbnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNyZWF0ZS9jdXN0b21pemUgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBtYXRyaXggcXVlc3Rpb24ncyByb3cuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBBIG1hdHJpeCBxdWVzdGlvbiAoW1F1ZXN0aW9uTWF0cml4QmFzZU1vZGVsXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbm1hdHJpeGJhc2Vtb2RlbCkgb2JqZWN0KSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gQSBtYXRyaXggcm93IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmFjdGlvbnNgIC0gQSBsaXN0IG9mIGFjdGlvbnMgKFtJQWN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1JQWN0aW9uKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBtYXRyaXggcXVlc3Rpb24gYW5kIHJvdy5cbiAgICogQHNlZSBJQWN0aW9uXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICAgKi9cbiAgcHVibGljIG9uR2V0TWF0cml4Um93QWN0aW9uczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBzdXJ2ZXkgZWxlbWVudCBjb250ZW50IHdhcyBjb2xsYXBzZWQgb3IgZXhwYW5kZWQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmVsZW1lbnRgIC0gU3BlY2lmaWVzIHdoaWNoIHN1cnZleSBlbGVtZW50IGNvbnRlbnQgd2FzIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICogQHNlZSBvbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWRcbiAgICovXG4gIHB1YmxpYyBvbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQ6IEV2ZW50QmFzZTxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBleHByZXNzaW9uIHF1ZXN0aW9uIGNvbnZlcnQgaXQncyB2YWx1ZSBpbnRvIGRpc3BsYXkgdmFsdWUgZm9yIHJlbmRlcmluZy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gVGhlIGV4cHJlc3Npb24gcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIFRoZSBxdWVzdGlvbiB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZGlzcGxheVZhbHVlYCAtIHRoZSBkaXNwbGF5IHZhbHVlIHRoYXQgeW91IGNhbiBjaGFuZ2UgYmVmb3JlIHJlbmRlcmluZy5cbiAgICovXG4gIHB1YmxpYyBvbkdldEV4cHJlc3Npb25EaXNwbGF5VmFsdWU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcblxuICAvLyNlbmRyZWdpb25cblxuICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBTdXJ2ZXlNb2RlbC5zdHlsZXNNYW5hZ2VyID0gbmV3IFN0eWxlc01hbmFnZXIoKTtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibG9nb1wiLCB0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEJlZm9yZUh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxvYWRpbmdIdG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFnZU5leHRUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInByZXZpZXdUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJlZGl0VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcbiAgICAgIFwicGFnZXNcIixcbiAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZG9PblBhZ2VBZGRlZCh2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kb09uUGFnZVJlbW92ZWQodmFsdWUpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInRyaWdnZXJzXCIsICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICB2YWx1ZS5zZXRPd25lcih0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiY2FsY3VsYXRlZFZhbHVlc1wiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUuc2V0T3duZXIodGhpcyk7XG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIiwgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMub25GaXJzdFBhZ2VJc1N0YXJ0ZWRDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIm1vZGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInByb2dyZXNzQmFyVHlwZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiLCBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMub25HZXRRdWVzdGlvbk5vLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgIH07XG4gICAgdGhpcy5vblByb2dyZXNzVGV4dC5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH07XG4gICAgdGhpcy5vblRleHRNYXJrZG93bi5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uQmVmb3JlQ3JlYXRpbmcoKTtcbiAgICBpZiAoanNvbk9iaikge1xuICAgICAgaWYgKHR5cGVvZiBqc29uT2JqID09PSBcInN0cmluZ1wiIHx8IGpzb25PYmogaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAganNvbk9iaiA9IEpTT04ucGFyc2UoanNvbk9iaiBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKGpzb25PYmogJiYganNvbk9iai5jbGllbnRJZCkge1xuICAgICAgICB0aGlzLmNsaWVudElkID0ganNvbk9iai5jbGllbnRJZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJvbUpTT04oanNvbk9iaik7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXlJZCkge1xuICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlGcm9tU2VydmljZSh0aGlzLnN1cnZleUlkLCB0aGlzLmNsaWVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZXJyb3JzIG9uIGxvYWRpbmcgc3VydmV5IEpTT04uIElmIHRoZSBsaXN0IGlzIGVtcHR5IGFmdGVyIGxvYWRpbmcgYSBKU09OLCB0aGVuIHRoZSBKU09OIGlzIGNvcnJlY3QgYW5kIGhhcyBubyBlcnJvcnMuXG4gICAqIEBzZWUgSnNvbkVycm9yXG4gICAqL1xuICBwdWJsaWMganNvbkVycm9yczogQXJyYXk8SnNvbkVycm9yPiA9IG51bGw7XG5cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzdXJ2ZXlcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIpIHtcbiAgICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBwYWdlcyBpbiB0aGUgc3VydmV5LCBpbmNsdWRpbmcgaW52aXNpYmxlIHBhZ2VzLlxuICAgKiBAc2VlIFBhZ2VNb2RlbFxuICAgKiBAc2VlIHZpc2libGVQYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlcygpOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFnZXNcIik7XG4gIH1cbiAgcHVibGljIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNzcztcbiAgfVxuICBwcml2YXRlIGNzc1ZhbHVlOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIGlmICghdGhpcy5jc3NWYWx1ZSkge1xuICAgICAgdGhpcy5jc3NWYWx1ZSA9IHt9O1xuICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3Nlcyh0aGlzLmNzc1ZhbHVlLCBzdXJ2ZXlDc3MuZ2V0Q3NzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jc3NWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKGZhbHNlKTtcbiAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCB0aGlzLmNzcyk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uQ29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLmNvbXBsZXRlXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25QcmV2aWV3KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5wcmV2aWV3XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25FZGl0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5lZGl0XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25QcmV2KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5wcmV2XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24uc3RhcnRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvbk5leHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLm5leHRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY29tcGxldGVkQ3NzKCkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICByZXR1cm4gY3NzLmJvZHkgKyBcIiBcIiArIGNzcy5jb21wbGV0ZWRQYWdlO1xuICB9XG4gIHByaXZhdGUgZ2V0TmF2aWdhdGlvbkNzcyhtYWluOiBzdHJpbmcsIGJ0bjogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKG1haW4pIHJlcyA9IG1haW47XG4gICAgaWYgKGJ0bikgcmVzICs9IFwiIFwiICsgYnRuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBsYXp5UmVuZGVyaW5nVmFsdWU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIGlmIHRoZXkgYXJlIHZpc2libGUgb3Igbm90LlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxhenlSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGF6eVJlbmRlcmluZ1ZhbHVlID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgbGF6eVJlbmRlcmluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxhenlSZW5kZXJpbmdWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTGF6eVJlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXp5UmVuZGVyaW5nIHx8IHNldHRpbmdzLmxhenlSb3dzUmVuZGVyaW5nO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlTGF6eVJlbmRlcmluZ1Jvd3NPblJlbW92aW5nRWxlbWVudHMoKSB7XG4gICAgaWYgKCF0aGlzLmlzTGF6eVJlbmRlcmluZykgcmV0dXJuO1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoISFwYWdlKSB7XG4gICAgICBzY3JvbGxFbGVtZW50QnlDaGlsZElkKHBhZ2UuaWQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgbGlzdCBvZiB0cmlnZ2VycyBpbiB0aGUgc3VydmV5LlxuICAgKiBAc2VlIFN1cnZleVRyaWdnZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdHJpZ2dlcnMoKTogQXJyYXk8U3VydmV5VHJpZ2dlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0cmlnZ2Vyc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRyaWdnZXJzKHZhbDogQXJyYXk8U3VydmV5VHJpZ2dlcj4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0cmlnZ2Vyc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaXN0IG9mIGNhbGN1bGF0ZWQgdmFsdWVzIGluIHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgQ2FsY3VsYXRlZFZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhbGN1bGF0ZWRWYWx1ZXMoKTogQXJyYXk8Q2FsY3VsYXRlZFZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNhbGN1bGF0ZWRWYWx1ZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjYWxjdWxhdGVkVmFsdWVzKHZhbDogQXJyYXk8Q2FsY3VsYXRlZFZhbHVlPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNhbGN1bGF0ZWRWYWx1ZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIGlkZW50aWZpZXIgb2YgYSBzdXJ2ZXkgbW9kZWwgbG9hZGVkIGZyb20gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLiBXaGVuIHNwZWNpZmllZCwgdGhlIHN1cnZleSBKU09OIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkIGZyb20gW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgbG9hZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqIEBzZWUgb25Mb2FkZWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXlJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlJZFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN1cnZleUlkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5SWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIGlkZW50aWZpZXIgb2YgYSBzdXJ2ZXkgbW9kZWwgc2F2ZWQgdG8gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLiBXaGVuIHNwZWNpZmllZCwgdGhlIHN1cnZleSBkYXRhIGlzIGF1dG9tYXRpY2FsbHkgc2F2ZWQgdG8gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLlxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICogQHNlZSBzdXJ2ZXlTaG93RGF0YVNhdmluZ1xuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXlQb3N0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5UG9zdElkXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3VydmV5UG9zdElkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5UG9zdElkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB1c2VyJ3MgaWRlbnRpZmllciAoZS5nLiwgZS1tYWlsIG9yIHVuaXF1ZSBjdXN0b21lciBpZCkgaW4geW91ciB3ZWIgYXBwbGljYXRpb24uXG4gICAqIElmIHlvdSBsb2FkIHN1cnZleSBvciBwb3N0IHN1cnZleSByZXN1bHRzIGZyb20vdG8gW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UsIHRoZW4gdGhlIGxpYnJhcnkgZG8gbm90IGFsbG93IHVzZXJzIHRvIHJ1biB0aGUgc2FtZSBzdXJ2ZXkgdGhlIHNlY29uZCB0aW1lLlxuICAgKiBPbiB0aGUgc2Vjb25kIHJ1biwgdGhlIHVzZXIgd2lsbCBzZWUgdGhlIHN1cnZleSBjb21wbGV0ZSBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBjbGllbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjbGllbnRJZFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudElkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2xpZW50SWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgY29va2llIG5hbWUgdXNlZCB0byBzYXZlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBsZXRpbmcgdGhlIHN1cnZleS5cbiAgICogSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBlbXB0eSwgYmVmb3JlIHN0YXJ0aW5nIHRoZSBzdXJ2ZXksIHRoZSBTdXJ2ZXkgbGlicmFyeSBjaGVja3MgaWYgdGhlIGNvb2tpZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMuXG4gICAqIElmIGl0IGlzIGB0cnVlYCwgdGhlIHN1cnZleSBnb2VzIHRvIGNvbXBsZXRlIG1vZGUgYW5kIGEgdXNlciBzZWVzIHRoZSBzdXJ2ZXkgY29tcGxldGUgcGFnZS4gT24gY29tcGxldGluZyB0aGUgc3VydmV5IHRoZSBjb29raWUgd2l0aCB0aGlzIG5hbWUgaXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29va2llTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb29raWVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29va2llTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvb2tpZU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gc2F2ZSBzdXJ2ZXkgcmVzdWx0cyBvbiBjb21wbGV0aW5nIGV2ZXJ5IHBhZ2UuIElmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYG9uUGFydGlhbFNlbmRgIGV2ZW50IGlzIGZpcmVkLlxuICAgKiBAc2VlIG9uUGFydGlhbFNlbmRcbiAgICogQHNlZSBjbGllbnRJZFxuICAgKi9cbiAgcHVibGljIGdldCBzZW5kUmVzdWx0T25QYWdlTmV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2VuZFJlc3VsdE9uUGFnZU5leHRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VuZFJlc3VsdE9uUGFnZU5leHQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2VuZFJlc3VsdE9uUGFnZU5leHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gc2hvdyB0aGUgcHJvZ3Jlc3Mgb24gc2F2aW5nL3NlbmRpbmcgZGF0YSBpbnRvIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogQHNlZSBzdXJ2ZXlQb3N0SWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc3VydmV5U2hvd0RhdGFTYXZpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN1cnZleVNob3dEYXRhU2F2aW5nXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN1cnZleVNob3dEYXRhU2F2aW5nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN1cnZleVNob3dEYXRhU2F2aW5nXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBmaXJzdCBpbnB1dCBpcyBmb2N1c2VkIG9uIHNob3dpbmcgYSBuZXh0IG9yIGEgcHJldmlvdXMgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBmaXJzdCBpbnB1dCBpcyBmb2N1c2VkIGlmIHRoZSBjdXJyZW50IHBhZ2UgaGFzIGVycm9ycy5cbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCAodGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgKSBpZiB5b3UgZG8gbm90IHdhbnQgdG8gYnJpbmcgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGhhcyBlcnJvciBvbiB0aGUgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZm9jdXNPbkZpcnN0RXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvY3VzT25GaXJzdEVycm9yXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgZm9jdXNPbkZpcnN0RXJyb3IodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNPbkZpcnN0RXJyb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgcG9zaXRpb24uXG4gICAqIFBvc3NpYmxlIHZhbHVlczogJ2JvdHRvbScgKGRlZmF1bHQpLCAndG9wJywgJ2JvdGgnIGFuZCAnbm9uZScuIFNldCBpdCB0byAnbm9uZScgdG8gaGlkZSAnUHJldicsICdOZXh0JyBhbmQgJ0NvbXBsZXRlJyBidXR0b25zLlxuICAgKiBJdCBtYWtlcyBzZW5zZSBpZiB5b3UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhIGN1c3RvbSBuYXZpZ2F0aW9uLCBoYXZlIG9ubHkgYSBzaW5nbGUgcGFnZSwgb3IgdGhlIGBnb05leHRQYWdlQXV0b21hdGljYCBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgLlxuICAgKiBAc2VlIGdvTmV4dFBhZ2VBdXRvbWF0aWNcbiAgICogQHNlZSBzaG93UHJldkJ1dHRvblxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TmF2aWdhdGlvbkJ1dHRvbnMoKTogc3RyaW5nIHwgYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd05hdmlnYXRpb25CdXR0b25zKHZhbDogc3RyaW5nIHwgYW55KSB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsID0gXCJib3R0b21cIjtcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gZmFsc2UpIHtcbiAgICAgIHZhbCA9IFwibm9uZVwiO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFN1cnZleSBkaXNwbGF5cyBcIlByZXZcIiBidXR0b24gaW4gaXRzIHBhZ2VzLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IGVuZC11c2VycyBmcm9tIGdvaW5nIGJhY2sgdG8gdGhlaXIgYW5zd2Vycy5cbiAgICogQHNlZSBzaG93TmF2aWdhdGlvbkJ1dHRvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1ByZXZCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2QnV0dG9uXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1ByZXZCdXR0b24odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZCdXR0b25cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFN1cnZleSBkaXNwbGF5cyBzdXJ2ZXkgdGl0bGUgaW4gaXRzIHBhZ2VzLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBoaWRlIGEgc3VydmV5IHRpdGxlLlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpdGxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1RpdGxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaXRsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgU3VydmV5IGRpc3BsYXlzIHBhZ2UgdGl0bGVzLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBoaWRlIHBhZ2UgdGl0bGVzLlxuICAgKiBAc2VlIFBhZ2VNb2RlbC50aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UGFnZVRpdGxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1BhZ2VUaXRsZXNcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UGFnZVRpdGxlcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZVRpdGxlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBPbiBmaW5pc2hpbmcgdGhlIHN1cnZleSB0aGUgY29tcGxldGUgcGFnZSBpcyBzaG93bi4gU2V0IHRoZSBwcm9wZXJ0eSB0byBgZmFsc2VgLCB0byBoaWRlIHRoZSBjb21wbGV0ZSBwYWdlLlxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqIEBzZWUgbmF2aWdhdGVUb1VybFxuICAgKi9cbiAgcHVibGljIGdldCBzaG93Q29tcGxldGVkUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NvbXBsZXRlZFBhZ2VcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93Q29tcGxldGVkUGFnZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q29tcGxldGVkUGFnZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBhIHVybCB5b3Ugd2FudCB0byBuYXZpZ2F0ZSBhZnRlciBhIHVzZXIgY29tcGxldGluZyB0aGUgc3VydmV5LlxuICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgYWZ0ZXIgY2FsbGluZyBvbkNvbXBsZXRlIGV2ZW50LiBJbiBjYXNlIGNhbGxpbmcgb3B0aW9ucy5zaG93RGF0YVNhdmluZyBjYWxsYmFjayBpbiBvbkNvbXBsZXRlIGV2ZW50LCBuYXZpZ2F0ZVRvVXJsIHdpbGwgYmUgdXNlZCBvbiBjYWxsaW5nIG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdTdWNjZXNzIGNhbGxiYWNrLlxuICAgKi9cbiAgcHVibGljIGdldCBuYXZpZ2F0ZVRvVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0ZVRvVXJsKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaXN0IG9mIFVSTCBjb25kaXRpb24gaXRlbXMuIElmIHRoZSBleHByZXNzaW9uIG9mIHRoaXMgaXRlbSByZXR1cm5zIGB0cnVlYCwgdGhlbiBzdXJ2ZXkgd2lsbCBuYXZpZ2F0ZSB0byB0aGUgaXRlbSBVUkwuXG4gICAqIEBzZWUgVXJsQ29uZGl0aW9uSXRlbVxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uKCk6IEFycmF5PFVybENvbmRpdGlvbkl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uKHZhbDogQXJyYXk8VXJsQ29uZGl0aW9uSXRlbT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROYXZpZ2F0ZVRvVXJsKCk6IHN0cmluZyB7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgICB0aGlzLm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblxuICAgICk7XG4gICAgdmFyIHVybCA9ICEhaXRlbSA/ICg8VXJsQ29uZGl0aW9uSXRlbT5pdGVtKS51cmwgOiB0aGlzLm5hdmlnYXRlVG9Vcmw7XG4gICAgaWYgKCEhdXJsKSB7XG4gICAgICB1cmwgPSB0aGlzLnByb2Nlc3NUZXh0KHVybCwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvKCkge1xuICAgIHZhciB1cmwgPSB0aGlzLmdldE5hdmlnYXRlVG9VcmwoKTtcbiAgICB2YXIgb3B0aW9ucyA9IHsgdXJsOiB1cmwgfTtcbiAgICB0aGlzLm9uTmF2aWdhdGVUb1VybC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy51cmwgfHwgdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhd2luZG93LmxvY2F0aW9uKVxuICAgICAgcmV0dXJuO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gb3B0aW9ucy51cmw7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcmVxdWlyZWQgcXVlc3Rpb24gbWFyay4gVGhlIHJlcXVpcmVkIHF1ZXN0aW9uIG1hcmsgaXMgYSBjaGFyIG9yIHN0cmluZyB0aGF0IGlzIHJlbmRlcmVkIGluIHRoZSByZXF1aXJlZCBxdWVzdGlvbnMnIHRpdGxlcy5cbiAgICogQHNlZSBRdWVzdGlvbi50aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRUZXh0XCIsIFwiKlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkVGV4dFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0byBoaWRlIGFsbCByZXF1aXJlZCBlcnJvcnMuXG4gICAqL1xuICBwdWJsaWMgaGlkZVJlcXVpcmVkRXJyb3JzOiBib29sZWFuID0gZmFsc2U7XG4gIGJlZm9yZVNldHRpbmdRdWVzdGlvbkVycm9ycyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+XG4gICk6IHZvaWQge1xuICAgIHRoaXMubWFha2VSZXF1aXJlZEVycm9yc0ludmlzaWJnbGUoZXJyb3JzKTtcbiAgICB0aGlzLm9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgfSk7XG4gIH1cbiAgYmVmb3JlU2V0dGluZ1BhbmVsRXJyb3JzKHF1ZXN0aW9uOiBJUGFuZWwsIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KTogdm9pZCB7XG4gICAgdGhpcy5tYWFrZVJlcXVpcmVkRXJyb3JzSW52aXNpYmdsZShlcnJvcnMpO1xuICB9XG4gIHByaXZhdGUgbWFha2VSZXF1aXJlZEVycm9yc0ludmlzaWJnbGUoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBpZiAoIXRoaXMuaGlkZVJlcXVpcmVkRXJyb3JzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlclR5cGUgPSBlcnJvcnNbaV0uZ2V0RXJyb3JUeXBlKCk7XG4gICAgICBpZiAoZXJUeXBlID09IFwicmVxdWlyZWRcIiB8fCBlclR5cGUgPT0gXCJyZXF1aXJlb25lYW5zd2VyXCIpIHtcbiAgICAgICAgZXJyb3JzW2ldLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZmlyc3QgcXVlc3Rpb24gaW5kZXguIFRoZSBmaXJzdCBxdWVzdGlvbiBpbmRleCBpcyAnMScgYnkgZGVmYXVsdC4gWW91IG1heSBzdGFydCBpdCBmcm9tICcxMDAnIG9yIGZyb20gJ0EnLCBieSBzZXR0aW5nICcxMDAnIG9yICdBJyB0byB0aGlzIHByb3BlcnR5LlxuICAgKiBZb3UgY2FuIHNldCB0aGUgc3RhcnQgaW5kZXggdG8gXCIoMSlcIiBvciBcIiMgQSlcIiBvciBcImEpXCIgdG8gcmVuZGVyIHF1ZXN0aW9uIG51bWJlciBhcyAoMSksICMgQSkgYW5kIGEpIGFjY29yZGluZ2x5LlxuICAgKiBAc2VlIFF1ZXN0aW9uLnRpdGxlXG4gICAqIEBzZWUgcmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblN0YXJ0SW5kZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFwiT3RoZXJzXCIgb3B0aW9uIHRleHQgaXMgc3RvcmVkIGFzIHF1ZXN0aW9uIGNvbW1lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGVudGVyZWQgdGV4dCBpbiB0aGUgXCJPdGhlcnNcIiBpbnB1dCBpbiB0aGUgY2hlY2tib3gvcmFkaW9ncm91cC9kcm9wZG93biBpcyBzdG9yZWQgYXMgYFwicXVlc3Rpb24gbmFtZSBcIiArIFwiLUNvbW1lbnRcImAuIFRoZSB2YWx1ZSBpdHNlbGYgaXMgYFwicXVlc3Rpb24gbmFtZVwiOiBcIm90aGVyc1wiYC5cbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCwgdG8gc3RvcmUgdGhlIGVudGVyZWQgdGV4dCBkaXJlY3RseSBpbiB0aGUgYFwicXVlc3Rpb24gbmFtZVwiYCBrZXkuXG4gICAqIEBzZWUgY29tbWVudFByZWZpeFxuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzdG9yZU90aGVyc0FzQ29tbWVudCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgbWF4aW11bSBsZW5ndGggZm9yIHF1ZXN0aW9ucyBsaWtlIHRleHQgYW5kIGNvbW1lbnQsIGluY2x1ZGluZyBtYXRyaXggY2VsbCBxdWVzdGlvbnMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwYCwgdGhhdCBtZWFucyB0aGF0IHRoZSB0ZXh0IGFuZCBjb21tZW50IGhhdmUgdGhlIHNhbWUgbWF4IGxlbmd0aCBhcyB0aGUgc3RhbmRhcmQgSFRNTCBpbnB1dCAtIDUyNDI4OCBjaGFyYWN0ZXJzOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvYXR0X2lucHV0X21heGxlbmd0aC5hc3AuXG4gICAqIEBzZWUgbWF4T3RoZXJzTGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFRleHRMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGV4dExlbmd0aFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFRleHRMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhUZXh0TGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aCBmb3IgcXVlc3Rpb24gY29tbWVudHMgYW5kIG90aGVyc1xuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMGAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgcXVlc3Rpb24gY29tbWVudHMgaGF2ZSB0aGUgc2FtZSBtYXggbGVuZ3RoIGFzIHRoZSBzdGFuZGFyZCBIVE1MIGlucHV0IC0gNTI0Mjg4IGNoYXJhY3RlcnM6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vdGFncy9hdHRfaW5wdXRfbWF4bGVuZ3RoLmFzcC5cbiAgICogQHNlZSBRdWVzdGlvbi5oYXNDb21tZW50XG4gICAqIEBzZWUgUXVlc3Rpb24uaGFzT3RoZXJcbiAgICogQHNlZSBtYXhUZXh0TGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heE90aGVyc0xlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhPdGhlcnNMZW5ndGhcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhPdGhlcnNMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhPdGhlcnNMZW5ndGhcIiwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNlcyB3aGV0aGVyIGEgdXNlciBjYW4gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGFuc3dlcmluZyBhbGwgdGhlIHF1ZXN0aW9ucyBvbiBhIHBhZ2Ugd2l0aG91dCBwcmVzc2luZyB0aGUgXCJOZXh0XCIgYnV0dG9uLlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHRydWVgIC0gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhbmQgc3VibWl0IHN1cnZleSBkYXRhIGF1dG9tYXRpY2FsbHkuXG4gICAqIC0gYGF1dG9nb25leHRgIC0gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5IGJ1dCBkbyBub3Qgc3VibWl0IHN1cnZleSBkYXRhLlxuICAgKiAtIGBmYWxzZWAgLSBkbyBub3QgbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhbmQgZG8gbm90IHN1Ym1pdCBzdXJ2ZXkgZGF0YSBhdXRvbWF0aWNhbGx5LlxuICAgKiBAc2VlIHNob3dOYXZpZ2F0aW9uQnV0dG9uc1xuICAgKi9cbiAgcHVibGljIGdldCBnb05leHRQYWdlQXV0b21hdGljKCk6IGJvb2xlYW4gfCBcImF1dG9nb25leHRcIiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImdvTmV4dFBhZ2VBdXRvbWF0aWNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgZ29OZXh0UGFnZUF1dG9tYXRpYyh2YWw6IGJvb2xlYW4gfCBcImF1dG9nb25leHRcIikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImdvTmV4dFBhZ2VBdXRvbWF0aWNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgYSBzdXJ2ZXkgaXMgYXV0b21hdGljYWxseSBjb21wbGV0ZWQgd2hlbiBgZ29OZXh0UGFnZUF1dG9tYXRpYyA9IHRydWVgLiBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc3VibWl0IHN1cnZleSBhdXRvbWF0aWNhbGx5IG9uIGNvbXBsZXRpbmcgdGhlIGxhc3Qgc3VydmV5IHBhZ2UuXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpYyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IHZhbGlkYXRlcyB0aGUgcXVlc3Rpb24gYW5zd2Vycy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9uTmV4dFBhZ2VgIChkZWZhdWx0KSAtIGNoZWNrIGVycm9ycyBvbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHBhZ2Ugb3Igb24gY29tcGxldGluZyB0aGUgc3VydmV5LlxuICAgKiAtIGBvblZhbHVlQ2hhbmdlZGAgLSBjaGVjayBlcnJvcnMgb24gZXZlcnkgcXVlc3Rpb24gdmFsdWUgKGkuZS4sIGFuc3dlcikgY2hhbmdpbmcuXG4gICAqIC0gYG9uVmFsdWVDaGFuZ2luZ2AgLSBjaGVjayBlcnJvcnMgYmVmb3JlIHNldHRpbmcgdmFsdWUgaW50byBzdXJ2ZXkuIElmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHN1cnZleSBkYXRhIGlzIG5vdCBjaGFuZ2VkLCBidXQgcXVlc3Rpb24gdmFsdWUgd2lsbCBiZSBrZWVwZWQuXG4gICAqIC0gYG9uQ29tcGxldGVgIC0gdG8gdmFsaWRhdGUgYWxsIHZpc2libGUgcXVlc3Rpb25zIG9uIGNvbXBsZXRlIGJ1dHRvbiBjbGljay4gSWYgdGhlcmUgYXJlIGVycm9ycyBvbiBwcmV2aW91cyBwYWdlcywgdGhlbiB0aGUgcGFnZSB3aXRoIHRoZSBmaXJzdCBlcnJvciBiZWNvbWVzIHRoZSBjdXJyZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja0Vycm9yc01vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hlY2tFcnJvcnNNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hlY2tFcnJvcnNNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hlY2tFcnJvcnNNb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IHVwZGF0ZXMgaXRzIHF1ZXN0aW9ucycgdGV4dCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBvbkJsdXJgIChkZWZhdWx0KSAtIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIGFmdGVyIGFuIGlucHV0IGxvc2VzIHRoZSBmb2N1cy5cbiAgICogLSBgb25UeXBpbmdgIC0gdXBkYXRlIHRoZSB2YWx1ZSBvZiB0ZXh0IHF1ZXN0aW9ucywgXCJ0ZXh0XCIgYW5kIFwiY29tbWVudFwiLCBvbiBldmVyeSBrZXkgcHJlc3MuXG4gICAqXG4gICAqIE5vdGUsIHRoYXQgc2V0dGluZyB0byBcIm9uVHlwaW5nXCIgbWF5IGxlYWQgdG8gYSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgaW4gY2FzZSB5b3UgaGF2ZSBtYW55IGV4cHJlc3Npb25zIGluIHRoZSBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRleHRVcGRhdGVNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dFVwZGF0ZU1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGludmlzaWJsZSBkYXRhIGlzIGluY2x1ZGVkIGluIHN1cnZleSBkYXRhLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgbm9uZWAgLSBpbmNsdWRlIHRoZSBpbnZpc2libGUgdmFsdWVzIGludG8gdGhlIHN1cnZleSBkYXRhLlxuICAgKiAtIGBvbkhpZGRlbmAgLSBjbGVhciB0aGUgcXVlc3Rpb24gdmFsdWUgd2hlbiBpdCBiZWNvbWVzIGludmlzaWJsZS4gSWYgYSBxdWVzdGlvbiBoYXMgdmFsdWUgYW5kIGl0IHdhcyBpbnZpc2libGUgaW5pdGlhbGx5IHRoZW4gc3VydmV5IGNsZWFycyB0aGUgdmFsdWUgb24gY29tcGxldGluZy5cbiAgICogLSBgb25IaWRkZW5Db250YWluZXJgIC0gY2xlYXIgdGhlIHF1ZXN0aW9uIHZhbHVlIHdoZW4gaXQgb3IgaXRzIHBhcmVudCAocGFnZSBvciBwYW5lbCkgYmVjb21lcyBpbnZpc2libGUuIElmIGEgcXVlc3Rpb24gaGFzIHZhbHVlIGFuZCBpdCB3YXMgaW52aXNpYmxlIGluaXRpYWxseSB0aGVuIHN1cnZleSBjbGVhcnMgdGhlIHZhbHVlIG9uIGNvbXBsZXRpbmcuXG4gICAqIC0gYG9uQ29tcGxldGVgIChkZWZhdWx0KSAtIGNsZWFyIGludmlzaWJsZSBxdWVzdGlvbiB2YWx1ZXMgb24gc3VydmV5IGNvbXBsZXRlLiBJbiB0aGlzIGNhc2UsIHRoZSBpbnZpc2libGUgcXVlc3Rpb25zIHdpbGwgbm90IGJlIHN0b3JlZCBvbiB0aGUgc2VydmVyLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnZpc2libGVcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsZWFySW52aXNpYmxlVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNsZWFySW52aXNpYmxlVmFsdWVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2xlYXJJbnZpc2libGVWYWx1ZXModmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB2YWwgPSBcIm9uQ29tcGxldGVcIjtcbiAgICBpZiAodmFsID09PSBmYWxzZSkgdmFsID0gXCJub25lXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbGwgcXVlc3Rpb24gdmFsdWVzIGZyb20gdGhlIHN1cnZleSwgdGhhdCBlbmQtdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIGVudGVyLlxuICAgKiBGb3IgZXhhbXBsZSB0aGUgdmFsdWUgdGhhdCBkb2Vzbid0IGV4aXN0cyBpbiBhIHJhZGlvZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFyIHZhbHVlcyBmb3IgaW52aXNpYmxlIHF1ZXN0aW9ucyBvciB2YWx1ZXMgdGhhdCBkb2Vzbid0IGFzc29jaWF0ZWQgd2l0aCBxdWVzdGlvbnMuXG4gICAqIEluIGZhY3QgdGhpcyBmdW5jdGlvbiBqdXN0IGNhbGwgY2xlYXJJbmNvcnJlY3RWYWx1ZXMgZnVuY3Rpb24gb2YgYWxsIHF1ZXN0aW9ucyBpbiB0aGUgc3VydmV5XG4gICAqIEBwYXJhbSByZW1vdmVOb25FeGlzaW5nUm9vdEtleXMgLSBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSB0byByZW1vdmUga2V5cyBmcm9tIHN1cnZleS5kYXRhIHRoYXQgZG9lc24ndCBoYXZlIGNvcnJlc3BvbmRlZCBxdWVzdGlvbnMgYW5kIGNhbGN1bGF0ZWQgdmFsdWVzXG4gICAqIEBzZWUgUXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICogQHNlZSBQYWdlLmNsZWFySW5jb3JyZWN0VmFsdWVzXG4gICAqIEBzZWUgUGFuZWwuY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICovXG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcyhyZW1vdmVOb25FeGlzaW5nUm9vdEtleXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgICBpZiAoIXJlbW92ZU5vbkV4aXNpbmdSb290S2V5cykgcmV0dXJuO1xuICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgIHZhciBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmICghIXRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShrZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KGtleSwgc2V0dGluZ3MuY29tbWVudFByZWZpeCkgfHxcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KGtleSwgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXgpXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFyIGNhbGNWYWx1ZSA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFZhbHVlQnlOYW1lKGtleSk7XG4gICAgICBpZiAoISFjYWxjVmFsdWUgJiYgY2FsY1ZhbHVlLmluY2x1ZGVJbnRvUmVzdWx0KSBjb250aW51ZTtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICB9XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNjb3JyZWN0VmFsdWVXaXRoUG9zdFByZWZpeChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBwb3N0UHJlZml4OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGtleS5pbmRleE9mKHBvc3RQcmVmaXgpICE9PSBrZXkubGVuZ3RoIC0gcG9zdFByZWZpeC5sZW5ndGgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKFxuICAgICAga2V5LnN1YnN0cigwLCBrZXkuaW5kZXhPZihwb3N0UHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc3VydmV5IGxvY2FsZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXQgaXMgZW1wdHksIHRoaXMgbWVhbnMgdGhlICdlbicgbG9jYWxlIGlzIHVzZWQuXG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvICdkZScgLSBHZXJtYW4sICdmcicgLSBGcmVuY2ggYW5kIHNvIG9uLiBUaGUgbGlicmFyeSBoYXMgYnVpbHQtaW4gbG9jYWxpemF0aW9uIGZvciBzZXZlcmFsIGxhbmd1YWdlcy4gVGhlIGxpYnJhcnkgaGFzIGEgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydCBhcyB3ZWxsLlxuICAgKi9cbiAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgc3VydmV5TG9jYWxpemF0aW9uLmN1cnJlbnRMb2NhbGUgPSB2YWx1ZTtcbiAgICB0aGlzLmxvY2FsZVZhbHVlID0gc3VydmV5TG9jYWxpemF0aW9uLmN1cnJlbnRMb2NhbGU7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9jYWxlXCIsIHRoaXMubG9jYWxlVmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMubG9jYWxlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25Mb2NhbGVDaGFuZ2VkRXZlbnQuZmlyZSh0aGlzLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgbG9jYWxlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBzdXJ2ZXkncyB0cmFuc2xhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRVc2VkTG9jYWxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgbG9jcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgdGhpcy5hZGRVc2VkTG9jYWxlcyhsb2NzKTtcbiAgICAvL1JlcGxhY2UgdGhlIGRlZmF1bHQgbG9jYWxlIHdpdGggdGhlIHJlYWwgb25lXG4gICAgdmFyIGluZGV4ID0gbG9jcy5pbmRleE9mKFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdmFyIGRlZmF1bHRMb2MgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZTtcbiAgICAgIC8vUmVtb3ZlIHRoZSBkZWZhdWx0TG9jXG4gICAgICB2YXIgZGVmSW5kZXggPSBsb2NzLmluZGV4T2YoZGVmYXVsdExvYyk7XG4gICAgICBpZiAoZGVmSW5kZXggPiAtMSkge1xuICAgICAgICBsb2NzLnNwbGljZShkZWZJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpbmRleCA9IGxvY3MuaW5kZXhPZihcImRlZmF1bHRcIik7XG4gICAgICBsb2NzW2luZGV4XSA9IGRlZmF1bHRMb2M7XG4gICAgfVxuICAgIHJldHVybiBsb2NzO1xuICB9XG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIC8vSUxvY2FsaXphYmxlT3duZXJcbiAgZ2V0TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAvL0RvIG5vdCBzZXQgY3VycmVudCBwYWdlIGlmIGl0IGlzIG5vdCBzZXQgeWV0LlxuICAgIC8vQXQgZmlyc3Qgd2UgZG8gbm90IG5lZWQgdGhpcywgYXQgc2Vjb25kIGl0IGNyZWF0ZXMgaXNzdWVzIHdpdGggVnVlIENMSSBwcm9qZWN0c1xuICAgIC8vTW9yZSBpbmZvcm1hdGlvbiBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vc3VydmV5anMvc3VydmV5LWxpYnJhcnkvaXNzdWVzLzI1OTlcbiAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgaWYgKCEhcGFnZSkge1xuICAgICAgcGFnZS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlckZvclN0cmluZyh0aGlzLCBuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXJGb3JTdHJpbmcoZWxlbWVudDogQmFzZSwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZW5kZXJBcyA9IHRoaXMuZ2V0QnVpbHRJblJlbmRlcmVyRm9yU3RyaW5nKGVsZW1lbnQsIG5hbWUpO1xuICAgIHZhciBvcHRpb25zID0geyBlbGVtZW50OiBlbGVtZW50LCBuYW1lOiBuYW1lLCByZW5kZXJBczogcmVuZGVyQXMgfTtcbiAgICB0aGlzLm9uVGV4dFJlbmRlckFzLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMucmVuZGVyQXM7XG4gIH1cbiAgZ2V0RXhwcmVzc2lvbkRpc3BsYXlWYWx1ZShcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZGlzcGxheVZhbHVlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5VmFsdWUsXG4gICAgfTtcbiAgICB0aGlzLm9uR2V0RXhwcmVzc2lvbkRpc3BsYXlWYWx1ZS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmRpc3BsYXlWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldEJ1aWx0SW5SZW5kZXJlckZvclN0cmluZyhlbGVtZW50OiBCYXNlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXI7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dCh0ZXh0LCB0cnVlKTtcbiAgfVxuICBnZXRMb2NTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhzdHIpO1xuICB9XG4gIC8vSVN1cnZleUVycm9yT3duZXJcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHRleHQ6IHRleHQsXG4gICAgICBuYW1lOiBlcnJvci5nZXRFcnJvclR5cGUoKSxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xuICAgIHRoaXMub25FcnJvckN1c3RvbVRleHQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gdGhlcmUgYXJlIG5vIGFueSB2aXNpYmxlIHBhZ2VzIGFuZCBxdWVzdGlvbmEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVtcHR5U3VydmV5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcImVtcHR5U3VydmV5XCIpO1xuICB9XG5cbiAgLy8jcmVnaW9uIFRpdGxlL0hlYWRlciBvcHRpb25zXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgZGVzY3JpcHRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGl0bGVcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBkZXNjcmlwdGlvbi4gVGhlIHN1cnZleSBkZXNjcmlwdGlvbiBpcyBkaXNwbGF5ZWQgdW5kZXIgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImRlc2NyaXB0aW9uXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvLlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ28oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nbyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jTG9nbygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsb2dvXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgbG9nbyB3aWR0aC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29XaWR0aCgpOiBhbnkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiKTtcbiAgICByZXR1cm4gZ2V0U2l6ZSh3aWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvV2lkdGgodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIGhlaWdodC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29IZWlnaHQoKTogYW55IHtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiKTtcbiAgICByZXR1cm4gZ2V0U2l6ZShoZWlnaHQpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nb0hlaWdodCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIHBvc2l0aW9uLlxuICAgKiBAc2VlIGxvZ29cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nb1Bvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29Qb3NpdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvZ29Qb3NpdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb1Bvc2l0aW9uXCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0xvZ28oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2dvICYmIHRoaXMubG9nb1Bvc2l0aW9uICE9PSBcIm5vbmVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9nb0JlZm9yZSgpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZW5kZXJlZEhhc0xvZ28gJiZcbiAgICAgICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwidG9wXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9nb0FmdGVyKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucmVuZGVyZWRIYXNMb2dvO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlbmRlcmVkSGFzTG9nbyAmJlxuICAgICAgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcInJpZ2h0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwiYm90dG9tXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvZ29DbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgdmFyIGxvZ29DbGFzc2VzOiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBsZWZ0OiBcInN2LWxvZ28tLWxlZnRcIixcbiAgICAgIHJpZ2h0OiBcInN2LWxvZ28tLXJpZ2h0XCIsXG4gICAgICB0b3A6IFwic3YtbG9nby0tdG9wXCIsXG4gICAgICBib3R0b206IFwic3YtbG9nby0tYm90dG9tXCIsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jc3MubG9nbyArIFwiIFwiICsgbG9nb0NsYXNzZXNbdGhpcy5sb2dvUG9zaXRpb25dO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRIYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0aGlzLmlzUHJvcGVydHlWaXNpYmxlKFwidGl0bGVcIik7XG4gICAgcmV0dXJuICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkgJiYgdGhpcy5zaG93VGl0bGU7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZEhhc0xvZ28oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5pc1Byb3BlcnR5VmlzaWJsZShcImxvZ29cIik7XG4gICAgcmV0dXJuIHRoaXMuaGFzTG9nbztcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkSGFzSGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkSGFzVGl0bGUgfHwgdGhpcy5yZW5kZXJlZEhhc0xvZ287XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsb2dvIGZpdCBtb2RlLlxuICAgKiBAc2VlIGxvZ29cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nb0ZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJsb2dvRml0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nb0ZpdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29GaXRcIiwgdmFsKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBwcml2YXRlIF9pc01vYmlsZSA9IGZhbHNlO1xuICBwdWJsaWMgc2V0SXNNb2JpbGUobmV3VmFsID0gdHJ1ZSkge1xuICAgIHRoaXMuX2lzTW9iaWxlID0gbmV3VmFsO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiBpc01vYmlsZSgpIHx8IHRoaXMuX2lzTW9iaWxlO1xuICB9XG4gIHB1YmxpYyBnZXQgdGl0bGVNYXhXaWR0aCgpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzTW9iaWxlICYmXG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5sb2dvKSAmJlxuICAgICAgIXNldHRpbmdzLnN1cHBvcnRDcmVhdG9yVjJcbiAgICApIHtcbiAgICAgIHZhciBsb2dvV2lkdGggPSB0aGlzLmxvZ29XaWR0aDtcbiAgICAgIGlmICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICByZXR1cm4gXCJjYWxjKDEwMCUgLSA1cHggLSAyZW0gLSBcIiArIGxvZ29XaWR0aCArIFwiKVwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBIVE1MIGNvbnRlbnQgZGlzcGxheWVkIG9uIHRoZSBjb21wbGV0ZSBwYWdlLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29tcGxldGUgcGFnZSB0ZXh0LlxuICAgKiBAc2VlIHNob3dDb21wbGV0ZWRQYWdlXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRIdG1sXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tcGxldGVkSHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jQ29tcGxldGVkSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZWRIdG1sXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBIVE1MIGNvbmRpdGlvbiBpdGVtcy4gSWYgdGhlIGV4cHJlc3Npb24gb2YgdGhpcyBpdGVtIHJldHVybnMgYHRydWVgLCB0aGVuIGEgc3VydmV5IHdpbGwgdXNlIHRoaXMgaXRlbSBIVE1MIGluc3RlYWQgb2YgYGNvbXBsZXRlZEh0bWxgLlxuICAgKiBAc2VlIEh0bWxDb25kaXRpb25JdGVtXG4gICAqIEBzZWUgY29tcGxldGVIdG1sXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbigpOiBBcnJheTxIdG1sQ29uZGl0aW9uSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBjb21wbGV0ZWRIdG1sT25Db25kaXRpb24odmFsOiBBcnJheTxIdG1sQ29uZGl0aW9uSXRlbT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhIGdpdmVuIGV4cHJlc3Npb24gYW5kIHJldHVybnMgYSByZXN1bHQgdmFsdWUuXG4gICAqIEBwYXJhbSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgcnVuRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uUnVubmVyKGV4cHJlc3Npb24pLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGEgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHBhcmFtIGV4cHJlc3Npb25cbiAgICovXG4gIHB1YmxpYyBydW5Db25kaXRpb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25SdW5uZXIoZXhwcmVzc2lvbikucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFJ1biBhbGwgdHJpZ2dlcnMgdGhhdCBwZXJmb3JtcyBvbiB2YWx1ZSBjaGFuZ2VkIGFuZCBub3Qgb24gbW92aW5nIHRvIHRoZSBuZXh0IHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgcnVuVHJpZ2dlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1RyaWdnZXJzKHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgICB0aGlzLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICAgICk7XG4gICAgcmV0dXJuICEhaXRlbSA/ICg8SHRtbENvbmRpdGlvbkl0ZW0+aXRlbSkuaHRtbCA6IHRoaXMuY29tcGxldGVkSHRtbDtcbiAgfVxuICBwcml2YXRlIGdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgaXRlbXM6IEFycmF5PEV4cHJlc3Npb25JdGVtPlxuICApOiBFeHByZXNzaW9uSXRlbSB7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcykpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSFRNTCBjb250ZW50IGRpc3BsYXllZCB0byBhbiBlbmQgdXNlciB0aGF0IGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgc3VydmV5LlxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEJlZm9yZUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tcGxldGVkQmVmb3JlSHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jQ29tcGxldGVkQmVmb3JlSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSFRNTCB0aGF0IHNob3dzIG9uIGxvYWRpbmcgc3VydmV5IEpzb24gZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgc3VydmV5SWRcbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgbG9hZGluZ0h0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2FkaW5nSHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvYWRpbmdIdG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxvYWRpbmdIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jTG9hZGluZ0h0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibG9hZGluZ0h0bWxcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgJ1N0YXJ0JyBidXR0b24gY2FwdGlvbi5cbiAgICogVGhlICdTdGFydCcgYnV0dG9uIGlzIHNob3duIG9uIHRoZSBzdGFydGVkIHBhZ2UuIFNldCB0aGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgdG8gYHRydWVgLCB0byBkaXNwbGF5IHRoZSBzdGFydGVkIHBhZ2UuXG4gICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXJ0U3VydmV5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwic3RhcnRTdXJ2ZXlUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInN0YXJ0U3VydmV5VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBzdGFydFN1cnZleVRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic3RhcnRTdXJ2ZXlUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jU3RhcnRTdXJ2ZXlUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInN0YXJ0U3VydmV5VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnUHJldicgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VQcmV2VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFnZVByZXZUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VQcmV2VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlUHJldlRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZVByZXZUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFnZVByZXZUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnTmV4dCcgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VOZXh0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFnZU5leHRUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VOZXh0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlTmV4dFRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZU5leHRUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFnZU5leHRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VOZXh0VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIEdldHMgb3Igc2V0cyB0aGUgJ0NvbXBsZXRlJyBidXR0b24gY2FwdGlvbi5cbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJjb21wbGV0ZVRleHRcIixcbiAgICAgIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbXBsZXRlVGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZVRleHRcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGdldCBsb2NDb21wbGV0ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgR2V0cyBvciBzZXRzIHRoZSAnUHJldmlldycgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIGVkaXRUZXh0XG4gICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJldmlld1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInByZXZpZXdUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInByZXZpZXdUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHByZXZpZXdUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInByZXZpZXdUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUHJldmlld1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicHJldmlld1RleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqICBHZXRzIG9yIHNldHMgdGhlICdFZGl0JyBidXR0b24gY2FwdGlvbi5cbiAgICogQHNlZSBsb2NhbGVcbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqIEBzZWUgcHJldmlld1RleHRcbiAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAqL1xuICBwdWJsaWMgZ2V0IGVkaXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJlZGl0VGV4dFwiLFxuICAgICAgdGhpcy5nZXRMb2NTdHJpbmcoXCJlZGl0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBlZGl0VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJlZGl0VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0VkaXRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImVkaXRUZXh0XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGF0dGVybiBmb3IgcXVlc3Rpb24gdGl0bGUuIERlZmF1bHQgaXMgXCJudW1UaXRsZVJlcXVpcmVcIiwgMS4gV2hhdCBpcyB5b3VyIG5hbWU/ICosXG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvIG51bVJlcXVpcmVUaXRsZTogMS4gKiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogWW91IGNhbiBzZXQgaXQgdG8gcmVxdWlyZU51bVRpdGxlOiAqIDEuIFdoYXQgaXMgeW91ciBuYW1lP1xuICAgKiBZb3UgY2FuIHNldCBpdCB0byBudW1UaXRsZSAocmVtb3ZlIHJlcXVpcmUgc3ltYm9sIGNvbXBsZXRlbHkpOiAxLiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogQHNlZSBRdWVzdGlvbk1vZGVsLnRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVQYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsIFwibnVtVGl0bGVSZXF1aXJlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVBhdHRlcm4odmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICB2YWwgIT09IFwibnVtUmVxdWlyZVRpdGxlXCIgJiZcbiAgICAgIHZhbCAhPT0gXCJyZXF1aXJlTnVtVGl0bGVcIiAmJlxuICAgICAgdmFsICE9IFwibnVtVGl0bGVcIlxuICAgICkge1xuICAgICAgdmFsID0gXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZVBhdHRlcm5cIiwgdmFsKTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlUGF0dGVybk9wdGlvbnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgdmFyIHRpdGxlID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvblRpdGxlUGF0dGVyblRleHRcIik7XG4gICAgdmFyIG51bSA9ICEhdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXggPyB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA6IFwiMS5cIjtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICAgIHRleHQ6IG51bSArIFwiIFwiICsgdGl0bGUgKyBcIiBcIiArIHRoaXMucmVxdWlyZWRUZXh0LFxuICAgIH0pO1xuICAgIHJlcy5wdXNoKHtcbiAgICAgIHZhbHVlOiBcIm51bVJlcXVpcmVUaXRsZVwiLFxuICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgdGl0bGUsXG4gICAgfSk7XG4gICAgcmVzLnB1c2goe1xuICAgICAgdmFsdWU6IFwicmVxdWlyZU51bVRpdGxlXCIsXG4gICAgICB0ZXh0OiB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgbnVtICsgXCIgXCIgKyB0aXRsZSxcbiAgICB9KTtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJudW1UaXRsZVwiLFxuICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aXRsZSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBxdWVzdGlvbiB0aXRsZSB0ZW1wbGF0ZS4gT2Jzb2xldGUsIHBsZWFzZSB1c2UgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICogQHNlZSBRdWVzdGlvbk1vZGVsLnRpdGxlXG4gICAqIEBzZWUgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLCB2YWx1ZSk7XG4gICAgdGhpcy5xdWVzdGlvblRpdGxlUGF0dGVybiA9IHRoaXMuZ2V0TmV3VGl0bGVQYXR0ZXJuKHZhbHVlKTtcbiAgICB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA9IHRoaXMuZ2V0TmV3UXVlc3Rpb25UaXRsZUVsZW1lbnQoXG4gICAgICB2YWx1ZSxcbiAgICAgIFwibm9cIixcbiAgICAgIHRoaXMucXVlc3Rpb25TdGFydEluZGV4LFxuICAgICAgXCIxXCJcbiAgICApO1xuICAgIHRoaXMucmVxdWlyZWRUZXh0ID0gdGhpcy5nZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICAgIHZhbHVlLFxuICAgICAgXCJyZXF1aXJlXCIsXG4gICAgICB0aGlzLnJlcXVpcmVkVGV4dCxcbiAgICAgIFwiKlwiXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldE5ld1RpdGxlUGF0dGVybih0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISF0ZW1wbGF0ZSkge1xuICAgICAgdmFyIHN0cnMgPSBbXTtcbiAgICAgIHdoaWxlICh0ZW1wbGF0ZS5pbmRleE9mKFwie1wiKSA+IC0xKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3Vic3RyKHRlbXBsYXRlLmluZGV4T2YoXCJ7XCIpICsgMSk7XG4gICAgICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKFwifVwiKTtcbiAgICAgICAgaWYgKGluZCA8IDApIGJyZWFrO1xuICAgICAgICBzdHJzLnB1c2godGVtcGxhdGUuc3Vic3RyKDAsIGluZCkpO1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnN1YnN0cihpbmQgKyAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKHN0cnNbMF0gPT0gXCJyZXF1aXJlXCIpIHJldHVybiBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICAgICAgICBpZiAoc3Ryc1sxXSA9PSBcInJlcXVpcmVcIiAmJiBzdHJzLmxlbmd0aCA9PSAzKSByZXR1cm4gXCJudW1SZXF1aXJlVGl0bGVcIjtcbiAgICAgICAgaWYgKHN0cnMuaW5kZXhPZihcInJlcXVpcmVcIikgPCAwKSByZXR1cm4gXCJudW1UaXRsZVwiO1xuICAgICAgfVxuICAgICAgaWYgKHN0cnMubGVuZ3RoID09IDEgJiYgc3Ryc1swXSA9PSBcInRpdGxlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtVGl0bGVcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjdXJyZW50VmFsdWU6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIG5hbWUgPSBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKG5hbWUpO1xuICAgIHZhciBwcmVmaXggPSBcIlwiO1xuICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcbiAgICB2YXIgaSA9IGluZCAtIDE7XG4gICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ9XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA8IGluZCAtIDEpIHtcbiAgICAgIHByZWZpeCA9IHRlbXBsYXRlLnN1YnN0cihpICsgMSwgaW5kIC0gaSAtIDEpO1xuICAgIH1cbiAgICBpbmQgKz0gbmFtZS5sZW5ndGg7XG4gICAgaSA9IGluZDtcbiAgICBmb3IgKDsgaSA8IHRlbXBsYXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ7XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA+IGluZCkge1xuICAgICAgcG9zdGZpeCA9IHRlbXBsYXRlLnN1YnN0cihpbmQsIGkgLSBpbmQpO1xuICAgIH1cbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHByZWZpeC5sZW5ndGggJiYgcHJlZml4LmNoYXJDb2RlQXQoaSkgPCAzMykgaSsrO1xuICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIoaSk7XG4gICAgaSA9IHBvc3RmaXgubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaSA+PSAwICYmIHBvc3RmaXguY2hhckNvZGVBdChpKSA8IDMzKSBpLS07XG4gICAgcG9zdGZpeCA9IHBvc3RmaXguc3Vic3RyKDAsIGkgKyAxKTtcbiAgICBpZiAoIXByZWZpeCAmJiAhcG9zdGZpeCkgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB2YXIgdmFsdWUgPSAhIWN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgICByZXR1cm4gcHJlZml4ICsgdmFsdWUgKyBwb3N0Zml4O1xuICB9XG4gIGdldCBsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIGdldFVwZGF0ZWRRdWVzdGlvblRpdGxlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5pc0VtcHR5KSByZXR1cm4gdGl0bGU7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgdGl0bGU6IHRpdGxlIH07XG4gICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50aXRsZTtcbiAgfVxuICBnZXRVcGRhdGVkUXVlc3Rpb25ObyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBubzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uTm8uaXNFbXB0eSkgcmV0dXJuIG5vO1xuICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogcXVlc3Rpb24sIG5vOiBubyB9O1xuICAgIHRoaXMub25HZXRRdWVzdGlvbk5vLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMubm87XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBzdXJ2ZXkgZGlzcGxheXMgcGFnZSBudW1iZXJzIG9uIHBhZ2VzIHRpdGxlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1BhZ2VOdW1iZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZU51bWJlcnNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2VOdW1iZXJzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dQYWdlTnVtYmVycykgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQYWdlTnVtYmVyc1wiLCB2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHF1ZXN0aW9uIG51bWJlcnMgYXJlIGRpc3BsYXllZC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9uYCAtIGRpc3BsYXkgcXVlc3Rpb24gbnVtYmVyc1xuICAgKiAtIGBvbnBhZ2VgIC0gZGlzcGxheSBxdWVzdGlvbiBudW1iZXJzLCBzdGFydCBudW1iZXJpbmcgb24gZXZlcnkgcGFnZVxuICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgKi9cbiAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gXCJvbnBhZ2VcIiA/IFwib25QYWdlXCIgOiB2YWx1ZTtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycykgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBzdXJ2ZXkgcHJvZ3Jlc3MgYmFyIHBvc2l0aW9uLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgb2ZmYCAoZGVmYXVsdCkgLSBkb24ndCBzaG93IHByb2dyZXNzIGJhclxuICAgKiAtIGB0b3BgIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIHRvcFxuICAgKiAtIGBib3R0b21gIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIGJvdHRvbVxuICAgKiAtIGBib3RoYCAtIHNob3cgcHJvZ3Jlc3MgYmFyIGluIGJvdGggc2lkZXM6IHRvcCBhbmQgYm90dG9tLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJvZ3Jlc3NCYXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1Byb2dyZXNzQmFyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1Byb2dyZXNzQmFyKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJvZ3Jlc3NCYXJcIiwgbmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgdHlwZSBvZiBpbmZvIGluIHRoZSBwcm9ncmVzcyBiYXIuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBwYWdlc2AgKGRlZmF1bHQpLFxuICAgKiAtIGBxdWVzdGlvbnNgLFxuICAgKiAtIGByZXF1aXJlZFF1ZXN0aW9uc2AsXG4gICAqIC0gYGNvcnJlY3RRdWVzdGlvbnNgLFxuICAgKiAtIGBidXR0b25zYFxuICAgKi9cbiAgcHVibGljIGdldCBwcm9ncmVzc0JhclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NCYXJUeXBlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcHJvZ3Jlc3NCYXJUeXBlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwiY29ycmVjdHF1ZXN0aW9uXCIpIG5ld1ZhbHVlID0gXCJjb3JyZWN0UXVlc3Rpb25cIjtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwicmVxdWlyZWRxdWVzdGlvblwiKSBuZXdWYWx1ZSA9IFwicmVxdWlyZWRRdWVzdGlvblwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzQmFyVHlwZVwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcm9ncmVzc0Jhck9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYW5TaG93UHJvcmVzQmFyKCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwidG9wXCIgfHwgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90aFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuU2hvd1Byb3Jlc0JhcigpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdHRvbVwiIHx8IHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdGhcIjtcbiAgfVxuICBwcml2YXRlIGNhblNob3dQcm9yZXNCYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzU2hvd2luZ1ByZXZpZXcgfHxcbiAgICAgIHRoaXMuc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAhPSBcInNob3dBbGxRdWVzdGlvbnNcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQvSFRNTCB0aGF0IGlzIHJlbmRlcmVkIGFzIGEgc3VydmV5IHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWw7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gdGl0bGUgbG9jYXRpb24uXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBib3R0b21gIC0gc2hvdyBhIHF1ZXN0aW9uIHRpdGxlIHRvIGJvdHRvbVxuICAgKiAtIGBsZWZ0YCAtIHNob3cgYSBxdWVzdGlvbiB0aXRsZSB0byBsZWZ0XG4gICAqIC0gYHRvcGAgLSBzaG93IGEgcXVlc3Rpb24gdGl0bGUgdG8gdG9wLlxuICAgKlxuICAgKiA+IFNvbWUgcXVlc3Rpb25zLCBmb3IgZXhhbXBsZSBtYXRyaXhlcywgZG8gbm90IHN1cHBvcnQgJ2xlZnQnIHZhbHVlLiBUaGUgdGl0bGUgZm9yIHRoZW0gd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHRvcC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKHRydWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICB2YXIgcGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBwb3NpdGlvbi5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHRvcGAgLSB0byBzaG93IHF1ZXN0aW9uIGVycm9yKHMpIG92ZXIgdGhlIHF1ZXN0aW9uLFxuICAgKiAtIGBib3R0b21gIC0gdG8gc2hvdyBxdWVzdGlvbiBlcnJvcihzKSB1bmRlciB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbkVycm9yTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBxdWVzdGlvbiBkZXNjcmlwdGlvbiBwb3NpdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHVuZGVyVGl0bGVgLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgdW5kZXJUaXRsZWAgLSBzaG93IHF1ZXN0aW9uIGRlc2NyaXB0aW9uIHVuZGVyIHRoZSBxdWVzdGlvbiB0aXRsZSxcbiAgICogLSBgdW5kZXJJbnB1dGAgLSBzaG93IHF1ZXN0aW9uIGRlc2NyaXB0aW9uIHVuZGVyIHRoZSBxdWVzdGlvbiBpbnB1dCBpbnN0ZWFkIG9mIHF1ZXN0aW9uIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIiwgdmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHN1cnZleSBlZGl0IG1vZGUuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBlZGl0YCAoZGVmYXVsdCkgLSBtYWtlIGEgc3VydmV5IGVkaXRhYmxlLFxuICAgKiAtIGBkaXNwbGF5YCAtIG1ha2UgYSBzdXJ2ZXkgcmVhZC1vbmx5LlxuICAgKi9cbiAgcHVibGljIGdldCBtb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbHVlID09IHRoaXMubW9kZSkgcmV0dXJuO1xuICAgIGlmICh2YWx1ZSAhPSBcImVkaXRcIiAmJiB2YWx1ZSAhPSBcImRpc3BsYXlcIikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1vZGVcIiwgdmFsdWUpO1xuICB9XG4gIHByaXZhdGUgb25Nb2RlQ2hhbmdlZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgIHBhZ2Uuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVhZE9ubHlcIiwgcGFnZS5pc1JlYWRPbmx5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBvYmplY3QgdGhhdCBzdG9yZXMgdGhlIHN1cnZleSByZXN1bHRzL2RhdGEuIFlvdSBjYW4gc2V0IGl0IGRpcmVjdGx5IGFzIGB7ICdxdWVzdGlvbiBuYW1lJzogcXVlc3Rpb25WYWx1ZSwgLi4uIH1gXG4gICAqXG4gICAqID4gSWYgeW91IHNldCB0aGUgYGRhdGFgIHByb3BlcnR5IGFmdGVyIGNyZWF0aW5nIHRoZSBzdXJ2ZXksIHlvdSBtYXkgbmVlZCB0byBzZXQgdGhlIGBjdXJyZW50UGFnZU5vYCB0byBgMGAsIGlmIHlvdSBhcmUgdXNpbmcgYHZpc2libGVJZmAgcHJvcGVydGllcyBmb3IgcXVlc3Rpb25zL3BhZ2VzL3BhbmVscyB0byBlbnN1cmUgdGhhdCB5b3UgYXJlIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IHBhZ2UuXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICogQHNlZSBnZXRWYWx1ZVxuICAgKiBAc2VlIG1lcmdlRGF0YVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlTm9cbiAgICovXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xuICAgIHZhciByZXN1bHQ6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciBkYXRhVmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgaWYgKGRhdGFWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZGF0YVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldENhbGN1YXRlZFZhbHVlc0ludG9SZXN1bHQocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlc0hhc2ggPSB7fTtcbiAgICB0aGlzLnNldERhdGFDb3JlKGRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBNZXJnZSB0aGUgdmFsdWVzIGludG8gc3VydmV5LmRhdGEuIEl0IHdvcmtzIGFzIHN1cnZleS5kYXRhLCBleGNlcHQgaXQgZG9lc24ndCBjbGVhbiB0aGUgZXhpc3RpbmcgZGF0YSwgYnV0IG92ZXJyaWRlcyB0aGVtLlxuICAgKiBAcGFyYW0gZGF0YSBkYXRhIHRvIG1lcmdlLiBJdCBzaG91bGQgYmUgYW4gb2JqZWN0IHtrZXlWYWx1ZTogVmFsdWUsIC4uLn1cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBtZXJnZURhdGEoZGF0YTogYW55KSB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgdGhpcy5zZXREYXRhQ29yZShkYXRhKTtcbiAgfVxuICBwdWJsaWMgc2V0RGF0YUNvcmUoZGF0YTogYW55KSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSwgZGF0YVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVBbGxRdWVzdGlvbnNWYWx1ZSgpO1xuICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdGluZ09iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nT2JqVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBvbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQ6IChzZW5kZXI6IEJhc2UsIG9wdGlvbnM6IGFueSkgPT4gdm9pZDtcbiAgcHVibGljIHNldCBlZGl0aW5nT2JqKHZhbDogQmFzZSkge1xuICAgIGlmICh0aGlzLmVkaXRpbmdPYmogPT0gdmFsKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKFxuICAgICAgICB0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nT2JqVmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdmFsKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS51bmJpbmRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgIHRoaXMuc2V0RGF0YUNvcmUoe30pO1xuICAgICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQgPSAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFTZXJpYWxpemVyLmhhc09yaWdpbmFsUHJvcGVydHkodGhpcy5lZGl0aW5nT2JqLCBvcHRpb25zLm5hbWUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy51cGRhdGVPblNldFZhbHVlKG9wdGlvbnMubmFtZSwgb3B0aW9ucy5uZXdWYWx1ZSwgb3B0aW9ucy5vbGRWYWx1ZSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5lZGl0aW5nT2JqLm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNFZGl0aW5nU3VydmV5RWxlbWVudCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmVkaXRpbmdPYmo7XG4gIH1cbiAgcHJpdmF0ZSBzZXRDYWxjdWF0ZWRWYWx1ZXNJbnRvUmVzdWx0KHJlc3VsdDogYW55KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjYWxWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsVmFsdWUuaW5jbHVkZUludG9SZXN1bHQgJiZcbiAgICAgICAgISFjYWxWYWx1ZS5uYW1lICYmXG4gICAgICAgIHRoaXMuZ2V0VmFyaWFibGUoY2FsVmFsdWUubmFtZSkgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdFtjYWxWYWx1ZS5uYW1lXSA9IHRoaXMuZ2V0VmFyaWFibGUoY2FsVmFsdWUubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgc3VydmV5IHJlc3VsdCBkYXRhIGFzIGFuIGFycmF5IG9mIHBsYWluIG9iamVjdHM6IHdpdGggcXVlc3Rpb24gYHRpdGxlYCwgYG5hbWVgLCBgdmFsdWVgLCBhbmQgYGRpc3BsYXlWYWx1ZWAuXG4gICAqXG4gICAqIEZvciBjb21wbGV4IHF1ZXN0aW9ucyAobGlrZSBtYXRyaXgsIGV0Yy4pIGBpc05vZGVgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCBhbmQgZGF0YSBjb250YWlucyBhcnJheSBvZiBuZXN0ZWQgb2JqZWN0cyAocm93cykuXG4gICAqXG4gICAqIFNldCBgb3B0aW9ucy5pbmNsdWRlRW1wdHlgIHRvIGBmYWxzZWAgaWYgeW91IHdhbnQgdG8gc2tpcCBlbXB0eSBhbnN3ZXJzLlxuICAgKi9cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcmVzdWx0OiBBcnJheTxhbnk+ID0gW107XG4gICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoKS5mb3JFYWNoKChxdWVzdGlvbikgPT4ge1xuICAgICAgdmFyIHJlc3VsdEl0ZW0gPSAoPFF1ZXN0aW9uPnF1ZXN0aW9uKS5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgICBpZiAoISFyZXN1bHRJdGVtKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdEl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0RmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICB2YXIgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YXJpYWJsZXNIYXNoKSB2YWx1ZXNba2V5XSA9IHRoaXMudmFyaWFibGVzSGFzaFtrZXldO1xuICAgIHRoaXMuYWRkQ2FsY3VsYXRlZFZhbHVlc0ludG9GaWx0ZXJlZFZhbHVlcyh2YWx1ZXMpO1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhbHVlc1trZXldID0gdGhpcy5nZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuICBwcml2YXRlIGFkZENhbGN1bGF0ZWRWYWx1ZXNJbnRvRmlsdGVyZWRWYWx1ZXModmFsdWVzOiB7XG4gICAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIH0pIHtcbiAgICB2YXIgY2FjbFZhbHVlcyA9IHRoaXMuY2FsY3VsYXRlZFZhbHVlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2xWYWx1ZXMubGVuZ3RoOyBpKyspXG4gICAgICB2YWx1ZXNbY2FjbFZhbHVlc1tpXS5uYW1lXSA9IGNhY2xWYWx1ZXNbaV0udmFsdWU7XG4gIH1cbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgc3VydmV5OiB0aGlzIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNLZXlzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5lZGl0aW5nT2JqKSByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZXNIYXNoKTtcbiAgICB2YXIgcHJvcHMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXNCeU9iaih0aGlzLmVkaXRpbmdPYmopO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChwcm9wc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKVxuICAgICAgcmV0dXJuIFNlcmlhbGl6ZXIuZ2V0T2JqUHJvcGVydHlWYWx1ZSh0aGlzLmVkaXRpbmdPYmosIGtleSk7XG4gICAgcmV0dXJuIHZhbHVlc0hhc2hba2V5XTtcbiAgfVxuICBwdWJsaWMgc2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICBTZXJpYWxpemVyLnNldE9ialByb3BlcnR5VmFsdWUodGhpcy5lZGl0aW5nT2JqLCBrZXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzSGFzaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZWxldGVEYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgICg8YW55PnRoaXMuZWRpdGluZ09iailba2V5XSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNIYXNoW2tleV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBjb21tZW50cyBmcm9tIHRoZSBkYXRhLlxuICAgKiBAc2VlIGRhdGFcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tbWVudHMoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5jb21tZW50UHJlZml4KSA+IDApIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB2aXNpYmxlIHBhZ2VzLiBJZiBhbGwgcGFnZXMgYXJlIHZpc2libGUsIHRoZW4gdGhpcyBwcm9wZXJ0eSByZXR1cm5zIHRoZSBzYW1lIGxpc3QgYXMgdGhlIGBwYWdlc2AgcHJvcGVydHkuXG4gICAqIEBzZWUgcGFnZXNcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZVxuICAgKiBAc2VlIFBhZ2VNb2RlbC52aXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VzKCk6IEFycmF5PFBhZ2VNb2RlbD4ge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucGFnZXM7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxQYWdlTW9kZWw+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5wYWdlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgY29udGFpbnMgbm8gcGFnZXMuIFRoZSBzdXJ2ZXkgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoID09IDA7XG4gIH1cbiAgLyoqXG4gICAqIERlcHJlY2F0ZWQuIFVzZSB0aGUgYHBhZ2VDb3VudGAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICovXG4gIGdldCBQYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlQ291bnQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN1cnZleSBwYWdlIGNvdW50LlxuICAgKiBAc2VlIHZpc2libGVQYWdlQ291bnRcbiAgICogQHNlZSBwYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgb2YgdmlzaWJsZSBwYWdlcyB3aXRoaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBwYWdlQ291bnRcbiAgICogQHNlZSB2aXNpYmxlUGFnZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXJ0ZWQgcGFnZS4gVGhpcyBwcm9wZXJ0eSB3b3JrcyBpZiB0aGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRlZFBhZ2UoKTogUGFnZU1vZGVsIHtcbiAgICB2YXIgcGFnZSA9XG4gICAgICB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcbiAgICBpZiAoISFwYWdlKSB7XG4gICAgICBwYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgIHBhZ2Uuc2V0V2FzU2hvd24odHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGN1cnJlbnQgc3VydmV5IHBhZ2UuIElmIGEgc3VydmV5IGlzIHJlbmRlcmVkLCB0aGVuIHRoaXMgcHJvcGVydHkgcmV0dXJucyBhIHBhZ2UgdGhhdCBhIHVzZXIgY2FuIHNlZS9lZGl0LlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UGFnZSgpOiBhbnkge1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICh2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIDwgMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMub25Db250YWluc1BhZ2VDYWxsYmFjayB8fFxuICAgICAgICAgICF0aGlzLm9uQ29udGFpbnNQYWdlQ2FsbGJhY2sodGhpcy5jdXJyZW50UGFnZVZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IG51bGwgJiYgdlBhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBjdXJyZW50UGFnZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgbmV3UGFnZSA9IHRoaXMuZ2V0UGFnZUJ5T2JqZWN0KHZhbHVlKTtcbiAgICBpZiAoISF2YWx1ZSAmJiAhbmV3UGFnZSkgcmV0dXJuO1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBpZiAobmV3UGFnZSAhPSBudWxsICYmIHZQYWdlcy5pbmRleE9mKG5ld1BhZ2UpIDwgMCkgcmV0dXJuO1xuICAgIGlmIChuZXdQYWdlID09IHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcbiAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2VDaGFuZ2luZyhuZXdQYWdlLCBvbGRWYWx1ZSkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSBuZXdQYWdlO1xuICAgIGlmICghIW5ld1BhZ2UpIHtcbiAgICAgIG5ld1BhZ2Uub25GaXJzdFJlbmRlcmluZygpO1xuICAgICAgbmV3UGFnZS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgICBuZXdQYWdlLnNldFdhc1Nob3duKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZUNoYW5nZWQobmV3UGFnZSwgb2xkVmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50UGFnZSwgdW5sZXNzIHRoZSBzdGFydGVkIHBhZ2UgaXMgc2hvd2luZy4gSW4gdGhpcyBjYXNlIHJldHVybnMgdGhlIHN0YXJ0ZWQgcGFnZS5cbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgKiBAc2VlIHN0YXJ0ZWRQYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjdGl2ZVBhZ2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc1N0YXJ0ZWRTdGF0ZSAmJiB0aGlzLnN0YXJ0ZWRQYWdlXG4gICAgICA/IHRoaXMuc3RhcnRlZFBhZ2VcbiAgICAgIDogdGhpcy5jdXJyZW50UGFnZTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VCeU9iamVjdCh2YWx1ZTogYW55KTogUGFnZU1vZGVsIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodmFsdWUuZ2V0VHlwZSAmJiB2YWx1ZS5nZXRUeXBlKCkgPT0gXCJwYWdlXCIpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5TmFtZShTdHJpbmcodmFsdWUpKTtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdmFyIGluZGV4ID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gdlBhZ2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdlBhZ2VzW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgY3VycmVudCBwYWdlIGluIHRoZSB2aXNpYmxlIHBhZ2VzIGFycmF5LlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UGFnZU5vKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XG4gIH1cbiAgcHVibGljIHNldCBjdXJyZW50UGFnZU5vKHZhbHVlOiBudW1iZXIpIHtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSB2UGFnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1t2YWx1ZV07XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gZGlzcGxheSBvcmRlci4gVXNlIHRoaXMgcHJvcGVydHkgdG8gcmFuZG9taXplIHF1ZXN0aW9ucy4gWW91IGNhbiByYW5kb21pemUgcXVlc3Rpb25zIG9uIGEgc3BlY2lmaWMgcGFnZS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHJhbmRvbWAgLSByYW5kb21pemUgcXVlc3Rpb25zXG4gICAqIC0gYGluaXRpYWxgIC0ga2VlcCBxdWVzdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIsIGFzIGluIGEgc3VydmV5IG1vZGVsLlxuICAgKiBAc2VlIFN1cnZleVBhZ2UucXVlc3Rpb25zT3JkZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zT3JkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25zT3JkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGlucHV0IGZvY3VzIHRvIHRoZSBmaXJzdCBxdWVzdGlvbiB3aXRoIHRoZSBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHB1YmxpYyBmb2N1c0ZpcnN0UXVlc3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNGb2N1c2luZ1F1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgaWYgKHBhZ2UpIHtcbiAgICAgIHBhZ2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgIHBhZ2UuZm9jdXNGaXJzdFF1ZXN0aW9uKCk7XG4gICAgfVxuICB9XG4gIHNjcm9sbFRvVG9wT25QYWdlQ2hhbmdlKCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgIGlmICghcGFnZSkgcmV0dXJuO1xuICAgIHBhZ2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgICBpZiAodGhpcy5mb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWMgJiYgIXRoaXMuaXNGb2N1c2luZ1F1ZXN0aW9uKSB7XG4gICAgICBwYWdlLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdXJ2ZXkgc3RhdGU6XG4gICAqXG4gICAqIC0gYGxvYWRpbmdgIC0gdGhlIHN1cnZleSBpcyBiZWluZyBsb2FkZWQgZnJvbSBKU09OLFxuICAgKiAtIGBlbXB0eWAgLSB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGN1cnJlbnQgc3VydmV5LFxuICAgKiAtIGBzdGFydGluZ2AgLSB0aGUgc3VydmV5J3Mgc3RhcnQgcGFnZSBpcyBkaXNwbGF5ZWQsXG4gICAqIC0gYHJ1bm5pbmdgIC0gYSByZXNwb25kZW50IGlzIGFuc3dlcmluZyBzdXJ2ZXkgcXVlc3Rpb25zIHJpZ2h0IG5vdyxcbiAgICogLSBgcHJldmlld2AgLSBhIHJlc3BvbmRlbnQgaXMgcHJldmlld2luZyBhbnN3ZXJlZCBxdWVzdGlvbnMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHN1cnZleSAoc2VlIFtleGFtcGxlXShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnk/aWQ9c3VydmV5LXNob3dwcmV2aWV3KSksXG4gICAqIC0gYGNvbXBsZXRlZGAgLSBhIHJlc3BvbmRlbnQgaGFzIGNvbXBsZXRlZCB0aGUgc3VydmV5IGFuZCBzdWJtaXR0ZWQgdGhlIHJlc3VsdHMuXG4gICAqXG4gICAqIERldGFpbHM6IFtQcmV2aWV3IFN0YXRlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeSNzdGF0ZXMpXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSByZXR1cm4gXCJsb2FkaW5nXCI7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQpIHJldHVybiBcImNvbXBsZXRlZFwiO1xuICAgIGlmICh0aGlzLmlzQ29tcGxldGVkQmVmb3JlKSByZXR1cm4gXCJjb21wbGV0ZWRiZWZvcmVcIjtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc0Rlc2lnbk1vZGUgJiZcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSAmJlxuICAgICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSAmJlxuICAgICAgdGhpcy5zdGFydGVkUGFnZVxuICAgIClcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPyBcInByZXZpZXdcIiA6IFwiZW1wdHlcIjtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA/IFwicnVubmluZ1wiIDogXCJlbXB0eVwiO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgaXNDb21wbGV0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNDb21wbGV0ZWRcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1Nob3dpbmdQcmV2aWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dpbmdQcmV2aWV3XCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc1Nob3dpbmdQcmV2aWV3KHZhbDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTaG93aW5nUHJldmlld1wiLCB2YWwpO1xuICAgIHRoaXMub25TaG93aW5nUHJldmlld0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1N0YXJ0ZWRTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNTdGFydGVkU3RhdGVcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzU3RhcnRlZFN0YXRlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU3RhcnRlZFN0YXRlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb21wbGV0ZWRCZWZvcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVkQmVmb3JlXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0NvbXBsZXRlZEJlZm9yZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZEJlZm9yZVwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNMb2FkaW5nXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0xvYWRpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNMb2FkaW5nXCIsIHZhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZFN0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGxldGVkU3RhdGVWYWx1ZTtcbiAgfVxuICBnZXQgY29tcGxldGVkU3RhdGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGxldGVkU3RhdGVUZXh0VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENvbXBsZXRlZFN0YXRlKHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuY29tcGxldGVkU3RhdGVWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgaWYgKHZhbHVlID09IFwic2F2aW5nXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFcIik7XG4gICAgICBpZiAodmFsdWUgPT0gXCJlcnJvclwiKSB0ZXh0ID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJzYXZpbmdEYXRhRXJyb3JcIik7XG4gICAgICBpZiAodmFsdWUgPT0gXCJzdWNjZXNzXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFTdWNjZXNzXCIpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBsZXRlZFN0YXRlVGV4dFZhbHVlID0gdGV4dDtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzdXJ2ZXkgZGF0YSBhbmQgc3RhdGUuIElmIHRoZSBzdXJ2ZXkgaGFzIGEgYGNvbXBsZXRlZGAgc3RhdGUsIGl0IHdpbGwgZ2V0IGEgYHJ1bm5pbmdgIHN0YXRlLlxuICAgKiBAcGFyYW0gY2xlYXJEYXRhIGNsZWFyIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBnb3RvRmlyc3RQYWdlIG1ha2UgdGhlIGZpcnN0IHBhZ2UgYXMgYSBjdXJyZW50IHBhZ2UuXG4gICAqIEBzZWUgZGF0YVxuICAgKiBAc2VlIHN0YXRlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICovXG4gIHB1YmxpYyBjbGVhcihjbGVhckRhdGE6IGJvb2xlYW4gPSB0cnVlLCBnb3RvRmlyc3RQYWdlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChjbGVhckRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnZhcmlhYmxlc0hhc2ggPSB7fTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3BlbnQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS50aW1lU3BlbnQgPSAwO1xuICAgICAgdGhpcy5wYWdlc1tpXS5zZXRXYXNTaG93bihmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnBhc3NlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0NvbXBsZXRlZEJlZm9yZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkO1xuICAgIGlmIChnb3RvRmlyc3RQYWdlICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1swXTtcbiAgICB9XG4gICAgaWYgKGNsZWFyRGF0YSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXNXaXRoRGVmYXVsdHMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIG1lcmdlVmFsdWVzKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcbiAgICBpZiAoIWRlc3QgfHwgIXNyYykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgZGVzdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHNyY1trZXldO1xuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoIWRlc3Rba2V5XSkgZGVzdFtrZXldID0ge307XG4gICAgICAgIHRoaXMubWVyZ2VWYWx1ZXModmFsdWUsIGRlc3Rba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZXNXaXRoRGVmYXVsdHMoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMuaXNMb2FkaW5nKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYWdlc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBxdWVzdGlvbnNbal0udXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUN1c3RvbVdpZGdldHMocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKCFwYWdlKSByZXR1cm47XG4gICAgcGFnZS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdpbmcobmV3VmFsdWU6IFBhZ2VNb2RlbCwgb2xkVmFsdWU6IFBhZ2VNb2RlbCkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgb2xkQ3VycmVudFBhZ2U6IG9sZFZhbHVlLFxuICAgICAgbmV3Q3VycmVudFBhZ2U6IG5ld1ZhbHVlLFxuICAgICAgYWxsb3dDaGFuZ2luZzogdHJ1ZSxcbiAgICAgIGlzTmV4dFBhZ2U6IHRoaXMuaXNOZXh0UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgICAgaXNQcmV2UGFnZTogdGhpcy5pc1ByZXZQYWdlKG5ld1ZhbHVlLCBvbGRWYWx1ZSksXG4gICAgfTtcbiAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2luZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93Q2hhbmdpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdlZChuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKSB7XG4gICAgY29uc3QgaXNOZXh0UGFnZTogYm9vbGVhbiA9IHRoaXMuaXNOZXh0UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIGlmIChpc05leHRQYWdlKSB7XG4gICAgICBvbGRWYWx1ZS5wYXNzZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgb2xkQ3VycmVudFBhZ2U6IG9sZFZhbHVlLFxuICAgICAgbmV3Q3VycmVudFBhZ2U6IG5ld1ZhbHVlLFxuICAgICAgaXNOZXh0UGFnZTogaXNOZXh0UGFnZSxcbiAgICAgIGlzUHJldlBhZ2U6IHRoaXMuaXNQcmV2UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgaXNOZXh0UGFnZShuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFuZXdWYWx1ZSB8fCAhb2xkVmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3VmFsdWUudmlzaWJsZUluZGV4ID09IG9sZFZhbHVlLnZpc2libGVJbmRleCArIDE7XG4gIH1cbiAgcHJpdmF0ZSBpc1ByZXZQYWdlKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld1ZhbHVlIHx8ICFvbGRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXdWYWx1ZS52aXNpYmxlSW5kZXggKyAxID09IG9sZFZhbHVlLnZpc2libGVJbmRleDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgdGhhdCBhIHVzZXIgbWFkZSB3aGlsZSBnb2luZyB0aHJvdWdoIHRoZSBzdXJ2ZXkuXG4gICAqIEl0IGRlcGVuZHMgZnJvbSBwcm9ncmVzc0JhclR5cGUgcHJvcGVydHlcbiAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICogQHNlZSBwcm9ncmVzc1ZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodGhpcy5wcm9ncmVzc0JhclR5cGUgIT09IFwicGFnZXNcIikge1xuICAgICAgdmFyIGluZm8gPSB0aGlzLmdldFByb2dyZXNzSW5mbygpO1xuICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NCYXJUeXBlID09PSBcInJlcXVpcmVkUXVlc3Rpb25zXCIpIHtcbiAgICAgICAgcmV0dXJuIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID4gMVxuICAgICAgICAgID8gTWF0aC5jZWlsKFxuICAgICAgICAgICAgICAoaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCAqIDEwMCkgL1xuICAgICAgICAgICAgICAgIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50XG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAxMDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5mby5xdWVzdGlvbkNvdW50ID4gMVxuICAgICAgICA/IE1hdGguY2VpbCgoaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKiAxMDApIC8gaW5mby5xdWVzdGlvbkNvdW50KVxuICAgICAgICA6IDEwMDtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoaW5kZXggKiAxMDApIC8gdGhpcy52aXNpYmxlUGFnZUNvdW50KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgdGhhdCBhIHVzZXIgbWFkZSB3aGlsZSBnb2luZyB0aHJvdWdoIHRoZSBzdXJ2ZXkuXG4gICAqIEl0IGRlcGVuZHMgZnJvbSBwcm9ncmVzc0JhclR5cGUgcHJvcGVydHlcbiAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwcm9ncmVzc1ZhbHVlXCIsIDApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgKGkuZS4sICdQcmV2JywgJ05leHQnLCBvciAnQ29tcGxldGUnIGFuZCAnUHJldmlldycpIHBvc2l0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwibm9uZVwiO1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiBcIm5vbmVcIjtcbiAgICBpZiAocGFnZS5uYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkgPT09IFwic2hvd1wiKSB7XG4gICAgICByZXR1cm4gXCJib3R0b21cIjtcbiAgICB9XG4gICAgaWYgKHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ID09PSBcImhpZGVcIikge1xuICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG93TmF2aWdhdGlvbkJ1dHRvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBidXR0b25zIChpLmUuLCAnUHJldicsICdOZXh0Jywgb3IgJ0NvbXBsZXRlJyBhbmQgJ1ByZXZpZXcnKSBhcmUgc2hvd3Mgb24gdG9wLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT24oXCJ0b3BcIik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBidXR0b25zIChpLmUuLCAnUHJldicsICdOZXh0Jywgb3IgJ0NvbXBsZXRlJyBhbmQgJ1ByZXZpZXcnKSBhcmUgc2hvd3Mgb24gYm90dG9tLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT24oXCJib3R0b21cIik7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uKGJ1dHRvblBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gdGhpcy5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZztcbiAgICByZXR1cm4gcmVzID09IFwiYm90aFwiIHx8IHJlcyA9PSBidXR0b25Qb3NpdGlvbjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBpbiBlZGl0IG1vZGUuXG4gICAqIEBzZWUgbW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0VkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gXCJlZGl0XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBsZXRlQnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICAoIXRoaXMuaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlIHx8IHRoaXMuc3RhdGUgPT0gXCJwcmV2aWV3XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUHJldmlld0J1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSAmJlxuICAgICAgdGhpcy5pc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgIHRoaXMuc3RhdGUgPT0gXCJydW5uaW5nXCJcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDYW5jZWxQcmV2aWV3QnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICB0aGlzLmlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAmJlxuICAgICAgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgaXMgaW4gZGlzcGxheSBtb2RlIG9yIGluIHByZXZpZXcgbW9kZS5cbiAgICogQHNlZSBtb2RlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gXCJkaXNwbGF5XCIgfHwgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVXBkYXRlVmFsdWVUZXh0T25UeXBpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFVwZGF0ZU1vZGUgPT0gXCJvblR5cGluZ1wiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGlzIGluIGRlc2lnbiBtb2RlLiBJdCBpcyB1c2VkIGJ5IFN1cnZleUpTIEVkaXRvci5cbiAgICogQHNlZSBzZXREZXNpZ25Nb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRGVzaWduTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEZXNpZ25Nb2RlO1xuICB9XG4gIHByaXZhdGUgX2lzRGVzaWduTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0cyB0aGUgc3VydmV5IGludG8gZGVzaWduIG1vZGUuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdHJ1ZSB0byBzZXQgdGhlIHN1cnZleSBpbnRvIHRoZSBkZXNpZ24gbW9kZS5cbiAgICovXG4gIHB1YmxpYyBzZXREZXNpZ25Nb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNEZXNpZ25Nb2RlID0gdmFsdWU7XG4gICAgdGhpcy5vblF1ZXN0aW9uc09uUGFnZU1vZGVDaGFuZ2VkKFwic3RhbmRhcmRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIHNob3cgYWxsIGVsZW1lbnRzIGluIHRoZSBzdXJ2ZXksIHJlZ2FyZGxlc3MgdGhlaXIgdmlzaWJpbGl0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0ludmlzaWJsZUVsZW1lbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SW52aXNpYmxlRWxlbWVudHNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0ludmlzaWJsZUVsZW1lbnRzKHZhbDogYm9vbGVhbikge1xuICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dJbnZpc2libGVFbGVtZW50c1wiLCB2YWwpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkodmlzUGFnZXMpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQWxsRWxlbWVudHNWaXNpYmlsaXR5KHZpc1BhZ2VzOiBBcnJheTxQYWdlTW9kZWw+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICBwYWdlLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICBpZiAodmlzUGFnZXMuaW5kZXhPZihwYWdlKSA+IC0xICE9IHBhZ2UuaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMub25QYWdlVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICB2aXNpYmxlOiBwYWdlLmlzVmlzaWJsZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnNob3dJbnZpc2libGVFbGVtZW50cztcbiAgfVxuICBwdWJsaWMgZ2V0IGFyZUVtcHR5RWxlbWVudHNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNTaG93aW5nUHJldmlldyAmJlxuICAgICAgdGhpcy5zaG93UHJldmlld0JlZm9yZUNvbXBsZXRlID09IFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgYSB1c2VyIGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgc3VydmV5IGluIHRoaXMgYnJvd3NlciBhbmQgdGhlcmUgaXMgYSBjb29raWUgYWJvdXQgaXQuIFN1cnZleSBnb2VzIHRvIGBjb21wbGV0ZWRgIHN0YXRlIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC5cbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgc2V0Q29va2llXG4gICAqIEBzZWUgZGVsZXRlQ29va2llXG4gICAqIEBzZWUgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzQ29va2llKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb29raWVOYW1lIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llO1xuICAgIHJldHVybiBjb29raWVzICYmIGNvb2tpZXMuaW5kZXhPZih0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlXCIpID4gLTE7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY29va2llIHdpdGggYGNvb2tpZU5hbWVgIGluIHVzZXIncyBicm93c2VyLiBJdCBpcyBkb25lIGF1dG9tYXRpY2FsbHkgb24gc3VydmV5IGNvbXBsZXRlIGlmIHRoZSBgY29va2llTmFtZWAgcHJvcGVydHkgdmFsdWUgaXMgbm90IGVtcHR5LlxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICogQHNlZSBoYXNDb29raWVcbiAgICogQHNlZSBkZWxldGVDb29raWVcbiAgICovXG4gIHB1YmxpYyBzZXRDb29raWUoKSB7XG4gICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgZG9jdW1lbnQuY29va2llID1cbiAgICAgIHRoaXMuY29va2llTmFtZSArIFwiPXRydWU7IGV4cGlyZXM9RnJpLCAzMSBEZWMgOTk5OSAwOjA6MCBHTVRcIjtcbiAgfVxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29va2llIHdpdGggYGNvb2tpZU5hbWVgIGZyb20gdGhlIGJyb3dzZXIuXG4gICAqIEBzZWUgY29va2llTmFtZVxuICAgKiBAc2VlIGhhc0Nvb2tpZVxuICAgKiBAc2VlIHNldENvb2tpZVxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUNvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuO1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IHRoaXMuY29va2llTmFtZSArIFwiPTtcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIHN1cnZleSBtdXN0IGlnbm9yZSB2YWxpZGF0aW9uIGxpa2UgcmVxdWlyZWQgcXVlc3Rpb25zIGFuZCBvdGhlcnMsIG9uIGBuZXh0UGFnZWAgYW5kIGBjb21wbGV0ZUxhc3RQYWdlYCBmdW5jdGlvbiBjYWxscy4gVGhlIGRlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBtb2RlXG4gICAqL1xuICBwdWJsaWMgaWdub3JlVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogTmF2aWdhdGVzIHVzZXIgdG8gdGhlIG5leHQgcGFnZS5cbiAgICpcbiAgICogUmV0dXJucyBgZmFsc2VgIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAqXG4gICAqIC0gaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlLlxuICAgKiAtIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgZXJyb3JzIChmb3IgZXhhbXBsZSwgYSByZXF1aXJlZCBxdWVzdGlvbiBpcyBlbXB0eSkuXG4gICAqIEBzZWUgaXNDdXJyZW50UGFnZUhhc0Vycm9yc1xuICAgKiBAc2VlIHByZXZQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKi9cbiAgcHVibGljIG5leHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTGFzdFBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JzT25OYXZpZ2F0ZShkb0NvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaWdub3JlVmFsaWRhdGlvbiB8fCAhdGhpcy5pc0VkaXRNb2RlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGZ1bmMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUoZG9Db21wbGV0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25Db21wbGV0ZVwiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JzKHRydWUsIHRydWUsIGZ1bmMpICE9PSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzQ3VycmVudFBhZ2VFcnJvcnMoZnVuYykgIT09IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zOiBBcnJheTxRdWVzdGlvbj47XG4gIHByaXZhdGUgY2hlY2tGb3JBc3luY1F1ZXN0aW9uVmFsaWRhdGlvbihcbiAgICBxdWVzdGlvbnM6IEFycmF5PFF1ZXN0aW9uPixcbiAgICBmdW5jOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIHRoaXMuY2xlYXJBc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1J1bm5pbmdWYWxpZGF0b3JzKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNRdWVzdGlvblZhbGlkYXRvcnMoZnVuYywgaGFzRXJyb3JzKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMucHVzaChxdWVzdGlvbnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMubGVuZ3RoID4gMDtcbiAgfVxuICBwcml2YXRlIGNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCkge1xuICAgIGlmICghIXRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKSB7XG4gICAgICB2YXIgYXN5blF1ZXN0aW9ucyA9IHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3luUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzeW5RdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucyA9IFtdO1xuICB9XG4gIHByaXZhdGUgb25Db21wbGV0ZWRBc3luY1F1ZXN0aW9uVmFsaWRhdG9ycyhcbiAgICBmdW5jOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkLFxuICAgIGhhc0Vycm9yczogYm9vbGVhblxuICApIHtcbiAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICB0aGlzLmNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCk7XG4gICAgICBmdW5jKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYXN5blF1ZXN0aW9ucyA9IHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzeW5RdWVzdGlvbnNbaV0uaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuO1xuICAgIH1cbiAgICBmdW5jKGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgZXJyb3JzLCBmb3IgZXhhbXBsZSwgdGhlIHJlcXVpcmVkIHF1ZXN0aW9uIGlzIGVtcHR5IG9yIGEgcXVlc3Rpb24gdmFsaWRhdGlvbiBpcyBmYWlsZWQuXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNDdXJyZW50UGFnZUhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0lzQ3VycmVudFBhZ2VIYXNFcnJvcnMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgYW55IGVycm9yLiBJZiB0aGVyZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBpbiBhbiBleHByZXNzaW9uLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSBgb25Bc3luY1ZhbGlkYXRpb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gb25Bc3luY1ZhbGlkYXRpb24gdXNlIHRoaXMgcGFyYW1ldGVyIGlmIHlvdSB1c2UgYXN5bmMgZnVuY3Rpb25zIGluIHlvdXIgZXhwcmVzc2lvbnMuIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBoYXNFcnJvcnMgdmFsdWUgZXF1YWxzIHRvIGB0cnVlYCBvciBgZmFsc2VgLlxuICAgKiBAc2VlIGhhc1BhZ2VFcnJvcnNcbiAgICogQHNlZSBoYXNFcnJvcnNcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGhhc0N1cnJlbnRQYWdlRXJyb3JzKFxuICAgIG9uQXN5bmNWYWxpZGF0aW9uPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQYWdlRXJyb3JzKHVuZGVmaW5lZCwgb25Bc3luY1ZhbGlkYXRpb24pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgYSBwYWdlIGNvbnRhaW5zIGFuIGVycm9yLiBJZiB0aGVyZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBpbiBhbiBleHByZXNzaW9uLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2Vjb25kIGBvbkFzeW5jVmFsaWRhdGlvbmAgcGFyYW1ldGVyLCAgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gcGFnZSB0aGUgcGFnZSB0aGF0IHlvdSB3YW50IHRvIHZhbGlkYXRlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBgYWN0aXZlUGFnZWAgaXMgdXNpbmdcbiAgICogQHBhcmFtIG9uQXN5bmNWYWxpZGF0aW9uIHVzZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgdXNlIGFzeW5jIGZ1bmN0aW9ucyBpbiB5b3VyIGV4cHJlc3Npb25zLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaGFzRXJyb3JzIHZhbHVlIGVxdWFscyB0byBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHNlZSBoYXNDdXJyZW50UGFnZUVycm9yc1xuICAgKiBAc2VlIGhhc0Vycm9yc1xuICAgKiBAc2VlIGFjdGl2ZVBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGhhc1BhZ2VFcnJvcnMoXG4gICAgcGFnZT86IFBhZ2VNb2RlbCxcbiAgICBvbkFzeW5jVmFsaWRhdGlvbj86IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwYWdlKSB7XG4gICAgICBwYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgIH1cbiAgICBpZiAoIXBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5jaGVja0lzUGFnZUhhc0Vycm9ycyhwYWdlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFvbkFzeW5jVmFsaWRhdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNoZWNrRm9yQXN5bmNRdWVzdGlvblZhbGlkYXRpb24oXG4gICAgICBwYWdlLnF1ZXN0aW9ucyxcbiAgICAgIChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IG9uQXN5bmNWYWxpZGF0aW9uKGhhc0Vycm9ycylcbiAgICApXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIGFueSBvZiB0aGUgc3VydmV5IHBhZ2VzIGNvbnRhaW5zIGVycm9ycy4gSWYgdGhlcmUgaXMgYW4gYXN5bmMgZnVuY3Rpb24gaW4gYW4gZXhwcmVzc2lvbiwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAgdmFsdWUuXG4gICAqIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCB1c2UgIHRoZSB0aGlyZCBgb25Bc3luY1ZhbGlkYXRpb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gZmlyZUNhbGxiYWNrIHNldCBpdCB0byBgdHJ1ZWAsIHRvIHNob3cgZXJyb3JzIGluIFVJLlxuICAgKiBAcGFyYW0gZm9jdXNPbkZpcnN0RXJyb3Igc2V0IGl0IHRvIGB0cnVlYCB0byBmb2N1cyBvbiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBkb2Vzbid0IHBhc3MgdGhlIHZhbGlkYXRpb24gYW5kIG1ha2UgdGhlIHBhZ2UsIHdoZXJlIHRoZSBxdWVzdGlvbiBpcyBsb2NhdGVkLCB0aGUgY3VycmVudC5cbiAgICogQHBhcmFtIG9uQXN5bmNWYWxpZGF0aW9uIHVzZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgdXNlIGFzeW5jIGZ1bmN0aW9ucyBpbiB5b3VyIGV4cHJlc3Npb25zLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaGFzRXJyb3JzIHZhbHVlIGVxdWFscyB0byBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHNlZSBoYXNDdXJyZW50UGFnZUVycm9yc1xuICAgKiBAc2VlIGhhc1BhZ2VFcnJvcnNcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSxcbiAgICBmb2N1c09uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9uQXN5bmNWYWxpZGF0aW9uPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoISFvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgZmlyZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgdmFyIGZpcnN0RXJyb3JQYWdlID0gbnVsbDtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZpc1BhZ2VzW2ldLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIGZhbHNlKSkge1xuICAgICAgICBpZiAoIWZpcnN0RXJyb3JQYWdlKSBmaXJzdEVycm9yUGFnZSA9IHZpc1BhZ2VzW2ldO1xuICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9jdXNPbkZpcnN0RXJyb3IgJiYgISFmaXJzdEVycm9yUGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGZpcnN0RXJyb3JQYWdlO1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IGZpcnN0RXJyb3JQYWdlLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbnNbaV0uZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBxdWVzdGlvbnNbaV0uZm9jdXModHJ1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlcyB8fCAhb25Bc3luY1ZhbGlkYXRpb24pIHJldHVybiByZXM7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tGb3JBc3luY1F1ZXN0aW9uVmFsaWRhdGlvbihcbiAgICAgIHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCksXG4gICAgICAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiBvbkFzeW5jVmFsaWRhdGlvbihoYXNFcnJvcnMpXG4gICAgKVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHN1cnZleSBlbGVtZW50cyAocGFnZXMsIHBhbmVscywgYW5kIHF1ZXN0aW9ucykgaGF2ZSB1bmlxdWUgcXVlc3Rpb24gbmFtZXMuXG4gICAqIFlvdSBjYW4gY2hlY2sgZm9yIHVuaXF1ZSBuYW1lcyBmb3IgaW5kaXZpZHVhbCBwYWdlIGFuZCBwYW5lbCAoYW5kIGFsbCB0aGVpciBlbGVtZW50cykgb3IgYSBxdWVzdGlvbi5cbiAgICogSWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGEgc3VydmV5IGNoZWNrcyB0aGF0IGFsbCBpdHMgZWxlbWVudHMgaGF2ZSB1bmlxdWUgbmFtZXMuXG4gICAqIEBwYXJhbSBlbGVtZW50IHBhZ2UsIHBhbmVsIG9yIHF1ZXN0aW9uLCBpdCBpcyBgbnVsbGAgYnkgZGVmYXVsdCwgdGhhdCBtZWFucyBhbGwgc3VydmV5IGVsZW1lbnRzIHdpbGwgYmUgY2hlY2tlZFxuICAgKi9cbiAgcHVibGljIGVuc3VyZVVuaXF1ZU5hbWVzKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50ID0gbnVsbCkge1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZU5hbWUodGhpcy5wYWdlc1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5zdXJlVW5pcXVlTmFtZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVOYW1lKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQuaXNQYWdlKSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVBhZ2VOYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVBhbmVsTmFtZShlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaXNQYWdlIHx8IGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgdmFyIGVsZW1lbnRzID0gKDxJUGFuZWw+ZWxlbWVudCkuZWxlbWVudHM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlVW5pcXVlTmFtZXMoZWxlbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVF1ZXN0aW9uTmFtZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVQYWdlTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgICAgZWxlbWVudCxcbiAgICAgIChuYW1lOiBzdHJpbmcpOiBJU3VydmV5RWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VCeU5hbWUobmFtZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGVuc3VyZVVuaXF1ZVBhbmVsTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgICAgZWxlbWVudCxcbiAgICAgIChuYW1lOiBzdHJpbmcpOiBJU3VydmV5RWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsQnlOYW1lKG5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVRdWVzdGlvbk5hbWUoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZShcbiAgICAgIGVsZW1lbnQsXG4gICAgICAobmFtZTogc3RyaW5nKTogSVN1cnZleUVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZW5zdXJlVW5pcXVlRWxlbWVudE5hbWUoXG4gICAgZWxlbWVudDogSVN1cnZleUVsZW1lbnQsXG4gICAgZ2V0RWxlbWVudEJ5TmFtZTogKG5hbWU6IHN0cmluZykgPT4gSVN1cnZleUVsZW1lbnRcbiAgKSB7XG4gICAgdmFyIGV4aXN0aW5nRWxlbWVudCA9IGdldEVsZW1lbnRCeU5hbWUoZWxlbWVudC5uYW1lKTtcbiAgICBpZiAoIWV4aXN0aW5nRWxlbWVudCB8fCBleGlzdGluZ0VsZW1lbnQgPT0gZWxlbWVudCkgcmV0dXJuO1xuICAgIHZhciBuZXdOYW1lID0gdGhpcy5nZXROZXdOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgd2hpbGUgKCEhZ2V0RWxlbWVudEJ5TmFtZShuZXdOYW1lKSkge1xuICAgICAgdmFyIG5ld05hbWUgPSB0aGlzLmdldE5ld05hbWUoZWxlbWVudC5uYW1lKTtcbiAgICB9XG4gICAgZWxlbWVudC5uYW1lID0gbmV3TmFtZTtcbiAgfVxuICBwcml2YXRlIGdldE5ld05hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcG9zID0gbmFtZS5sZW5ndGg7XG4gICAgd2hpbGUgKHBvcyA+IDAgJiYgbmFtZVtwb3MgLSAxXSA+PSBcIjBcIiAmJiBuYW1lW3BvcyAtIDFdIDw9IFwiOVwiKSB7XG4gICAgICBwb3MtLTtcbiAgICB9XG4gICAgdmFyIGJhc2UgPSBuYW1lLnN1YnN0cigwLCBwb3MpO1xuICAgIHZhciBudW0gPSAwO1xuICAgIGlmIChwb3MgPCBuYW1lLmxlbmd0aCkge1xuICAgICAgbnVtID0gcGFyc2VJbnQobmFtZS5zdWJzdHIocG9zKSk7XG4gICAgfVxuICAgIG51bSsrO1xuICAgIHJldHVybiBiYXNlICsgbnVtO1xuICB9XG4gIHByaXZhdGUgY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKFxuICAgIGlzRm9jdXNlT25GaXJzdEVycm9yOiBib29sZWFuID0gdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrSXNQYWdlSGFzRXJyb3JzKHRoaXMuYWN0aXZlUGFnZSwgaXNGb2N1c2VPbkZpcnN0RXJyb3IpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tJc1BhZ2VIYXNFcnJvcnMoXG4gICAgcGFnZTogUGFnZU1vZGVsLFxuICAgIGlzRm9jdXNlT25GaXJzdEVycm9yOiBib29sZWFuID0gdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChpc0ZvY3VzZU9uRmlyc3RFcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpc0ZvY3VzZU9uRmlyc3RFcnJvciA9IHRoaXMuZm9jdXNPbkZpcnN0RXJyb3I7XG4gICAgfVxuICAgIGlmICghcGFnZSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHJlcyA9IHBhZ2UuaGFzRXJyb3JzKHRydWUsIGlzRm9jdXNlT25GaXJzdEVycm9yKTtcbiAgICB0aGlzLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UocGFnZSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKHRoaXMub25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlLmlzRW1wdHkgfHwgIXBhZ2UpIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zT25QYWdlID0gcGFnZS5xdWVzdGlvbnM7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICB2YXIgZXJyb3JzID0gbmV3IEFycmF5PFN1cnZleUVycm9yPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zT25QYWdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc09uUGFnZVtpXTtcbiAgICAgIGlmIChxLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKHEpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHEuZXJyb3JzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2gocS5lcnJvcnNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnMsXG4gICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB1c2VyIHRvIGEgcHJldmlvdXMgcGFnZS4gSWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgZmlyc3QgcGFnZSwgYHByZXZQYWdlYCByZXR1cm5zIGBmYWxzZWAuIGBwcmV2UGFnZWAgZG9lcyBub3QgcGVyZm9ybSBhbnkgY2hlY2tzLCByZXF1aXJlZCBxdWVzdGlvbnMgY2FuIGJlIGVtcHR5LlxuICAgKiBAc2VlIGlzRmlyc3RQYWdlXG4gICAqL1xuICBwdWJsaWMgcHJldlBhZ2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4IC0gMV07XG4gIH1cbiAgLyoqXG4gICAqIENvbXBsZXRlcyB0aGUgc3VydmV5LCBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IG9uZS4gSXQgcmV0dXJucyBgZmFsc2VgIGlmIHRoZSBsYXN0IHBhZ2UgaGFzIGVycm9ycy5cbiAgICogSWYgdGhlIGxhc3QgcGFnZSBoYXMgbm8gZXJyb3JzLCBgY29tcGxldGVMYXN0UGFnZWAgY2FsbHMgYGRvQ29tcGxldGVgIGFuZCByZXR1cm5zIGB0cnVlYC5cbiAgICogQHNlZSBpc0N1cnJlbnRQYWdlSGFzRXJyb3JzXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICogQHNlZSBkb0NvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGVMYXN0UGFnZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUodHJ1ZSk7XG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5jYW5jZWxQcmV2aWV3KCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc05hdmlnYXRpb25CdXR0b25QcmVzc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBuYXZpZ2F0aW9uTW91c2VEb3duKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNldE5hdmlnYXRpb25CdXR0b24oKSB7XG4gICAgdGhpcy5pc05hdmlnYXRpb25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNob3dzIHByZXZpZXcgZm9yIHRoZSBzdXJ2ZXkuIFN3aXRjaGVzIHRoZSBzdXJ2ZXkgdG8gdGhlIFwicHJldmlld1wiIHN0YXRlLlxuICAgKlxuICAgKiBEZXRhaWxzOiBbUHJldmlldyBTdGF0ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnkjc3RhdGVzLXByZXZpZXcpXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIGNhbmNlbFByZXZpZXdcbiAgICogQHNlZSBzdGF0ZVxuICAgKiBAc2VlIHByZXZpZXdUZXh0XG4gICAqIEBzZWUgZWRpdFRleHRcbiAgICovXG4gIHB1YmxpYyBzaG93UHJldmlldygpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIGlmICh0aGlzLmhhc0Vycm9yc09uTmF2aWdhdGUodHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24odHJ1ZSwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgb3B0aW9ucyA9IHsgYWxsb3dTaG93UHJldmlldzogdHJ1ZSB9O1xuICAgIHRoaXMub25TaG93aW5nUHJldmlldy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaXNTaG93aW5nUHJldmlldyA9IG9wdGlvbnMuYWxsb3dTaG93UHJldmlldztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQ2FuY2VscyBwcmV2aWV3IGFuZCBzd2l0Y2hlcyBiYWNrIHRvIHRoZSBcInJ1bm5pbmdcIiBzdGF0ZS5cbiAgICpcbiAgICogRGV0YWlsczogW1ByZXZpZXcgU3RhdGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5I3N0YXRlcy1wcmV2aWV3KVxuICAgKiBAcGFyYW0gY3VyUGFnZSAtIEEgbmV3IGN1cnJlbnQgcGFnZS4gSWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQgdGhlbiB0aGUgbGFzdCBwYWdlIGJlY29tZXMgdGhlIGN1cnJlbnQuXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIHNob3dQcmV2aWV3XG4gICAqIEBzZWUgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3KGN1clBhZ2U6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuO1xuICAgIHRoaXMuaXNTaG93aW5nUHJldmlldyA9IGZhbHNlO1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShjdXJQYWdlKSAmJiB0aGlzLnZpc2libGVQYWdlQ291bnQgPiAwKSB7XG4gICAgICBjdXJQYWdlID0gdGhpcy52aXNpYmxlUGFnZUNvdW50IC0gMTtcbiAgICB9XG4gICAgaWYgKGN1clBhZ2UgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBjdXJQYWdlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2FuY2VsUHJldmlld0J5UGFnZShwYW5lbDogSVBhbmVsKTogYW55IHtcbiAgICB0aGlzLmNhbmNlbFByZXZpZXcoKDxhbnk+cGFuZWwpW1wib3JpZ2luYWxQYWdlXCJdKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9DdXJyZW50UGFnZUNvbXBsZXRlKGRvQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlcikgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uQnV0dG9uKCk7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3JzT25OYXZpZ2F0ZShkb0NvbXBsZXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUoZG9Db21wbGV0ZSk7XG4gIH1cbiAgcHJpdmF0ZSBkb0N1cnJlbnRQYWdlQ29tcGxldGVDb3JlKGRvQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24oZG9Db21wbGV0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZG9Db21wbGV0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5wYXNzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9OZXh0UGFnZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogT2Jzb2xldGUuIFVzZSB0aGUgYHF1ZXN0aW9uc09uUGFnZU1vZGVgIHByb3BlcnR5IGluc3RlYWQuXG4gICAqIEBzZWUgcXVlc3Rpb25zT25QYWdlTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBpc1NpbmdsZVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zT25QYWdlTW9kZSA9PSBcInNpbmdsZVBhZ2VcIjtcbiAgfVxuICBwdWJsaWMgc2V0IGlzU2luZ2xlUGFnZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uc09uUGFnZU1vZGUgPSB2YWwgPyBcInNpbmdsZVBhZ2VcIiA6IFwic3RhbmRhcmRcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgaG93IHRoZSBzdXJ2ZXkgY29tYmluZXMgcXVlc3Rpb25zLCBwYW5lbHMsIGFuZCBwYWdlcy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHNpbmdsZVBhZ2VgIC0gY29tYmluZSBhbGwgc3VydmV5IHBhZ2VzIGluIGEgc2luZ2xlIHBhZ2UuIFBhZ2VzIHdpbGwgYmUgY29udmVydGVkIHRvIHBhbmVscy5cbiAgICogLSBgcXVlc3Rpb25QZXJQYWdlYCAtIHNob3cgb25lIHF1ZXN0aW9uIHBlciBwYWdlLiBTdXJ2ZXkgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBwYWdlIGZvciBldmVyeSBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zT25QYWdlTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIsIFwic3RhbmRhcmRcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbnNPblBhZ2VNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT25QYWdlTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgZmlyc3Qgc3VydmV5IHBhZ2UgaXMgYSBzdGFydCBwYWdlLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBgdHJ1ZWAsIHRvIG1ha2UgdGhlIGZpcnN0IHBhZ2UgYSBzdGFydGluZyBwYWdlLlxuICAgKiBBbiBlbmQgdXNlciBjYW5ub3QgbmF2aWdhdGUgdG8gdGhlIHN0YXJ0IHBhZ2UgYW5kIHRoZSBzdGFydCBwYWdlIGRvZXMgbm90IGFmZmVjdCBhIHN1cnZleSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgZmlyc3RQYWdlSXNTdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJmaXJzdFBhZ2VJc1N0YXJ0ZWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgZmlyc3RQYWdlSXNTdGFydGVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZpcnN0UGFnZUlzU3RhcnRlZFwiLCB2YWwpO1xuICB9XG4gIGlzUGFnZVN0YXJ0ZWQocGFnZTogSVBhZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQgJiYgdGhpcy5wYWdlcy5sZW5ndGggPiAwICYmIHRoaXMucGFnZXNbMF0gPT09IHBhZ2VcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcInNob3dBbGxRdWVzdGlvbnNcIiBvciBcInNob3dBbnN3ZXJlZFF1ZXN0aW9uc1wiIHRvIGFsbG93IHJlc3BvbmRlbnRzIHRvIHByZXZpZXcgYW5zd2VycyBiZWZvcmUgc3VibWl0dGluZyB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqXG4gICAqIERldGFpbHM6IFtQcmV2aWV3IFN0YXRlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeSNzdGF0ZXMtcHJldmlldylcbiAgICogRXhhbXBsZTogW1Nob3cgUHJldmlldyBCZWZvcmUgQ29tcGxldGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeT9pZD1zdXJ2ZXktc2hvd3ByZXZpZXcpXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBwcmV2aWV3VGV4dFxuICAgKiBAc2VlIGVkaXRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVwiLCBcIm5vUHJldmlld1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgdmFyIHByZXZpZXcgPSB0aGlzLnNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGU7XG4gICAgcmV0dXJuIHByZXZpZXcgPT0gXCJzaG93QWxsUXVlc3Rpb25zXCIgfHwgcHJldmlldyA9PSBcInNob3dBbnN3ZXJlZFF1ZXN0aW9uc1wiO1xuICB9XG4gIHByb3RlY3RlZCBvbkZpcnN0UGFnZUlzU3RhcnRlZENoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICB0aGlzLmlzU3RhcnRlZFN0YXRlID0gdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQ7XG4gICAgdGhpcy5wYWdlVmlzaWJpbGl0eUNoYW5nZWQodGhpcy5wYWdlc1swXSwgIXRoaXMuZmlyc3RQYWdlSXNTdGFydGVkKTtcbiAgfVxuICBwcml2YXRlIHJ1bm5pbmdQYWdlczogYW55O1xuICBwcml2YXRlIG9uU2hvd2luZ1ByZXZpZXdDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcpIHtcbiAgICAgIHRoaXMucnVubmluZ1BhZ2VzID0gdGhpcy5wYWdlcy5zbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgICB0aGlzLnNldHVwUGFnZXNGb3JQYWdlTW9kZXModHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnJ1bm5pbmdQYWdlcykge1xuICAgICAgICB0aGlzLnJlc3RvcmVPcmlnaW9uYWxQYWdlcyh0aGlzLnJ1bm5pbmdQYWdlcyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmdQYWdlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkodGhpcy5wYWdlcyk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMuY3VycmVudFBhZ2VObyA9IDA7XG4gIH1cbiAgcHJpdmF0ZSBvcmlnaW9uYWxQYWdlczogYW55O1xuICBwcm90ZWN0ZWQgb25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uc09uUGFnZU1vZGUgPT0gXCJzdGFuZGFyZFwiIHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICBpZiAodGhpcy5vcmlnaW9uYWxQYWdlcykge1xuICAgICAgICB0aGlzLnJlc3RvcmVPcmlnaW9uYWxQYWdlcyh0aGlzLm9yaWdpb25hbFBhZ2VzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3JpZ2lvbmFsUGFnZXMgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghb2xkVmFsdWUgfHwgb2xkVmFsdWUgPT0gXCJzdGFuZGFyZFwiKSB7XG4gICAgICAgIHRoaXMub3JpZ2lvbmFsUGFnZXMgPSB0aGlzLnBhZ2VzLnNsaWNlKDAsIHRoaXMucGFnZXMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0dXBQYWdlc0ZvclBhZ2VNb2Rlcyh0aGlzLmlzU2luZ2xlUGFnZSk7XG4gICAgfVxuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVPcmlnaW9uYWxQYWdlcyhvcmlnaW5hbFBhZ2VzOiBBcnJheTxQYWdlTW9kZWw+KSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0NsZWFyKCk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JpZ2luYWxQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlcy5wdXNoKG9yaWdpbmFsUGFnZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldHVwUGFnZXNGb3JQYWdlTW9kZXMoaXNTaW5nbGVQYWdlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0NsZWFyKCk7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCA/IDEgOiAwO1xuICAgIHN1cGVyLnN0YXJ0TG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdmFyIG5ld1BhZ2VzID0gdGhpcy5jcmVhdGVQYWdlc0ZvclF1ZXN0aW9uT25QYWdlTW9kZShcbiAgICAgIGlzU2luZ2xlUGFnZSxcbiAgICAgIHN0YXJ0SW5kZXhcbiAgICApO1xuICAgIHZhciBkZWxldGVkTGVuID0gdGhpcy5wYWdlcy5sZW5ndGggLSBzdGFydEluZGV4O1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZWRMZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChuZXdQYWdlc1tpXSk7XG4gICAgfVxuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1BhZ2VzW2ldLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgICAgbmV3UGFnZXNbaV0uc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5kb0VsZW1lbnRzT25Mb2FkKCk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQYWdlc0ZvclF1ZXN0aW9uT25QYWdlTW9kZShcbiAgICBpc1NpbmdsZVBhZ2U6IGJvb2xlYW4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyXG4gICk6IEFycmF5PFBhZ2VNb2RlbD4ge1xuICAgIGlmIChpc1NpbmdsZVBhZ2UpIHtcbiAgICAgIHJldHVybiBbdGhpcy5jcmVhdGVTaW5nbGVQYWdlKHN0YXJ0SW5kZXgpXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFnZXNGb3JFdmVyeVF1ZXN0aW9uKHN0YXJ0SW5kZXgpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlU2luZ2xlUGFnZShzdGFydEluZGV4OiBudW1iZXIpOiBQYWdlTW9kZWwge1xuICAgIHZhciBzaW5nbGUgPSB0aGlzLmNyZWF0ZU5ld1BhZ2UoXCJhbGxcIik7XG4gICAgc2luZ2xlLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICB2YXIgcGFuZWwgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgICBwYW5lbC5vcmlnaW5hbFBhZ2UgPSBwYWdlO1xuICAgICAgc2luZ2xlLmFkZFBhbmVsKHBhbmVsKTtcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocGFnZSk7XG4gICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICAgIGlmICghdGhpcy5zaG93UGFnZVRpdGxlcykge1xuICAgICAgICBwYW5lbC50aXRsZSA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGU7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQYWdlc0ZvckV2ZXJ5UXVlc3Rpb24oc3RhcnRJbmRleDogbnVtYmVyKTogQXJyYXk8UGFnZU1vZGVsPiB7XG4gICAgdmFyIHJlczogQXJyYXk8UGFnZU1vZGVsPiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9yaWdpbmFsUGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAvLyBJbml0aWFsaXplIHJhbmRvbWl6YXRpb25cbiAgICAgIG9yaWdpbmFsUGFnZS5zZXRXYXNTaG93bih0cnVlKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3JpZ2luYWxQYWdlLmVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbEVsZW1lbnQgPSBvcmlnaW5hbFBhZ2UuZWxlbWVudHNbal07XG4gICAgICAgIHZhciBlbGVtZW50ID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbEVsZW1lbnQuZ2V0VHlwZSgpKTtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgdmFyIGpzb25PYmogPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgICAgICAvL0Rlc2VyaWFsaXplIHBhZ2UgcHJvcGVydGllcyBvbmx5LCBleGNsdWRpbmcgZWxlbWVudHNcbiAgICAgICAganNvbk9iai5saWdodFNlcmlhbGl6aW5nID0gdHJ1ZTtcbiAgICAgICAgdmFyIHBhZ2VKc29uID0ganNvbk9iai50b0pzb25PYmplY3Qob3JpZ2luYWxQYWdlKTtcblxuICAgICAgICB2YXIgcGFnZSA9IDxQYWdlTW9kZWw+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbFBhZ2UuZ2V0VHlwZSgpKTtcbiAgICAgICAgcGFnZS5mcm9tSlNPTihwYWdlSnNvbik7XG4gICAgICAgIHBhZ2UubmFtZSA9IFwicGFnZVwiICsgKHJlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgICByZXMucHVzaChwYWdlKTtcbiAgICAgICAgdmFyIGpzb24gPSBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChvcmlnaW5hbEVsZW1lbnQpO1xuICAgICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIGVsZW1lbnQpO1xuICAgICAgICBwYWdlLmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQocGFnZS5xdWVzdGlvbnNba10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBvbmUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IDA7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcmV2QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlIHx8ICF0aGlzLnNob3dQcmV2QnV0dG9uKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1t0aGlzLmN1cnJlbnRQYWdlTm8gLSAxXTtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpIDw9IDA7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgcmV0dXJuIHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IHZQYWdlcy5sZW5ndGggLSAxO1xuICB9XG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdGhlIHN1cnZleS5cbiAgICpcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gICAqXG4gICAqIC0gd3JpdGVzIGNvb2tpZSBpZiB0aGUgYGNvb2tpZU5hbWVgIHByb3BlcnR5IGlzIG5vdCBlbXB0eVxuICAgKiAtIHNldHMgdGhlIHN1cnZleSBpbnRvIGBjb21wbGV0ZWRgIHN0YXRlXG4gICAqIC0gZmlyZXMgdGhlIGBvbkNvbXBsZXRlYCBldmVudFxuICAgKiAtIGNhbGxzIGBzZW5kUmVzdWx0YCBmdW5jdGlvbi5cbiAgICpcbiAgICogQ2FsbGluZyB0aGUgYGRvQ29tcGxldGVgIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gYW55IHZhbGlkYXRpb24sIHVubGlrZSB0aGUgYGNvbXBsZXRlTGFzdFBhZ2VgIGZ1bmN0aW9uLlxuICAgKiBJdCBjYWxscyBgbmF2aWdhdGVUb1VybGAgYWZ0ZXIgY2FsbGluZyBgb25Db21wbGV0ZWAgZXZlbnQuXG4gICAqIEluIGNhc2UgY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ2AgY2FsbGJhY2sgaW4gdGhlIGBvbkNvbXBsZXRlYCBldmVudCwgYG5hdmlnYXRlVG9VcmxgIGlzIHVzZWQgb24gY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ1N1Y2Nlc3NgIGNhbGxiYWNrLlxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBkb0NvbXBsZXRlKGlzQ29tcGxldGVPblRyaWdnZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHZhciBvbkNvbXBsZXRpbmdPcHRpb25zID0ge1xuICAgICAgYWxsb3dDb21wbGV0ZTogdHJ1ZSxcbiAgICAgIGlzQ29tcGxldGVPblRyaWdnZXI6IGlzQ29tcGxldGVPblRyaWdnZXIsXG4gICAgfTtcbiAgICB0aGlzLm9uQ29tcGxldGluZy5maXJlKHRoaXMsIG9uQ29tcGxldGluZ09wdGlvbnMpO1xuICAgIGlmICghb25Db21wbGV0aW5nT3B0aW9ucy5hbGxvd0NvbXBsZXRlKSByZXR1cm47XG4gICAgbGV0IHByZXZpb3VzQ29va2llID0gdGhpcy5oYXNDb29raWU7XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICB0aGlzLnNldENvbXBsZXRlZCgpO1xuICAgIHRoaXMuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICB0aGlzLnNldENvb2tpZSgpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc2F2aW5nRGF0YVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB2YXIgb25Db21wbGV0ZU9wdGlvbnMgPSB7XG4gICAgICBpc0NvbXBsZXRlT25UcmlnZ2VyOiBpc0NvbXBsZXRlT25UcmlnZ2VyLFxuICAgICAgc2hvd0RhdGFTYXZpbmc6IGZ1bmN0aW9uKHRleHQ6IHN0cmluZykge1xuICAgICAgICBzYXZpbmdEYXRhU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzYXZpbmdcIiwgdGV4dCk7XG4gICAgICB9LFxuICAgICAgc2hvd0RhdGFTYXZpbmdFcnJvcjogZnVuY3Rpb24odGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJlcnJvclwiLCB0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBzaG93RGF0YVNhdmluZ1N1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQ6IHN0cmluZykge1xuICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwic3VjY2Vzc1wiLCB0ZXh0KTtcbiAgICAgICAgc2VsZi5uYXZpZ2F0ZVRvKCk7XG4gICAgICB9LFxuICAgICAgc2hvd0RhdGFTYXZpbmdDbGVhcjogZnVuY3Rpb24odGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJcIiwgXCJcIik7XG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5vbkNvbXBsZXRlLmZpcmUodGhpcywgb25Db21wbGV0ZU9wdGlvbnMpO1xuICAgIGlmICghcHJldmlvdXNDb29raWUgJiYgdGhpcy5zdXJ2ZXlQb3N0SWQpIHtcbiAgICAgIHRoaXMuc2VuZFJlc3VsdCgpO1xuICAgIH1cbiAgICBpZiAoIXNhdmluZ0RhdGFTdGFydGVkKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG8oKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgc3VydmV5LiBDaGFuZ2VzIHRoZSBzdXJ2ZXkgbW9kZSBmcm9tIFwic3RhcnRpbmdcIiB0byBcInJ1bm5pbmdcIi4gQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdXIgc3VydmV5IGhhcyBhIHN0YXJ0IHBhZ2UsIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGFydCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZmlyc3RQYWdlSXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuY2hlY2tJc1BhZ2VIYXNFcnJvcnModGhpcy5zdGFydGVkUGFnZSwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnRlZFN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgdGhpcy5vblN0YXJ0ZWQuZmlyZSh0aGlzLCB7fSk7XG4gICAgaWYgKCEhdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBxdWVzdGlvbiB2YWx1ZXMgb24gdGhlIGN1cnJlbnQgcGFnZSBhcmUgdmFsaWRhdGluZyBvbiB0aGUgc2VydmVyIGF0IHRoZSBjdXJyZW50IG1vbWVudC5cbiAgICogQHNlZSBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGluZ09uU2VydmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1ZhbGlkYXRpbmdPblNlcnZlclwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsID09IHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1ZhbGlkYXRpbmdPblNlcnZlclwiLCB2YWwpO1xuICAgIHRoaXMub25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgZG9TZXJ2ZXJWYWxpZGF0aW9uKFxuICAgIGRvQ29tcGxldGU6IGJvb2xlYW4sXG4gICAgaXNQcmV2aWV3OiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyB8fFxuICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmlzRW1wdHlcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFkb0NvbXBsZXRlICYmIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGRhdGE6IDx7IFtpbmRleDogc3RyaW5nXTogYW55IH0+e30sXG4gICAgICBlcnJvcnM6IHt9LFxuICAgICAgc3VydmV5OiB0aGlzLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLmNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zLCBpc1ByZXZpZXcpO1xuICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChkb0NvbXBsZXRlICYmIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikge1xuICAgICAgb3B0aW9ucy5kYXRhID0gdGhpcy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5hY3RpdmVQYWdlLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgaWYgKCFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZShxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSk7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKVxuICAgICAgICAgIG9wdGlvbnMuZGF0YVtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih0cnVlKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBjb21wbGV0ZVNlcnZlclZhbGlkYXRpb24ob3B0aW9uczogYW55LCBpc1ByZXZpZXc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKGZhbHNlKTtcbiAgICBpZiAoIW9wdGlvbnMgJiYgIW9wdGlvbnMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSBvcHRpb25zLnN1cnZleTtcbiAgICB2YXIgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMuZXJyb3JzKSB7XG4gICAgICB2YXIgaGFzVG9Gb2N1cyA9IHRoaXMuZm9jdXNPbkZpcnN0RXJyb3I7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMuZXJyb3JzKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHNlbGYuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICAgIGlmIChxdWVzdGlvbiAmJiBxdWVzdGlvbltcImVycm9yc1wiXSkge1xuICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgcXVlc3Rpb24uYWRkRXJyb3IobmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3JzW25hbWVdLCB0aGlzKSk7XG4gICAgICAgICAgaWYgKGhhc1RvRm9jdXMpIHtcbiAgICAgICAgICAgIGhhc1RvRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghIXF1ZXN0aW9uLnBhZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHF1ZXN0aW9uLnBhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVzdGlvbi5mb2N1cyh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZSh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICB9XG4gICAgaWYgKCFoYXNFcnJvcnMpIHtcbiAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzZWxmLmlzTGFzdFBhZ2UpIHNlbGYuZG9Db21wbGV0ZSgpO1xuICAgICAgICBlbHNlIHNlbGYuZG9OZXh0UGFnZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZG9OZXh0UGFnZSgpIHtcbiAgICB2YXIgY3VyUGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgdGhpcy5jaGVja09uUGFnZVRyaWdnZXJzKCk7XG4gICAgaWYgKCF0aGlzLmlzQ29tcGxldGVkKSB7XG4gICAgICBpZiAodGhpcy5zZW5kUmVzdWx0T25QYWdlTmV4dCkge1xuICAgICAgICB0aGlzLnNlbmRSZXN1bHQodGhpcy5zdXJ2ZXlQb3N0SWQsIHRoaXMuY2xpZW50SWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGN1clBhZ2UgPT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1tpbmRleCArIDFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvQ29tcGxldGUodHJ1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRDb21wbGV0ZWQoKSB7XG4gICAgdGhpcy5pc0NvbXBsZXRlZCA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEhUTUwgY29udGVudCBmb3IgdGhlIGNvbXBsZXRlIHBhZ2UuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgdmFyIGh0bWwgPSB0aGlzLnJlbmRlcmVkQ29tcGxldGVkSHRtbDtcbiAgICBpZiAoaHRtbCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0h0bWwoaHRtbCk7XG4gICAgfVxuICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleVwiKSArIFwiPC9oMz5cIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50LCB0aGF0IGlzIHNob3duIHRvIGEgdXNlciB0aGF0IGhhZCBjb21wbGV0ZWQgdGhlIHN1cnZleSBiZWZvcmUuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkQ29tcGxldGVkQmVmb3JlSHRtbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvbXBsZXRlZEJlZm9yZUh0bWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMuY29tcGxldGVkQmVmb3JlSHRtbCk7XG4gICAgfVxuICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleUJlZm9yZVwiKSArIFwiPC9oMz5cIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50LCB0aGF0IGlzIHNob3dzIHdoZW4gYSBzdXJ2ZXkgbG9hZHMgdGhlIHN1cnZleSBKU09OLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRMb2FkaW5nSHRtbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmxvYWRpbmdIdG1sKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSHRtbCh0aGlzLmxvYWRpbmdIdG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJsb2FkaW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5pc0Rlc2lnbk1vZGUgPyB0aGlzLnBhZ2VzIDogdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhwYWdlcywgZmFsc2UpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgY3VycmVudCBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCBcIlwiKTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQoKTtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCBcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSBmYWxzZTtcbiAgcHVibGljIHVwZGF0ZVByb2dyZXNzVGV4dChvblZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuaXNDYWxjdWxhdGluZ1Byb2dyZXNzVGV4dCkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgIG9uVmFsdWVDaGFuZ2VkICYmXG4gICAgICB0aGlzLnByb2dyZXNzQmFyVHlwZSA9PSBcInBhZ2VzXCIgJiZcbiAgICAgIHRoaXMub25Qcm9ncmVzc1RleHQuaXNFbXB0eVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSB0cnVlO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVGV4dFwiLCB0aGlzLmdldFByb2dyZXNzVGV4dCgpKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwcm9ncmVzc1ZhbHVlXCIsIHRoaXMuZ2V0UHJvZ3Jlc3MoKSk7XG4gICAgdGhpcy5pc0NhbGN1bGF0aW5nUHJvZ3Jlc3NUZXh0ID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgdGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICBhbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICByZXF1aXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICByZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgIHRleHQ6IFwiXCIsXG4gICAgfTtcbiAgICB2YXIgdHlwZSA9IHRoaXMucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFxuICAgICAgdHlwZSA9PT0gXCJxdWVzdGlvbnNcIiB8fFxuICAgICAgdHlwZSA9PT0gXCJyZXF1aXJlZHF1ZXN0aW9uc1wiIHx8XG4gICAgICB0eXBlID09PSBcImNvcnJlY3RxdWVzdGlvbnNcIiB8fFxuICAgICAgIXRoaXMub25Qcm9ncmVzc1RleHQuaXNFbXB0eVxuICAgICkge1xuICAgICAgdmFyIGluZm8gPSB0aGlzLmdldFByb2dyZXNzSW5mbygpO1xuICAgICAgb3B0aW9ucy5xdWVzdGlvbkNvdW50ID0gaW5mby5xdWVzdGlvbkNvdW50O1xuICAgICAgb3B0aW9ucy5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPSBpbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudDtcbiAgICAgIG9wdGlvbnMucmVxdWlyZWRRdWVzdGlvbkNvdW50ID0gaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ID1cbiAgICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDtcbiAgICB9XG5cbiAgICBvcHRpb25zLnRleHQgPSB0aGlzLmdldFByb2dyZXNzVGV4dENvcmUob3B0aW9ucyk7XG4gICAgdGhpcy5vblByb2dyZXNzVGV4dC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnRleHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9ncmVzc1RleHRDb3JlKGluZm86IElQcm9ncmVzc0luZm8pOiBzdHJpbmcge1xuICAgIHZhciB0eXBlID0gdGhpcy5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodHlwZSA9PT0gXCJxdWVzdGlvbnNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicXVlc3Rpb25zUHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICBpbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudCxcbiAgICAgICAgaW5mby5xdWVzdGlvbkNvdW50XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gXCJyZXF1aXJlZHF1ZXN0aW9uc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGluZm8ucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQsXG4gICAgICAgIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gXCJjb3JyZWN0cXVlc3Rpb25zXCIpIHtcbiAgICAgIHZhciBjb3JyZWN0QW5zd2Vyc0NvdW50ID0gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicXVlc3Rpb25zUHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICBjb3JyZWN0QW5zd2Vyc0NvdW50LFxuICAgICAgICBpbmZvLnF1ZXN0aW9uQ291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciB2UGFnZXMgPSB0aGlzLmlzRGVzaWduTW9kZSA/IHRoaXMucGFnZXMgOiB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgaW5kZXggPSB0aGlzLmlzRGVzaWduTW9kZSA/IDEgOiB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKGluZGV4LCB2UGFnZXMubGVuZ3RoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWZ0ZXJSZW5kZXJTdXJ2ZXkoaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclN1cnZleS5maXJlKHRoaXMsIHtcbiAgICAgIHN1cnZleTogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICB1cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMocXVlc3Rpb246IElRdWVzdGlvbiwgY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdGhpcy5vblVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlUGFuZWxDc3NDbGFzc2VzKHBhbmVsOiBJUGFuZWwsIGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHRoaXMub25VcGRhdGVQYW5lbENzc0NsYXNzZXMuZmlyZSh0aGlzLCB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZVBhZ2VDc3NDbGFzc2VzKHBhZ2U6IElQYWdlLCBjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLm9uVXBkYXRlUGFnZUNzc0NsYXNzZXMuZmlyZSh0aGlzLCB7XG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgY3NzQ2xhc3NlczogY3NzQ2xhc3NlcyxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlclBhZ2UoaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlclBhZ2UuaXNFbXB0eSkgcmV0dXJuO1xuICAgIHRoaXMub25BZnRlclJlbmRlclBhZ2UuZmlyZSh0aGlzLCB7XG4gICAgICBwYWdlOiB0aGlzLmFjdGl2ZVBhZ2UsXG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJIZWFkZXIoaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlckhlYWRlci5pc0VtcHR5KSByZXR1cm47XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVySGVhZGVyLmZpcmUodGhpcywge1xuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24uZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0KHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0LmlzRW1wdHkpIHJldHVybjtcbiAgICBsZXQgaWQgPSAoPFF1ZXN0aW9uPnF1ZXN0aW9uKS5pbnB1dElkO1xuICAgIGlmICghIWlkICYmIGh0bWxFbGVtZW50LmlkICE9PSBpZCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxldCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGh0bWxFbGVtZW50ID0gZWw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJQYW5lbChwYW5lbDogSUVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclBhbmVsLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIG1hdHJpeEJlZm9yZVJvd0FkZGVkKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMub25NYXRyaXhCZWZvcmVSb3dBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG1hdHJpeFJvd0FkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbk1hdHJpeFJvd0FkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIHJvdzogcm93IH0pO1xuICB9XG4gIGdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVGcm9tQXJyYXkoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXJcbiAgKTogSVF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXMgPSBxdWVzdGlvbnNbaV0uZ2V0UXVlc3Rpb25Gcm9tQXJyYXkobmFtZSwgaW5kZXgpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBtYXRyaXhSb3dSZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvd0luZGV4OiBudW1iZXIsIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbk1hdHJpeFJvd1JlbW92ZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICByb3c6IHJvdyxcbiAgICB9KTtcbiAgfVxuICBtYXRyaXhSb3dSZW1vdmluZyhxdWVzdGlvbjogSVF1ZXN0aW9uLCByb3dJbmRleDogbnVtYmVyLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgcm93OiByb3csXG4gICAgICBhbGxvdzogdHJ1ZSxcbiAgICB9O1xuICAgIHRoaXMub25NYXRyaXhSb3dSZW1vdmluZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG4gIG1hdHJpeEFsbG93UmVtb3ZlUm93KFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICByb3c6IGFueVxuICApOiBib29sZWFuIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgIHJvdzogcm93LFxuICAgICAgYWxsb3c6IHRydWUsXG4gICAgfTtcbiAgICB0aGlzLm9uTWF0cml4QWxsb3dSZW1vdmVSb3cuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5hbGxvdztcbiAgfVxuICBtYXRyaXhDZWxsQ3JlYXRlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxDcmVhdGVkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgbWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4QWZ0ZXJDZWxsUmVuZGVyLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgbWF0cml4Q2VsbFZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhDZWxsVmFsdWVDaGFuZ2luZyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxWYWx1ZUNoYW5naW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZ2V0IGlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uVmFsdWVDaGFuZ2luZ1wiO1xuICB9XG4gIG1hdHJpeENlbGxWYWxpZGF0ZShxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpOiBTdXJ2ZXlFcnJvciB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25NYXRyaXhDZWxsVmFsaWRhdGUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5lcnJvciA/IG5ldyBDdXN0b21FcnJvcihvcHRpb25zLmVycm9yLCB0aGlzKSA6IG51bGw7XG4gIH1cbiAgZHluYW1pY1BhbmVsQWRkZWQocXVlc3Rpb246IElRdWVzdGlvbikge1xuICAgIGlmICh0aGlzLm9uRHluYW1pY1BhbmVsQWRkZWQuaXNFbXB0eSkgcmV0dXJuO1xuICAgIHZhciBwYW5lbHMgPSAoPGFueT5xdWVzdGlvbikucGFuZWxzO1xuICAgIHZhciBwYW5lbCA9IHBhbmVsc1twYW5lbHMubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5vbkR5bmFtaWNQYW5lbEFkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIHBhbmVsOiBwYW5lbCB9KTtcbiAgfVxuICBkeW5hbWljUGFuZWxSZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHBhbmVsSW5kZXg6IG51bWJlciwgcGFuZWw6IElQYW5lbCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSAhIXBhbmVsID8gKDxQYW5lbE1vZGVsQmFzZT5wYW5lbCkucXVlc3Rpb25zIDogW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICB9XG4gICAgdGhpcy5vbkR5bmFtaWNQYW5lbFJlbW92ZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBwYW5lbEluZGV4OiBwYW5lbEluZGV4LFxuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgIH0pO1xuICB9XG4gIGR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KSB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgICBvcHRpb25zLmFsbG93ID0gdHJ1ZTtcbiAgICB0aGlzLm9uRHJhZ0Ryb3BBbGxvdy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG4gIGVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUuZW5zdXJlUm93c1Zpc2liaWxpdHkoKTtcbiAgICB9XG4gICAgdGhpcy5vbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQuZmlyZSh0aGlzLCB7IGVsZW1lbnQgfSk7XG4gIH1cblxuICBnZXRVcGRhdGVkRWxlbWVudFRpdGxlQWN0aW9ucyhcbiAgICBlbGVtZW50OiBJU3VydmV5RWxlbWVudCxcbiAgICB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICk6IEFycmF5PElBY3Rpb24+IHtcbiAgICBpZiAoZWxlbWVudC5pc1BhZ2UpXG4gICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVkUGFnZVRpdGxlQWN0aW9ucyhlbGVtZW50LCB0aXRsZUFjdGlvbnMpO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpXG4gICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVkUGFuZWxUaXRsZUFjdGlvbnMoZWxlbWVudCwgdGl0bGVBY3Rpb25zKTtcbiAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVkUXVlc3Rpb25UaXRsZUFjdGlvbnMoZWxlbWVudCwgdGl0bGVBY3Rpb25zKTtcbiAgfVxuICBwcml2YXRlIGdldFVwZGF0ZWRRdWVzdGlvblRpdGxlQWN0aW9ucyhcbiAgICBxdWVzdGlvbjogSVN1cnZleUVsZW1lbnQsXG4gICAgdGl0bGVBY3Rpb25zOiBBcnJheTxJQWN0aW9uPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHRpdGxlQWN0aW9uczogdGl0bGVBY3Rpb25zLFxuICAgIH07XG4gICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcGRhdGVkUGFuZWxUaXRsZUFjdGlvbnMoXG4gICAgcGFuZWw6IElTdXJ2ZXlFbGVtZW50LFxuICAgIHRpdGxlQWN0aW9uczogQXJyYXk8SUFjdGlvbj5cbiAgKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICB0aXRsZUFjdGlvbnM6IHRpdGxlQWN0aW9ucyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRQYW5lbFRpdGxlQWN0aW9ucy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnRpdGxlQWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXBkYXRlZFBhZ2VUaXRsZUFjdGlvbnMoXG4gICAgcGFnZTogSVN1cnZleUVsZW1lbnQsXG4gICAgdGl0bGVBY3Rpb25zOiBBcnJheTxJQWN0aW9uPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICB0aXRsZUFjdGlvbnM6IHRpdGxlQWN0aW9ucyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRQYWdlVGl0bGVBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICB9XG5cbiAgZ2V0VXBkYXRlZE1hdHJpeFJvd0FjdGlvbnMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICByb3c6IGFueSxcbiAgICBhY3Rpb25zOiBBcnJheTxJQWN0aW9uPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGFjdGlvbnM6IGFjdGlvbnMsXG4gICAgICByb3c6IHJvdyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRNYXRyaXhSb3dBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWN0aW9ucztcbiAgfVxuXG4gIHNjcm9sbEVsZW1lbnRUb1RvcChcbiAgICBlbGVtZW50OiBJU3VydmV5RWxlbWVudCxcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIHBhZ2U6IElQYWdlLFxuICAgIGlkOiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgZWxlbWVudElkOiBpZCxcbiAgICAgIGNhbmNlbDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLm9uU2Nyb2xsaW5nRWxlbWVudFRvVG9wLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLmNhbmNlbCkge1xuICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3Aob3B0aW9ucy5lbGVtZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIGEgZmlsZSB0byBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBhIGZpbGUgcXVlc3Rpb24gb2JqZWN0XG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gZmlsZXMgZmlsZXMgdG8gdXBsb2FkXG4gICAqIEBwYXJhbSB1cGxvYWRpbmdDYWxsYmFjayBhIGNhbGwgYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvbiB1cGxvYWRpbmcgdGhlIGZpbGVzXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkRmlsZXMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgICB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICBpZiAodGhpcy5vblVwbG9hZEZpbGVzLmlzRW1wdHkpIHtcbiAgICAgIHVwbG9hZGluZ0NhbGxiYWNrKFwiZXJyb3JcIiwgZmlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVXBsb2FkRmlsZXMuZmlyZSh0aGlzLCB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgZmlsZXM6IGZpbGVzIHx8IFtdLFxuICAgICAgICBjYWxsYmFjazogdXBsb2FkaW5nQ2FsbGJhY2ssXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5UG9zdElkKSB7XG4gICAgICB0aGlzLnVwbG9hZEZpbGVzQ29yZShuYW1lLCBmaWxlcywgdXBsb2FkaW5nQ2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRG93bmxvYWRzIGEgZmlsZSBmcm9tIHNlcnZlclxuICAgKiBAcGFyYW0gbmFtZSBhIHF1ZXN0aW9uIG5hbWVcbiAgICogQHBhcmFtIGZpbGVWYWx1ZSBhIHNpbmdsZSBmaWxlIHF1ZXN0aW9uIHZhbHVlXG4gICAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGwgYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvbiBkb3dubG9hZGluZyB0aGUgZmlsZSBhbmQgdGhlIGRvd25sb2FkZWQgZmlsZSBjb250ZW50XG4gICAqL1xuICBwdWJsaWMgZG93bmxvYWRGaWxlKFxuICAgIHF1ZXN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGZpbGVWYWx1ZTogYW55LFxuICAgIGNhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICkge1xuICAgIGlmICh0aGlzLm9uRG93bmxvYWRGaWxlLmlzRW1wdHkpIHtcbiAgICAgICEhY2FsbGJhY2sgJiYgY2FsbGJhY2soXCJzdWNjZXNzXCIsIGZpbGVWYWx1ZS5jb250ZW50IHx8IGZpbGVWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMub25Eb3dubG9hZEZpbGUuZmlyZSh0aGlzLCB7XG4gICAgICBuYW1lOiBxdWVzdGlvbk5hbWUsXG4gICAgICBjb250ZW50OiBmaWxlVmFsdWUuY29udGVudCB8fCBmaWxlVmFsdWUsXG4gICAgICBmaWxlVmFsdWU6IGZpbGVWYWx1ZSxcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGZpbGVzIGZyb20gc2VydmVyLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gcXVlc3Rpb25cbiAgICogQHBhcmFtIG5hbWUgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gdmFsdWUgZmlsZSBxdWVzdGlvbiB2YWx1ZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9mIHRoZSBjbGVhcmluZyBvcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBjbGVhckZpbGVzKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICBpZiAodGhpcy5vbkNsZWFyRmlsZXMuaXNFbXB0eSkge1xuICAgICAgISFjYWxsYmFjayAmJiBjYWxsYmFjayhcInN1Y2Nlc3NcIiwgdmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xlYXJGaWxlcy5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlQ2hvaWNlc0Zyb21TZXJ2ZXIoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBjaG9pY2VzOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHNlcnZlclJlc3VsdDogYW55XG4gICk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgY2hvaWNlczogY2hvaWNlcyxcbiAgICAgIHNlcnZlclJlc3VsdDogc2VydmVyUmVzdWx0LFxuICAgIH07XG4gICAgdGhpcy5vbkxvYWRDaG9pY2VzRnJvbVNlcnZlci5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmNob2ljZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5U2VydmljZSgpOiBkeFN1cnZleVNlcnZpY2Uge1xuICAgIHJldHVybiBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwbG9hZEZpbGVzQ29yZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgICB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICB2YXIgcmVzcG9uc2VzOiBBcnJheTxhbnk+ID0gW107XG4gICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInVwbG9hZGluZ1wiLCBmaWxlKTtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLnNlbmRGaWxlKFxuICAgICAgICB0aGlzLnN1cnZleVBvc3RJZCxcbiAgICAgICAgZmlsZSxcbiAgICAgICAgKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgcmVzcG9uc2VzLnB1c2goeyBjb250ZW50OiByZXNwb25zZSwgZmlsZTogZmlsZSB9KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZXMubGVuZ3RoID09PSBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInN1Y2Nlc3NcIiwgcmVzcG9uc2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKVxuICAgICAgICAgICAgICB1cGxvYWRpbmdDYWxsYmFjayhcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGdldFBhZ2UoaW5kZXg6IG51bWJlcik6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXNbaW5kZXhdO1xuICB9XG4gIC8qKlxuICAgKiBBZGRzIGFuIGV4aXN0aW5nIHBhZ2UgdG8gdGhlIHN1cnZleS5cbiAgICogQHBhcmFtIHBhZ2UgYSBuZXdseSBhZGRlZCBwYWdlXG4gICAqIEBwYXJhbSBpbmRleCAtIGEgcGFnZSBpbmRleCB0byB3aGVyZSBpbnNlcnQgYSBwYWdlLiBJdCBpcyAtMSBieSBkZWZhdWx0IGFuZCB0aGUgcGFnZSB3aWxsIGJlIGFkZGVkIGludG8gdGhlIGVuZC5cbiAgICogQHNlZSBhZGROZXdQYWdlXG4gICAqL1xuICBwdWJsaWMgYWRkUGFnZShwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIgPSAtMSkge1xuICAgIGlmIChwYWdlID09IG51bGwpIHJldHVybjtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gocGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAwLCBwYWdlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGFnZSBhbmQgYWRkcyBpdCB0byBhIHN1cnZleS4gR2VuZXJhdGVzIGEgbmV3IG5hbWUgaWYgdGhlIGBuYW1lYCBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZC5cbiAgICogQHBhcmFtIG5hbWUgYSBwYWdlIG5hbWVcbiAgICogQHBhcmFtIGluZGV4IC0gYSBwYWdlIGluZGV4IHRvIHdoZXJlIGluc2VydCBhIG5ldyBwYWdlLiBJdCBpcyAtMSBieSBkZWZhdWx0IGFuZCB0aGUgcGFnZSB3aWxsIGJlIGFkZGVkIGludG8gdGhlIGVuZC5cbiAgICogQHNlZSBhZGRQYWdlXG4gICAqL1xuICBwdWJsaWMgYWRkTmV3UGFnZShuYW1lOiBzdHJpbmcgPSBudWxsLCBpbmRleDogbnVtYmVyID0gLTEpIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3JlYXRlTmV3UGFnZShuYW1lKTtcbiAgICB0aGlzLmFkZFBhZ2UocGFnZSwgaW5kZXgpO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcGFnZSBmcm9tIGEgc3VydmV5LlxuICAgKiBAcGFyYW0gcGFnZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlcy5sZW5ndGggPiAwID8gdGhpcy5wYWdlc1swXSA6IG51bGw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBRdWVzdGlvbiB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmVcbiAgICAgIDogdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcztcbiAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlc1swXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIGJ5IGl0cyB2YWx1ZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZU5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5TmFtZVxuICAgKiBAc2VlIGdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lXG4gICAqIEBzZWUgUXVlc3Rpb24udmFsdWVOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShcbiAgICB2YWx1ZU5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBJUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSwgY2FzZUluc2Vuc2l0aXZlKTtcbiAgICByZXR1cm4gISFyZXMgPyByZXNbMF0gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBxdWVzdGlvbnMgYnkgdGhlaXIgdmFsdWVOYW1lLiBuYW1lIHByb3BlcnR5IGlzIHVzZWQgaWYgdmFsdWVOYW1lIHByb3BlcnR5IGlzIGVtcHR5LlxuICAgKiBAcGFyYW0gdmFsdWVOYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lXG4gICAqIEBzZWUgUXVlc3Rpb24udmFsdWVOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZVxuICAgICAgOiB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXM7XG4gICAgdmFyIHJlcyA9IGhhc2hbdmFsdWVOYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q2FsY3VsYXRlZFZhbHVlQnlOYW1lKG5hbWU6IHN0cmluZyk6IENhbGN1bGF0ZWRWYWx1ZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChuYW1lID09IHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXS5uYW1lKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgcXVlc3Rpb25zIGJ5IHRoZWlyIG5hbWVzLlxuICAgKiBAcGFyYW0gbmFtZXMgYW4gYXJyYXkgb2YgcXVlc3Rpb24gbmFtZXNcbiAgICogQHBhcmFtIGNhc2VJbnNlbnNpdGl2ZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uc0J5TmFtZXMoXG4gICAgbmFtZXM6IHN0cmluZ1tdLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IElRdWVzdGlvbltdIHtcbiAgICB2YXIgcmVzdWx0OiBJUXVlc3Rpb25bXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZXNbaV0sIGNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgICBpZiAocXVlc3Rpb24pIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHBhZ2Ugb24gd2hpY2ggYW4gZWxlbWVudCAocXVlc3Rpb24gb3IgcGFuZWwpIGlzIHBsYWNlZC5cbiAgICogQHBhcmFtIGVsZW1lbnQgUXVlc3Rpb24gb3IgUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogUGFnZU1vZGVsIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgaWYgKHBhZ2UuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gcGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIG9uIHdoaWNoIGEgcXVlc3Rpb24gaXMgbG9jYXRlZC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIGJ5IGl0J3MgbmFtZS5cbiAgICogQHBhcmFtIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlOYW1lKG5hbWU6IHN0cmluZyk6IFBhZ2VNb2RlbCB7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucGFnZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBwYWdlcyBieSB0aGVpciBuYW1lcy5cbiAgICogQHBhcmFtIG5hbWVzIGEgbGlzdCBvZiBwYWdlIG5hbWVzXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZXNCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSk6IFBhZ2VNb2RlbFtdIHtcbiAgICB2YXIgcmVzdWx0OiBQYWdlTW9kZWxbXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWVzW2ldKTtcbiAgICAgIGlmIChwYWdlKSByZXN1bHQucHVzaChwYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHF1ZXN0aW9ucyBpbiBhIHN1cnZleS5cbiAgICogQHBhcmFtIHZpc2libGVPbmx5IHNldCBpdCBgdHJ1ZWAsIGlmIHlvdSB3YW50IHRvIGdldCBvbmx5IHZpc2libGUgcXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0QWxsUXVlc3Rpb25zKFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5hZGRRdWVzdGlvbnNUb0xpc3QoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdmlzaWJsZU9ubHksXG4gICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVpeiBxdWVzdGlvbnMuIEFsbCB2aXNpYmxlIHF1ZXN0aW9ucyB0aGF0IGhhcyBpbnB1dChzKSB3aWRnZXRzLlxuICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbkNvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0UXVpelF1ZXN0aW9ucygpOiBBcnJheTxJUXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PElRdWVzdGlvbj4oKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkID8gMSA6IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhZ2VzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2pdO1xuICAgICAgICBpZiAocS5xdWl6UXVlc3Rpb25Db3VudCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcGFuZWwgYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcGFuZWwgbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbEJ5TmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogSVBhbmVsIHtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5nZXRBbGxQYW5lbHMoKTtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbE5hbWUgPSBwYW5lbHNbaV0ubmFtZTtcbiAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHBhbmVsTmFtZSA9IHBhbmVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHBhbmVsTmFtZSA9PSBuYW1lKSByZXR1cm4gcGFuZWxzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHN1cnZleSdzIHBhbmVscy5cbiAgICovXG4gIHB1YmxpYyBnZXRBbGxQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXNbaV0uYWRkUGFuZWxzSW50b0xpc3QocmVzdWx0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcGFnZSwgYnV0IGRvIG5vdCBhZGQgaXQgaW50byB0aGUgc3VydmV5LlxuICAgKiBZb3UgY2FuIHVzZSBhZGRQYWdlKHBhZ2UpIGZ1bmN0aW9uIHRvIGFkZCBpdCBpbnRvIHN1cnZleSBsYXRlci5cbiAgICogQHNlZSBhZGRQYWdlXG4gICAqIEBzZWUgYWRkTmV3UGFnZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZU5ld1BhZ2UobmFtZTogc3RyaW5nKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VNb2RlbChuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcXVlc3Rpb25PblZhbHVlQ2hhbmdpbmcodmFsdWVOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLm9uVmFsdWVDaGFuZ2luZy5pc0VtcHR5KSByZXR1cm4gbmV3VmFsdWU7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiB2YWx1ZU5hbWUsXG4gICAgICBxdWVzdGlvbjogdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHZhbHVlTmFtZSksXG4gICAgICB2YWx1ZTogdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSksXG4gICAgICBvbGRWYWx1ZTogdGhpcy5nZXRWYWx1ZSh2YWx1ZU5hbWUpLFxuICAgIH07XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlUXVlc3Rpb25WYWx1ZSh2YWx1ZU5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICBpZiAoISFxdWVzdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uc1tpXS52YWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChxVmFsdWUgPT09IG5ld1ZhbHVlICYmIEFycmF5LmlzQXJyYXkocVZhbHVlKSAmJiAhIXRoaXMuZWRpdGluZ09iaikgfHxcbiAgICAgICAgICAhdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHFWYWx1ZSwgbmV3VmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCAmJlxuICAgICAgKHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uVmFsdWVDaGFuZ2VkXCIgfHxcbiAgICAgICAgcXVlc3Rpb24uZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWRDb3JlKHF1ZXN0aW9uKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZENvcmUocXVlc3Rpb246IFF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZEVycm9yQ291bnQgPSBxdWVzdGlvbi5nZXRBbGxFcnJvcnMoKS5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IHF1ZXN0aW9uLmhhc0Vycm9ycyh0cnVlLCB7XG4gICAgICBpc09uVmFsdWVDaGFuZ2VkOiAhdGhpcy5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nLFxuICAgIH0pO1xuICAgIGlmIChcbiAgICAgICEhcXVlc3Rpb24ucGFnZSAmJlxuICAgICAgKG9sZEVycm9yQ291bnQgPiAwIHx8IHF1ZXN0aW9uLmdldEFsbEVycm9ycygpLmxlbmd0aCA+IDApXG4gICAgKSB7XG4gICAgICB0aGlzLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UoPFBhZ2VNb2RlbD5xdWVzdGlvbi5wYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNoZWNrRXJyb3JzT25WYWx1ZUNoYW5naW5nKFxuICAgIHZhbHVlTmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMocS52YWx1ZUZvclN1cnZleSwgbmV3VmFsdWUpKSB7XG4gICAgICAgIHEudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkQ29yZShxKSkgcmVzID0gdHJ1ZTtcbiAgICAgIHJlcyA9IHJlcyB8fCBxLmVycm9ycy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKHZhbHVlTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghIXF1ZXN0aW9ucykge1xuICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb24pO1xuICAgICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICBuYW1lOiB2YWx1ZU5hbWUsXG4gICAgICAgIHF1ZXN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5jaGVja0JpbmRpbmdzKHZhbHVlTmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKHZhbHVlTmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9PT0gXCJwcm9jZXNzaW5nXCIpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmdDb25kaXRpb25zKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVBbGxRdWVzdGlvbnNWYWx1ZSgpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IDxRdWVzdGlvbj5xdWVzdGlvbnNbaV07XG4gICAgICB2YXIgdmFsTmFtZSA9IHEuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBxLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh0aGlzLmdldFZhbHVlKHZhbE5hbWUpKTtcbiAgICAgIGlmIChxLnJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWUpIHtcbiAgICAgICAgcS51cGRhdGVDb21tZW50RnJvbVN1cnZleSh0aGlzLmdldENvbW1lbnQodmFsTmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIG5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5vblN1cnZleVZhbHVlQ2hhbmdlZChcbiAgICAgICAgdGhpcy5nZXRWYWx1ZShxdWVzdGlvbnNbaV0uZ2V0VmFsdWVOYW1lKCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrT25QYWdlVHJpZ2dlcnMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnModHJ1ZSk7XG4gICAgdmFyIHZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBuYW1lID0gcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCk7XG4gICAgICB2YWx1ZXNbbmFtZV0gPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmFkZENhbGN1bGF0ZWRWYWx1ZXNJbnRvRmlsdGVyZWRWYWx1ZXModmFsdWVzKTtcbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnModmFsdWVzLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIGdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKFxuICAgIGluY2x1ZGVJbnZzaWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlc3VsdDogQXJyYXk8UXVlc3Rpb24+ID0gW107XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmICghcGFnZSkgcmV0dXJuIHJlc3VsdDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYWdlLnF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmICgoIWluY2x1ZGVJbnZzaWJsZSAmJiAhcXVlc3Rpb24udmlzaWJsZSkgfHwgIXF1ZXN0aW9uLm5hbWUpIGNvbnRpbnVlO1xuICAgICAgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaXNUcmlnZ2VySXNSdW5uaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgdHJpZ2dlclZhbHVlczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB0cmlnZ2VyS2V5czogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBjaGVja1RyaWdnZXJzKGtleTogYW55LCBpc09uTmV4dFBhZ2U6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCB8fCB0aGlzLnRyaWdnZXJzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICBmb3IgKHZhciBrIGluIGtleSkge1xuICAgICAgICB0aGlzLnRyaWdnZXJLZXlzW2tdID0ga2V5W2tdO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzVHJpZ2dlcklzUnVubmluZyA9IHRydWU7XG4gICAgdGhpcy50cmlnZ2VyS2V5cyA9IGtleTtcbiAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdHJpZ2dlciA9IHRoaXMudHJpZ2dlcnNbaV07XG4gICAgICBpZiAodHJpZ2dlci5pc09uTmV4dFBhZ2UgPT0gaXNPbk5leHRQYWdlKSB7XG4gICAgICAgIHRyaWdnZXIuY2hlY2tFeHByZXNzaW9uKFxuICAgICAgICAgIHRoaXMudHJpZ2dlcktleXMsXG4gICAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVzLFxuICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1RyaWdnZXJJc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvRWxlbWVudHNPbkxvYWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm9uU3VydmV5TG9hZCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblZhbHVlczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBnZXQgaXNSdW5uaW5nQ29uZGl0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmRpdGlvblZhbHVlcztcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyQ291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBjb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9ucygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzQ29tcGxldGVkIHx8XG4gICAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID09PSBcInByb2Nlc3NpbmdcIiB8fFxuICAgICAgdGhpcy5pc1J1bm5pbmdDb25kaXRpb25zXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB2YXIgb2xkQ3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllcyk7XG4gICAgdGhpcy5jaGVja0lmTmV3UGFnZXNCZWNvbWVWaXNpYmxlKG9sZEN1cnJlbnRQYWdlSW5kZXgpO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uICYmXG4gICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lckNvdW50ZXIgPFxuICAgICAgICBzZXR0aW5ncy5tYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZFxuICAgICkge1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyKys7XG4gICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyID0gMDtcbiAgICAgIGlmICh0aGlzLmNvbmRpdGlvblVwZGF0ZVZpc2libGVJbmRleGVzKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlVmlzaWJsZUluZGV4ZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uZGl0aW9uTm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25Ob3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZ0NvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllczogYW55KSB7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5wYWdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldLnJlc2V0Q2FsY3VsYXRpb24oKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXS5kb0NhbGN1bGF0aW9uKFxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMsXG4gICAgICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS5ydW5Db25kaXRpb24odGhpcy5jb25kaXRpb25WYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrSWZOZXdQYWdlc0JlY29tZVZpc2libGUob2xkQ3VycmVudFBhZ2VJbmRleDogbnVtYmVyKSB7XG4gICAgdmFyIG5ld0N1cnJlbnRQYWdlSW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZVZhbHVlKTtcbiAgICBpZiAobmV3Q3VycmVudFBhZ2VJbmRleCA8PSBvbGRDdXJyZW50UGFnZUluZGV4ICsgMSkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSBvbGRDdXJyZW50UGFnZUluZGV4ICsgMTsgaSA8IG5ld0N1cnJlbnRQYWdlSW5kZXg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIGEgc3VydmV5IHJlc3VsdCB0byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBwb3N0SWQgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UgcG9zdElkXG4gICAqIEBwYXJhbSBjbGllbnRJZCBUeXBpY2FsbHkgYSBjdXN0b21lciBlLW1haWwgb3IgYW4gaWRlbnRpZmllclxuICAgKiBAcGFyYW0gaXNQYXJ0aWFsQ29tcGxldGVkIFNldCBpdCB0byBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBub3QgY29tcGxldGVkIHlldCBhbmQgdGhlIHJlc3VsdHMgYXJlIGludGVybWVkaWF0ZVxuICAgKiBAc2VlIHN1cnZleVBvc3RJZFxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqL1xuICBwdWJsaWMgc2VuZFJlc3VsdChcbiAgICBwb3N0SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgaXNQYXJ0aWFsQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHJldHVybjtcbiAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmIHRoaXMub25QYXJ0aWFsU2VuZCkge1xuICAgICAgdGhpcy5vblBhcnRpYWxTZW5kLmZpcmUodGhpcywgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFwb3N0SWQgJiYgdGhpcy5zdXJ2ZXlQb3N0SWQpIHtcbiAgICAgIHBvc3RJZCA9IHRoaXMuc3VydmV5UG9zdElkO1xuICAgIH1cbiAgICBpZiAoIXBvc3RJZCkgcmV0dXJuO1xuICAgIGlmIChjbGllbnRJZCkge1xuICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xuICAgIH1cbiAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmICF0aGlzLmNsaWVudElkKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLnN1cnZleVNob3dEYXRhU2F2aW5nKSB7XG4gICAgICB0aGlzLnNldENvbXBsZXRlZFN0YXRlKFwic2F2aW5nXCIsIFwiXCIpO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5zZW5kUmVzdWx0KFxuICAgICAgcG9zdElkLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgZnVuY3Rpb24oc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSwgcmVxdWVzdDogYW55KSB7XG4gICAgICAgIGlmIChzZWxmLnN1cnZleVNob3dEYXRhU2F2aW5nKSB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzdWNjZXNzXCIsIFwiXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwiZXJyb3JcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZWxmLm9uU2VuZFJlc3VsdC5maXJlKHNlbGYsIHtcbiAgICAgICAgICBzdWNjZXNzOiBzdWNjZXNzLFxuICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0aGlzLmNsaWVudElkLFxuICAgICAgaXNQYXJ0aWFsQ29tcGxldGVkXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbHMgdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlIGFuZCwgb24gY2FsbGJhY2ssIGZpcmVzIHRoZSBgb25HZXRSZXN1bHRgIGV2ZW50IHdpdGggYWxsIGFuc3dlcnMgdGhhdCB5b3VyIHVzZXJzIG1hZGUgZm9yIGEgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSByZXN1bHRJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSByZXN1bHRJZFxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcXVlc3Rpb24gbmFtZVxuICAgKiBAc2VlIG9uR2V0UmVzdWx0XG4gICAqL1xuICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRSZXN1bHQocmVzdWx0SWQsIG5hbWUsIGZ1bmN0aW9uKFxuICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIGRhdGFMaXN0OiBhbnlbXSxcbiAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICApIHtcbiAgICAgIHNlbGYub25HZXRSZXN1bHQuZmlyZShzZWxmLCB7XG4gICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGRhdGFMaXN0OiBkYXRhTGlzdCxcbiAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzdXJ2ZXkgSlNPTiBmcm9tIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogSWYgYGNsaWVudElkYCBpcyBub3QgYG51bGxgIGFuZCBhIHVzZXIgaGFkIGNvbXBsZXRlZCBhIHN1cnZleSBiZWZvcmUsIHRoZSBzdXJ2ZXkgc3dpdGNoZXMgdG8gYGNvbXBsZXRlZGJlZm9yZWAgc3RhdGUuXG4gICAqIEBwYXJhbSBzdXJ2ZXlJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSBzdXJ2ZXlJZFxuICAgKiBAcGFyYW0gY2xpZW50SWQgdXNlcnMnIGluZGVudGlmaWVyLCBmb3IgZXhhbXBsZSBhbiBlLW1haWwgb3IgYSB1bmlxdWUgY3VzdG9tZXIgaWQgaW4geW91ciB3ZWIgYXBwbGljYXRpb24uXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqL1xuICBwdWJsaWMgbG9hZFN1cnZleUZyb21TZXJ2aWNlKFxuICAgIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsLFxuICAgIGNsaWVuZElkOiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGlmIChzdXJ2ZXlJZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xuICAgIH1cbiAgICBpZiAoY2xpZW5kSWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbmRJZDtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgaWYgKGNsaWVuZElkKSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRTdXJ2ZXlKc29uQW5kSXNDb21wbGV0ZWQoXG4gICAgICAgIHRoaXMuc3VydmV5SWQsXG4gICAgICAgIHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGZ1bmN0aW9uKFxuICAgICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICAgICAganNvbjogc3RyaW5nLFxuICAgICAgICAgIGlzQ29tcGxldGVkOiBzdHJpbmcsXG4gICAgICAgICAgcmVzcG9uc2U6IGFueVxuICAgICAgICApIHtcbiAgICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICBzZWxmLmlzQ29tcGxldGVkQmVmb3JlID0gaXNDb21wbGV0ZWQgPT0gXCJjb21wbGV0ZWRcIjtcbiAgICAgICAgICAgIHNlbGYubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihqc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLmxvYWRTdXJ2ZXkodGhpcy5zdXJ2ZXlJZCwgZnVuY3Rpb24oXG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICAgIHJlc3VsdDogc3RyaW5nLFxuICAgICAgICByZXNwb25zZTogYW55XG4gICAgICApIHtcbiAgICAgICAgc2VsZi5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZWxmLmxvYWRTdXJ2ZXlGcm9tU2VydmljZUpzb24ocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgbG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihqc29uOiBhbnkpIHtcbiAgICBpZiAoIWpzb24pIHJldHVybjtcbiAgICB0aGlzLmZyb21KU09OKGpzb24pO1xuICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgdGhpcy5vbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlLmZpcmUodGhpcywge30pO1xuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpIHt9XG4gIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHt9XG4gIHByaXZhdGUgcmVzZXRWaXNpYmxlSW5kZXhlcygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnModHJ1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlSW5kZXhlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCAhIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzUnVubmluZ0NvbmRpdGlvbnMgJiZcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZC5pc0VtcHR5ICYmXG4gICAgICB0aGlzLm9uUGFnZVZpc2libGVDaGFuZ2VkLmlzRW1wdHlcbiAgICApIHtcbiAgICAgIC8vUnVuIHVwZGF0ZSB2aXNpYmxlIGluZGV4IG9ubHkgb25lIHRpbWUgb24gZmluaXNoaW5nIHJ1bm5pbmcgY29uZGl0aW9uc1xuICAgICAgdGhpcy5jb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlcyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUGFnZVZpc2libGVJbmRleGVzKHRoaXMuc2hvd1BhZ2VOdW1iZXJzKTtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25QYWdlXCIpIHtcbiAgICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2aXNQYWdlc1tpXS5zZXRWaXNpYmxlSW5kZXgoMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uXCIgPyAwIDogLTE7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5kZXggKz0gdGhpcy5wYWdlc1tpXS5zZXRWaXNpYmxlSW5kZXgoaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCh0cnVlKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyhzaG93SW5kZXg6IGJvb2xlYW4pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzUGFnZVZpc2libGUgPSB0aGlzLnBhZ2VzW2ldLmlzVmlzaWJsZTtcbiAgICAgIHRoaXMucGFnZXNbaV0udmlzaWJsZUluZGV4ID0gaXNQYWdlVmlzaWJsZSA/IGluZGV4KysgOiAtMTtcbiAgICAgIHRoaXMucGFnZXNbaV0ubnVtID1cbiAgICAgICAgc2hvd0luZGV4ICYmIGlzUGFnZVZpc2libGUgPyB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCArIDEgOiAtMTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGZyb21KU09OKGpzb246IGFueSkge1xuICAgIGlmICghanNvbikgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNDbGVhcigpO1xuICAgIHRoaXMuanNvbkVycm9ycyA9IG51bGw7XG4gICAgdmFyIGpzb25Db252ZXJ0ZXIgPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgIGpzb25Db252ZXJ0ZXIudG9PYmplY3QoanNvbiwgdGhpcyk7XG4gICAgaWYgKGpzb25Db252ZXJ0ZXIuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuanNvbkVycm9ycyA9IGpzb25Db252ZXJ0ZXIuZXJyb3JzO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0SnNvbk9iamVjdChqc29uT2JqOiBhbnkpIHtcbiAgICB0aGlzLmZyb21KU09OKGpzb25PYmopO1xuICB9XG4gIHByaXZhdGUgaXNFbmRMb2FkaW5nRnJvbUpzb246IHN0cmluZyA9IG51bGw7XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gXCJwcm9jZXNzaW5nXCI7XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkO1xuICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChcInN0YW5kYXJkXCIpO1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIGlmICh0aGlzLmhhc0Nvb2tpZSkge1xuICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XG4gICAgfVxuICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xuICAgIHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPSBcImNvbmRpdGlvbnNcIjtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgIHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPSBudWxsO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVDcmVhdGluZygpIHt9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge31cbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZUNvcmUodGV4dFZhbHVlKTtcbiAgICBpZiAoIXRoaXMub25Qcm9jZXNzVGV4dFZhbHVlLmlzRW1wdHkpIHtcbiAgICAgIHZhciB3YXNFbXB0eSA9IHRoaXMuaXNWYWx1ZUVtcHR5KHRleHRWYWx1ZS52YWx1ZSk7XG4gICAgICB0aGlzLm9uUHJvY2Vzc1RleHRWYWx1ZS5maXJlKHRoaXMsIHRleHRWYWx1ZSk7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPVxuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgfHwgKHdhc0VtcHR5ICYmICF0aGlzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWVDb3JlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogdm9pZCB7XG4gICAgdmFyIG5hbWUgPSB0ZXh0VmFsdWUubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmIChbXCJub1wiLCBcInJlcXVpcmVcIiwgXCJ0aXRsZVwiXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJwYWdlbm9cIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHBhZ2UgIT0gbnVsbCA/IHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YocGFnZSkgKyAxIDogMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwicGFnZWNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLnZpc2libGVQYWdlQ291bnQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImxvY2FsZVwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gISF0aGlzLmxvY2FsZVxuICAgICAgICA/IHRoaXMubG9jYWxlXG4gICAgICAgIDogc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImNvcnJlY3RlZGFuc3dlcnNcIiB8fCBuYW1lID09PSBcImNvcnJlY3RlZGFuc3dlcmNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImluY29ycmVjdGVkYW5zd2Vyc1wiIHx8IG5hbWUgPT09IFwiaW5jb3JyZWN0ZWRhbnN3ZXJjb3VudFwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5nZXRJbkNvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcInF1ZXN0aW9uY291bnRcIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9uQ291bnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHZhcmlhYmxlID0gdGhpcy5nZXRWYXJpYWJsZShuYW1lKTtcbiAgICBpZiAodmFyaWFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHZhcmlhYmxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB2YXIgZmlyc3ROYW1lID0gcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIG5hbWUgPSBmaXJzdE5hbWUgKyBuYW1lLnN1YnN0cihmaXJzdE5hbWUubGVuZ3RoKTtcbiAgICAgIG5hbWUgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgIHZhbHVlc1tmaXJzdE5hbWVdID0gdGV4dFZhbHVlLnJldHVybkRpc3BsYXlWYWx1ZVxuICAgICAgICA/IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShmYWxzZSwgdW5kZWZpbmVkKVxuICAgICAgICA6IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKG5hbWUsIHZhbHVlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUodGV4dFZhbHVlLm5hbWUpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0Rmlyc3ROYW1lKG5hbWU6IHN0cmluZyk6IElRdWVzdGlvbiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcXVlc3Rpb247XG4gICAgZG8ge1xuICAgICAgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSwgdHJ1ZSk7XG4gICAgICBuYW1lID0gdGhpcy5yZWR1Y2VGaXJzdE5hbWUobmFtZSk7XG4gICAgfSB3aGlsZSAoIXF1ZXN0aW9uICYmICEhbmFtZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgcmVkdWNlRmlyc3ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBvczEgPSBuYW1lLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICB2YXIgcG9zMiA9IG5hbWUubGFzdEluZGV4T2YoXCJbXCIpO1xuICAgIGlmIChwb3MxIDwgMCAmJiBwb3MyIDwgMCkgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHBvcyA9IE1hdGgubWF4KHBvczEsIHBvczIpO1xuICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCBwb3MpO1xuICB9XG4gIHByaXZhdGUgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVW51c2VkVmFsdWVzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzICE9IFwibm9uZVwiKSB7XG4gICAgICB0aGlzLmNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1Zpc2libGUpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcXVlc3Rpb25Db3VudEJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIHJldHVybiAhIXF1ZXN0aW9ucyA/IHF1ZXN0aW9ucy5sZW5ndGggOiAwO1xuICB9XG4gIHByaXZhdGUgY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdmFyaWFibGUgdmFsdWUuIFZhcmlhYmxlLCB1bmxpa2UgdmFsdWVzLCBhcmUgbm90IHN0b3JlZCBpbiB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqIEBwYXJhbSBuYW1lIEEgdmFyaWFibGUgbmFtZVxuICAgKiBAc2VlIFNldFZhcmlhYmxlXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHJlcykpIHJldHVybiByZXM7XG4gICAgaWYgKG5hbWUuaW5kZXhPZihcIi5cIikgPiAtMSB8fCBuYW1lLmluZGV4T2YoXCJbXCIpID4gLTEpIHtcbiAgICAgIGlmIChuZXcgUHJvY2Vzc1ZhbHVlKCkuaGFzVmFsdWUobmFtZSwgdGhpcy52YXJpYWJsZXNIYXNoKSlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhcmlhYmxlc0hhc2gpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgdmFyaWFibGUgdmFsdWUuIFZhcmlhYmxlLCB1bmxpa2UgdmFsdWVzLCBhcmUgbm90IHN0b3JlZCBpbiB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqIEBwYXJhbSBuYW1lIEEgdmFyaWFibGUgbmFtZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgQSB2YXJpYWJsZSBuZXcgdmFsdWVcbiAgICogQHNlZSBHZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuO1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy52YXJpYWJsZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XG4gICAgdGhpcy5ub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChuYW1lKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbGwgdmFyaWFibGVzIGluIHRoZSBzdXJ2ZXkuIFVzZSBzZXRWYXJpYWJsZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgdmFyaWFibGUuXG4gICAqIEBzZWUgZ2V0VmFyaWFibGVcbiAgICogQHNlZSBzZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIGdldFZhcmlhYmxlTmFtZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhcmlhYmxlc0hhc2gpIHtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLy9JU3VydmV5IGRhdGFcbiAgcHJvdGVjdGVkIGdldFVuYmluZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpIGJ5IGEgcXVlc3Rpb24ncyBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBBIHF1ZXN0aW9uIG5hbWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKS4gSXQgcnVucyBhbGwgdHJpZ2dlcnMgYW5kIGNvbmRpdGlvbnMgKGB2aXNpYmxlSWZgIHByb3BlcnRpZXMpLlxuICAgKlxuICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2UgaWYgYGdvTmV4dFBhZ2VBdXRvbWF0aWNgIGlzIGB0cnVlYCBhbmQgYWxsIHF1ZXN0aW9ucyBvbiB0aGUgY3VycmVudCBwYWdlIGFyZSBhbnN3ZXJlZCBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgQSBuZXcgcXVlc3Rpb24gdmFsdWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgZ2V0VmFsdWVcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZUlmXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJsZUlmXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKi9cbiAgcHVibGljIHNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdRdWVzdGlvblZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdmFyIG5ld1ZhbHVlID0gbmV3UXVlc3Rpb25WYWx1ZTtcbiAgICBpZiAoYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5xdWVzdGlvbk9uVmFsdWVDaGFuZ2luZyhuYW1lLCBuZXdRdWVzdGlvblZhbHVlKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nICYmXG4gICAgICB0aGlzLmNoZWNrRXJyb3JzT25WYWx1ZUNoYW5naW5nKG5hbWUsIG5ld1ZhbHVlKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5lZGl0aW5nT2JqICYmXG4gICAgICB0aGlzLmlzVmFsdWVFcXVhbChuYW1lLCBuZXdWYWx1ZSkgJiZcbiAgICAgIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgbmV3UXVlc3Rpb25WYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLmRlbGV0ZURhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVPblNldFZhbHVlKFxuICAgICAgbmFtZSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgICAgb2xkVmFsdWUsXG4gICAgICBsb2NOb3RpZmljYXRpb24sXG4gICAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVPblNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvblZhbHVlKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAobG9jTm90aWZpY2F0aW9uID09PSB0cnVlIHx8IHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIHZhciB0cmlnZ2VyS2V5czogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdHJpZ2dlcktleXNbbmFtZV0gPSB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgb2xkVmFsdWU6IG9sZFZhbHVlIH07XG4gICAgdGhpcy5ydW5Db25kaXRpb25PblZhbHVlQ2hhbmdlZChuYW1lLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5jaGVja1RyaWdnZXJzKHRyaWdnZXJLZXlzLCBmYWxzZSk7XG4gICAgaWYgKGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKVxuICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAobG9jTm90aWZpY2F0aW9uICE9PSBcInRleHRcIikge1xuICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCh0cnVlKTtcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVFcXVhbChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIgfHwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgbmV3VmFsdWUgPSBudWxsO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgaWYgKG9sZFZhbHVlID09PSBcIlwiIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIG9sZFZhbHVlID0gbnVsbDtcbiAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IG51bGwpIHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBkb09uUGFnZUFkZGVkKHBhZ2U6IFBhZ2VNb2RlbCkge1xuICAgIHBhZ2Uuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBpZiAoIXBhZ2UubmFtZSkgcGFnZS5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUodGhpcy5wYWdlcywgXCJwYWdlXCIpO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNQYW5lbEFkZGVkKHBhZ2UpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0geyBwYWdlOiBwYWdlIH07XG4gICAgdGhpcy5vblBhZ2VBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIHByb3RlY3RlZCBkb09uUGFnZVJlbW92ZWQocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKG51bGwpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTGF6eVJlbmRlcmluZ1Jvd3NPblJlbW92aW5nRWxlbWVudHMoKTtcbiAgfVxuICBwcml2YXRlIGdlbmVyYXRlTmV3TmFtZShlbGVtZW50czogQXJyYXk8YW55PiwgYmFzZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIGtleXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIGtleXNbZWxlbWVudHNbaV1bXCJuYW1lXCJdXSA9IHRydWU7XG4gICAgdmFyIGluZGV4ID0gMTtcbiAgICB3aGlsZSAoa2V5c1tiYXNlTmFtZSArIGluZGV4XSkgaW5kZXgrKztcbiAgICByZXR1cm4gYmFzZU5hbWUgKyBpbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgdHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgICF0aGlzLmdvTmV4dFBhZ2VBdXRvbWF0aWMgfHxcbiAgICAgICF0aGlzLmN1cnJlbnRQYWdlXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbiA9IDxRdWVzdGlvbj50aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgaWYgKFxuICAgICAgIXF1ZXN0aW9uIHx8XG4gICAgICAoISFxdWVzdGlvbiAmJlxuICAgICAgICAoIXF1ZXN0aW9uLnZpc2libGUgfHwgIXF1ZXN0aW9uLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkpKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAocXVlc3Rpb24uaGFzRXJyb3JzKGZhbHNlKSAmJiAhcXVlc3Rpb24uc3VwcG9ydEdvTmV4dFBhZ2VFcnJvcigpKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoKTtcbiAgICBpZiAocXVlc3Rpb25zLmluZGV4T2YocXVlc3Rpb24pIDwgMCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocXVlc3Rpb25zW2ldLmhhc0lucHV0ICYmIHF1ZXN0aW9uc1tpXS5pc0VtcHR5KCkpIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrSXNDdXJyZW50UGFnZUhhc0Vycm9ycyhmYWxzZSkpIHtcbiAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKSB7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmdvTmV4dFBhZ2VBdXRvbWF0aWMgPT09IHRydWUgJiZcbiAgICAgICAgICB0aGlzLmFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbW1lbnQgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIEEgY29tbWVudCdzIG5hbWUuXG4gICAqIEBzZWUgc2V0Q29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhW25hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXhdO1xuICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gXCJcIjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgY29tbWVudCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgQSBjb21tZW50IG5hbWUuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSBBIG5ldyBjb21tZW50IHZhbHVlLlxuICAgKiBAc2VlIGdldENvbW1lbnRcbiAgICovXG4gIHB1YmxpYyBzZXRDb21tZW50KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogc3RyaW5nLFxuICAgIGxvY05vdGlmaWNhdGlvbjogYW55ID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSBcIlwiO1xuICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHRoaXMuZ2V0Q29tbWVudChuYW1lKSkpIHJldHVybjtcbiAgICB2YXIgY29tbWVudE5hbWUgPSBuYW1lICsgdGhpcy5jb21tZW50UHJlZml4O1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGNvbW1lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgY29tbWVudE5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgaWYgKCEhcXVlc3Rpb25zKSB7XG4gICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb25zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxvY05vdGlmaWNhdGlvbiAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgIG5hbWU6IGNvbW1lbnROYW1lLFxuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsdWUuIFR5cGljYWxseSBpdCBpcyBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFZhbHVlKG5hbWUsIG51bGwpO1xuICAgIHRoaXMuc2V0Q29tbWVudChuYW1lLCBudWxsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gY2xlYXIgdmFsdWUgb24gZGlzYWJsZSBpdGVtcyBpbiBjaGVja2JveCwgZHJvcGRvd24gYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLlxuICAgKiBCeSBkZWZhdWx0LCB2YWx1ZXMgYXJlIG5vdCBjbGVhcmVkIG9uIGRpc2FibGVkIHRoZSBjb3JyZXNwb25kZWQgaXRlbXMuIFRoaXMgcHJvcGVydHkgaXMgbm90IHBlcnNpc3RlZCBpbiBzdXJ2ZXkgSlNPTiBhbmQgeW91IGhhdmUgdG8gc2V0IGl0IGluIGNvZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGVhclZhbHVlT25EaXNhYmxlSXRlbXNcIiwgdmFsKTtcbiAgfVxuICBnZXQgaXNDbGVhclZhbHVlT25IaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgPT0gXCJvbkhpZGRlblwiIHx8XG4gICAgICB0aGlzLmlzQ2xlYXJWYWx1ZU9uSGlkZGVuQ29udGFpbmVyXG4gICAgKTtcbiAgfVxuICBnZXQgaXNDbGVhclZhbHVlT25IaWRkZW5Db250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgPT0gXCJvbkhpZGRlbkNvbnRhaW5lclwiICYmXG4gICAgICAhdGhpcy5pc1Nob3dpbmdQcmV2aWV3ICYmXG4gICAgICAhdGhpcy5ydW5uaW5nUGFnZXNcbiAgICApO1xuICB9XG4gIHF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgIHZpc2libGU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9XG4gIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIGlmIChuZXdWYWx1ZSAmJiAhdGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICB2aXNpYmxlOiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgfVxuICBwYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHBhbmVsOiBJUGFuZWwsIG5ld1ZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25QYW5lbFZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgdmlzaWJsZTogbmV3VmFsdWUsXG4gICAgfSk7XG4gIH1cbiAgcXVlc3Rpb25DcmVhdGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBhbnkge1xuICAgIHRoaXMub25RdWVzdGlvbkNyZWF0ZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiB9KTtcbiAgfVxuICBxdWVzdGlvbkFkZGVkKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYXJlbnRQYW5lbDogYW55LFxuICAgIHJvb3RQYW5lbDogYW55XG4gICkge1xuICAgIGlmICghcXVlc3Rpb24ubmFtZSkge1xuICAgICAgcXVlc3Rpb24ubmFtZSA9IHRoaXMuZ2VuZXJhdGVOZXdOYW1lKFxuICAgICAgICB0aGlzLmdldEFsbFF1ZXN0aW9ucyhmYWxzZSwgdHJ1ZSksXG4gICAgICAgIFwicXVlc3Rpb25cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhKDxRdWVzdGlvbj5xdWVzdGlvbikucGFnZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKDxRdWVzdGlvbj5xdWVzdGlvbik7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUXVlc3Rpb25BZGRlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwYXJlbnRQYW5lbDogcGFyZW50UGFuZWwsXG4gICAgICByb290UGFuZWw6IHJvb3RQYW5lbCxcbiAgICB9KTtcbiAgfVxuICBxdWVzdGlvblJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbikge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNSZW1vdmVkKFxuICAgICAgPFF1ZXN0aW9uPnF1ZXN0aW9uLFxuICAgICAgcXVlc3Rpb24ubmFtZSxcbiAgICAgIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblF1ZXN0aW9uUmVtb3ZlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVMYXp5UmVuZGVyaW5nUm93c09uUmVtb3ZpbmdFbGVtZW50cygpO1xuICB9XG4gIHF1ZXN0aW9uUmVuYW1lZChcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIG9sZE5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZU5hbWU6IHN0cmluZ1xuICApOiBhbnkge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNSZW1vdmVkKDxRdWVzdGlvbj5xdWVzdGlvbiwgb2xkTmFtZSwgb2xkVmFsdWVOYW1lKTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQoPFF1ZXN0aW9uPnF1ZXN0aW9uKTtcbiAgfVxuICBwcml2YXRlIHF1ZXN0aW9uSGFzaGVzID0ge1xuICAgIG5hbWVzOiB7fSxcbiAgICBuYW1lc0luc2Vuc2l0aXZlOiB7fSxcbiAgICB2YWx1ZU5hbWVzOiB7fSxcbiAgICB2YWx1ZU5hbWVzSW5zZW5zaXRpdmU6IHt9LFxuICB9O1xuICBwcml2YXRlIHF1ZXN0aW9uSGFzaGVzQ2xlYXIoKSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcyA9IHt9O1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXNJbnNlbnNpdGl2ZSA9IHt9O1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lcyA9IHt9O1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lc0luc2Vuc2l0aXZlID0ge307XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc1BhbmVsQWRkZWQocGFuZWw6IFBhbmVsTW9kZWxCYXNlKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQocXVlc3Rpb25zW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc0FkZGVkKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcyxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgcXVlc3Rpb24ubmFtZVxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUoXG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmUsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUoXG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpXG4gICAgKTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaEFkZGVkQ29yZShcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHF1ZXN0aW9uSGFzaGVzUmVtb3ZlZChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlTmFtZTogc3RyaW5nXG4gICkge1xuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUodGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcywgcXVlc3Rpb24sIG5hbWUpO1xuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hSZW1vdmVkQ29yZShcbiAgICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoXG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lcyxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlTmFtZVxuICAgICAgKTtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoXG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgdmFsdWVOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoQWRkZWRDb3JlKGhhc2g6IGFueSwgcXVlc3Rpb246IFF1ZXN0aW9uLCBuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICBpZiAoISFyZXMpIHtcbiAgICAgIHZhciByZXMgPSBoYXNoW25hbWVdO1xuICAgICAgaWYgKHJlcy5pbmRleE9mKHF1ZXN0aW9uKSA8IDApIHtcbiAgICAgICAgcmVzLnB1c2gocXVlc3Rpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYXNoW25hbWVdID0gW3F1ZXN0aW9uXTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hSZW1vdmVkQ29yZShoYXNoOiBhbnksIHF1ZXN0aW9uOiBRdWVzdGlvbiwgbmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgaWYgKCFyZXMpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSByZXMuaW5kZXhPZihxdWVzdGlvbik7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICBpZiAocmVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBkZWxldGUgaGFzaFtuYW1lXTtcbiAgICB9XG4gIH1cbiAgcGFuZWxBZGRlZChwYW5lbDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KSB7XG4gICAgaWYgKCFwYW5lbC5uYW1lKSB7XG4gICAgICBwYW5lbC5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUoXG4gICAgICAgIHRoaXMuZ2V0QWxsUGFuZWxzKGZhbHNlLCB0cnVlKSxcbiAgICAgICAgXCJwYW5lbFwiXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUGFuZWxBZGRlZCg8UGFuZWxNb2RlbEJhc2U+KDxhbnk+cGFuZWwpKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhbmVsQWRkZWQuZmlyZSh0aGlzLCB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICBuYW1lOiBwYW5lbC5uYW1lLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcGFyZW50UGFuZWw6IHBhcmVudFBhbmVsLFxuICAgICAgcm9vdFBhbmVsOiByb290UGFuZWwsXG4gICAgfSk7XG4gIH1cbiAgcGFuZWxSZW1vdmVkKHBhbmVsOiBJRWxlbWVudCkge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUGFuZWxSZW1vdmVkLmZpcmUodGhpcywgeyBwYW5lbDogcGFuZWwsIG5hbWU6IHBhbmVsLm5hbWUgfSk7XG4gICAgdGhpcy51cGRhdGVMYXp5UmVuZGVyaW5nUm93c09uUmVtb3ZpbmdFbGVtZW50cygpO1xuICB9XG4gIHZhbGlkYXRlUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUXVlc3Rpb24uaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHZhbGlkYXRlUGFuZWwocGFuZWw6IElQYW5lbCk6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUGFuZWwuaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBwYW5lbC5uYW1lLFxuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVBhbmVsLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IGh0bWw6IGh0bWwgfTtcbiAgICB0aGlzLm9uUHJvY2Vzc0h0bWwuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dChvcHRpb25zLmh0bWwsIHRydWUpO1xuICB9XG4gIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dEV4KHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZmFsc2UpLnRleHQ7XG4gIH1cbiAgcHJvY2Vzc1RleHRFeChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuLFxuICAgIGRvRW5jb2Rpbmc6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgdGV4dDogdGhpcy5wcm9jZXNzVGV4dENvcmUodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBkb0VuY29kaW5nKSxcbiAgICAgIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSxcbiAgICB9O1xuICAgIHJlcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IuaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzVGV4dENvcmUoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbixcbiAgICBkb0VuY29kaW5nOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGRvRW5jb2RpbmcpO1xuICB9XG4gIGdldFN1cnZleU1hcmtkb3duSHRtbChlbGVtZW50OiBCYXNlLCB0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBodG1sOiA8YW55Pm51bGwsXG4gICAgfTtcbiAgICB0aGlzLm9uVGV4dE1hcmtkb3duLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuaHRtbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhbW91bnQgb2YgY29ycmVjdGVkIHF1aXogYW5zd2Vycy5cbiAgICovXG4gIHB1YmxpYyBnZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50Q29yZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWl6IHF1ZXN0aW9uIG51bWJlci4gSXQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIGBnZXRRdWl6UXVlc3Rpb25zLmxlbmd0aGAgYmVjYXVzZSBzb21lIHdpZGdldHMgbGlrZSBtYXRyaXggbWF5IGhhdmUgc2V2ZXJhbCBxdWVzdGlvbnMuXG4gICAqIEBzZWUgZ2V0UXVpelF1ZXN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldFF1aXpRdWVzdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgKz0gKDxRdWVzdGlvbj5xdWVzdGlvbnNbaV0pLnF1aXpRdWVzdGlvbkNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFtb3VudCBvZiBpbmNvcnJlY3QgcXVpeiBhbnN3ZXJzLlxuICAgKi9cbiAgcHVibGljIGdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudENvcmUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnRDb3JlKGlzQ29ycmVjdDogYm9vbGVhbik6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiA8SVF1ZXN0aW9uPm51bGwsXG4gICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgY29ycmVjdEFuc3dlcnM6IDAsXG4gICAgICBpbmNvcnJlY3RBbnN3ZXJzOiAwLFxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gPFF1ZXN0aW9uPnF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBxdWl6UXVlc3Rpb25Db3VudCA9IHEucXVpelF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLnF1ZXN0aW9uID0gcTtcbiAgICAgIG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPSBxLmNvcnJlY3RBbnN3ZXJDb3VudDtcbiAgICAgIG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA9IHF1aXpRdWVzdGlvbkNvdW50IC0gb3B0aW9ucy5jb3JyZWN0QW5zd2VycztcbiAgICAgIG9wdGlvbnMucmVzdWx0ID0gb3B0aW9ucy5xdWVzdGlvbi5pc0Fuc3dlckNvcnJlY3QoKTtcbiAgICAgIHRoaXMub25Jc0Fuc3dlckNvcnJlY3QuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgIGlmIChpc0NvcnJlY3QpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPCBxdWl6UXVlc3Rpb25Db3VudCkge1xuICAgICAgICAgIHZhciBhZGRDb3VudCA9IG9wdGlvbnMuY29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgaWYgKGFkZENvdW50ID09IDAgJiYgb3B0aW9ucy5yZXN1bHQpIGFkZENvdW50ID0gMTtcbiAgICAgICAgICBjb3VudGVyICs9IGFkZENvdW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA8IHF1aXpRdWVzdGlvbkNvdW50KSB7XG4gICAgICAgICAgY291bnRlciArPSBvcHRpb25zLmluY29ycmVjdEFuc3dlcnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH1cbiAgZ2V0Q29ycmVjdGVkQW5zd2VycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gIH1cbiAgZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB0aW1lciBwYW5lbCBwb3NpdGlvbi4gVGhlIHRpbWVyIHBhbmVsIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IGhvdyBtdWNoIHRpbWUgYW4gZW5kIHVzZXIgc3BlbmRzIG9uIGEgc3VydmV5L3BhZ2UuXG4gICAqXG4gICAqIFRoZSBhdmFpbGFibGUgb3B0aW9uczpcbiAgICogLSBgdG9wYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIHRvcC5cbiAgICogLSBgYm90dG9tYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIGJvdHRvbS5cbiAgICogLSBgbm9uZWAgLSBkbyBub3QgZGlzcGxheSBhIHRpbWVyIHBhbmVsLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGVxdWFsIHRvICdub25lJywgdGhlIHN1cnZleSBjYWxscyB0aGUgYHN0YXJ0VGltZXIoKWAgbWV0aG9kIG9uIHN1cnZleSByZW5kZXJpbmcuXG4gICAqIEBzZWUgc2hvd1RpbWVyUGFuZWxNb2RlXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHN0b3BUaW1lclxuICAgKi9cbiAgcHVibGljIGdldCBzaG93VGltZXJQYW5lbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbFwiLCBcIm5vbmVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaW1lclBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1RpbWVyUGFuZWxTaG93aW5nT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUaW1lclN0YXJ0ZWQgJiYgdGhpcy5zaG93VGltZXJQYW5lbCA9PSBcInRvcFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmlzVGltZXJTdGFydGVkICYmIHRoaXMuc2hvd1RpbWVyUGFuZWwgPT0gXCJib3R0b21cIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXQgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0aW1lciBkaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2Ugb3IgZm9yIHRoZSBlbnRpcmUgc3VydmV5LlxuICAgKlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHBhZ2VgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3IgcGFnZVxuICAgKiAtIGBzdXJ2ZXlgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3Igc3VydmV5XG4gICAqXG4gICAqIFVzZSB0aGUgYG9uVGltZXJQYW5lbEluZm9UZXh0YCBldmVudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICogQHNlZSBzaG93VGltZXJQYW5lbFxuICAgKiBAc2VlIG9uVGltZXJQYW5lbEluZm9UZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUaW1lclBhbmVsTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgXCJhbGxcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbE1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpbWVySW5mb1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgdGV4dDogdGhpcy5nZXRUaW1lckluZm9UZXh0KCkgfTtcbiAgICB0aGlzLm9uVGltZXJQYW5lbEluZm9UZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIGxvYyA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLCB0cnVlKTtcbiAgICBsb2MudGV4dCA9IG9wdGlvbnMudGV4dDtcbiAgICByZXR1cm4gbG9jLnRleHRPckh0bWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUaW1lckluZm9UZXh0KCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiBcIlwiO1xuICAgIHZhciBwYWdlU3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2UudGltZVNwZW50KTtcbiAgICB2YXIgc3VydmV5U3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHRoaXMudGltZVNwZW50KTtcbiAgICB2YXIgcGFnZUxpbWl0U2VjID0gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpO1xuICAgIHZhciBwYWdlTGltaXQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2VMaW1pdFNlYyk7XG4gICAgdmFyIHN1cnZleUxpbWl0ID0gdGhpcy5nZXREaXNwbGF5VGltZSh0aGlzLm1heFRpbWVUb0ZpbmlzaCk7XG4gICAgaWYgKHRoaXMuc2hvd1RpbWVyUGFuZWxNb2RlID09IFwicGFnZVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvUGFnZVRleHQocGFnZSwgcGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcInN1cnZleVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcImFsbFwiKSB7XG4gICAgICBpZiAocGFnZUxpbWl0U2VjIDw9IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPD0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJ0aW1lclNwZW50QWxsXCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICAgIHBhZ2VTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHBhZ2VMaW1pdFNlYyA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyTGltaXRBbGxcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgICAgcGFnZVNwZW50LFxuICAgICAgICAgIHBhZ2VMaW1pdCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHBhZ2VUZXh0ID0gdGhpcy5nZXRUaW1lckluZm9QYWdlVGV4dChwYWdlLCBwYWdlU3BlbnQsIHBhZ2VMaW1pdCk7XG4gICAgICBsZXQgc3VydmV5VGV4dCA9IHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgICAgcmV0dXJuIHBhZ2VUZXh0ICsgXCIgXCIgKyBzdXJ2ZXlUZXh0O1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcml2YXRlIGdldFRpbWVySW5mb1BhZ2VUZXh0KFxuICAgIHBhZ2U6IFBhZ2VNb2RlbCxcbiAgICBwYWdlU3BlbnQ6IHN0cmluZyxcbiAgICBwYWdlTGltaXQ6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSkgPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICB9XG4gIHByaXZhdGUgZ2V0VGltZXJJbmZvU3VydmV5VGV4dChcbiAgICBzdXJ2ZXlTcGVudDogc3RyaW5nLFxuICAgIHN1cnZleUxpbWl0OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0RGlzcGxheVRpbWUodmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHZhciBtaW4gPSBNYXRoLmZsb29yKHZhbCAvIDYwKTtcbiAgICB2YXIgc2VjID0gdmFsICUgNjA7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKG1pbiA+IDApIHtcbiAgICAgIHJlcyArPSBtaW4gKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJNaW5cIik7XG4gICAgfVxuICAgIGlmIChyZXMgJiYgc2VjID09IDApIHJldHVybiByZXM7XG4gICAgaWYgKHJlcykgcmVzICs9IFwiIFwiO1xuICAgIHJldHVybiByZXMgKyBzZWMgKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTZWNcIik7XG4gIH1cbiAgcHJpdmF0ZSB0aW1lckZ1bmM6IGFueSA9IG51bGw7XG4gIC8qKlxuICAgKiBTdGFydHMgYSB0aW1lciB0aGF0IHdpbGwgY2FsY3VsYXRlIGhvdyBtdWNoIHRpbWUgZW5kLXVzZXIgc3BlbmRzIG9uIHRoZSBzdXJ2ZXkgb3Igb24gcGFnZXMuXG4gICAqIEBzZWUgc3RvcFRpbWVyXG4gICAqIEBzZWUgdGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgc3RhcnRUaW1lcigpIHtcbiAgICBpZiAodGhpcy5pc1RpbWVyU3RhcnRlZCB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnRpbWVyRnVuYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5kb1RpbWVyKCk7XG4gICAgfTtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gdHJ1ZTtcbiAgICBTdXJ2ZXlUaW1lci5pbnN0YW5jZS5zdGFydCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgc3RhcnRUaW1lckZyb21VSSgpIHtcbiAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbCAhPSBcIm5vbmVcIiAmJiB0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgdGltZXIuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIHN0b3BUaW1lcigpIHtcbiAgICBpZiAoIXRoaXMuaXNUaW1lclN0YXJ0ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gZmFsc2U7XG4gICAgU3VydmV5VGltZXIuaW5zdGFuY2Uuc3RvcCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcyBhbiBlbmQgdXNlciBzcGVuZHMgb24gdGhlIHN1cnZleVxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSBQYWdlTW9kZWwudGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgdGltZVNwZW50ID0gMDtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0IHRvIGZpbmlzaCBhIHN1cnZleS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgbWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBwYWdlIGluIHRoZSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0LlxuICAgKlxuICAgKiBZb3UgbWF5IG92ZXJyaWRlIHRoaXMgdmFsdWUgZm9yIGV2ZXJ5IHBhZ2UuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFxuICAgKiBAc2VlIFBhZ2VNb2RlbC5tYXhUaW1lVG9GaW5pc2hcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VGltZVRvRmluaXNoUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoUGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFBhZ2VcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKCFwYWdlIHx8IHBhZ2UubWF4VGltZVRvRmluaXNoIDwgMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHBhZ2UubWF4VGltZVRvRmluaXNoID4gMFxuICAgICAgPyBwYWdlLm1heFRpbWVUb0ZpbmlzaFxuICAgICAgOiB0aGlzLm1heFRpbWVUb0ZpbmlzaFBhZ2U7XG4gIH1cbiAgcHJvdGVjdGVkIGRvVGltZXIoKSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmIChwYWdlKSB7XG4gICAgICBwYWdlLnRpbWVTcGVudCA9IHBhZ2UudGltZVNwZW50ICsgMTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3BlbnQgPSB0aGlzLnRpbWVTcGVudCArIDE7XG4gICAgdGhpcy5vblRpbWVyLmZpcmUodGhpcywge30pO1xuICAgIGlmICh0aGlzLm1heFRpbWVUb0ZpbmlzaCA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPT0gdGhpcy50aW1lU3BlbnQpIHtcbiAgICAgIHRoaXMuY29tcGxldGVMYXN0UGFnZSgpO1xuICAgIH1cbiAgICBpZiAocGFnZSkge1xuICAgICAgdmFyIHBhZ2VMaW1pdCA9IHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKTtcbiAgICAgIGlmIChwYWdlTGltaXQgPiAwICYmIHBhZ2VMaW1pdCA9PSBwYWdlLnRpbWVTcGVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaW5TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy9JU3VydmV5SW1wbGVtZW50b3JcbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vSVN1cnZleVRyaWdnZXJPd25lclxuICBnZXRPYmplY3RzKHBhZ2VzOiBzdHJpbmdbXSwgcXVlc3Rpb25zOiBzdHJpbmdbXSk6IGFueVtdIHtcbiAgICB2YXIgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRQYWdlc0J5TmFtZXMocGFnZXMpKTtcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lcyhxdWVzdGlvbnMpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcbiAgICBpZiAoaXNWYXJpYWJsZSkge1xuICAgICAgdGhpcy5zZXRWYXJpYWJsZShuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3Nvci5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICAgIGlmIChmaXJzdE5hbWUgPT0gbmFtZSkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUpKSByZXR1cm47XG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSk7XG4gICAgICAgICAgcHJvY2Vzc29yLnNldFZhbHVlKGRhdGEsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGZpcnN0TmFtZSwgZGF0YVtmaXJzdE5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb3B5VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgZnJvbU5hbWU6IHN0cmluZykge1xuICAgIGlmICghbmFtZSB8fCAhZnJvbU5hbWUpIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgIHZhciB2YWx1ZSA9IHByb2Nlc3Nvci5nZXRWYWx1ZShmcm9tTmFtZSwgdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpKTtcbiAgICB0aGlzLnNldFRyaWdnZXJWYWx1ZShuYW1lLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgaXNGb2N1c2luZ1F1ZXN0aW9uOiBib29sZWFuO1xuICBmb2N1c1F1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSwgdHJ1ZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCAhcXVlc3Rpb24uaXNWaXNpYmxlIHx8ICFxdWVzdGlvbi5wYWdlKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5pc0ZvY3VzaW5nUXVlc3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSA8UGFnZU1vZGVsPnF1ZXN0aW9uLnBhZ2U7XG4gICAgcXVlc3Rpb24uZm9jdXMoKTtcbiAgICB0aGlzLmlzRm9jdXNpbmdRdWVzdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoZWxlbWVudDogYW55LCByZWFzb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChyZWFzb24gPT09IFwibG9nby1pbWFnZVwiKSB7XG4gICAgICByZXR1cm4gXCJzdi1sb2dvLWltYWdlXCI7XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5UZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUocm93OiBRdWVzdGlvblJvd01vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShlbGVtZW50OiBhbnksIHJlYXNvbj86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgcHVibGljIGdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdzogUXVlc3Rpb25Sb3dNb2RlbCk6IGFueSB7XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHVibGljIGdldE1hdHJpeENlbGxUZW1wbGF0ZURhdGEoY2VsbDogYW55KSB7XG4gICAgcmV0dXJuIGNlbGwucXVlc3Rpb247XG4gIH1cbiAgcHVibGljIHNlYXJjaFRleHQodGV4dDogc3RyaW5nKTogQXJyYXk8SUZpbmRFbGVtZW50PiB7XG4gICAgaWYgKCEhdGV4dCkgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzOiBBcnJheTxJRmluZEVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnNlYXJjaFRleHQodGV4dCwgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIGRpc3Bvc2Ugc3VydmV5IG1vZGVsIHByb3Blcmx5LlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMuZWRpdGluZ09iaiA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnBhZ2VzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJzdXJ2ZXlcIiwgW1xuICB7XG4gICAgbmFtZTogXCJsb2NhbGVcIixcbiAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXModHJ1ZSk7XG4gICAgfSxcbiAgICBvbkdldFZhbHVlOiAob2JqOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIG9iai5sb2NhbGUgPT0gc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGUgPyBudWxsIDogb2JqLmxvY2FsZTtcbiAgICB9LFxuICB9LFxuICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIsIGRlcGVuZHNPbjogXCJsb2NhbGVcIiB9LFxuICB7XG4gICAgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIsXG4gICAgZGVwZW5kc09uOiBcImxvY2FsZVwiLFxuICB9LFxuICB7IG5hbWU6IFwibG9nb1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTG9nb1wiIH0sXG4gIHsgbmFtZTogXCJsb2dvV2lkdGhcIiwgZGVmYXVsdDogXCIzMDBweFwiLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibG9nb0hlaWdodFwiLCBkZWZhdWx0OiBcIjIwMHB4XCIsIG1pblZhbHVlOiAwIH0sXG4gIHtcbiAgICBuYW1lOiBcImxvZ29GaXRcIixcbiAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiY29udGFpblwiLCBcImNvdmVyXCIsIFwiZmlsbFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwibG9nb1Bvc2l0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJsZWZ0XCIsXG4gICAgY2hvaWNlczogW1wibm9uZVwiLCBcImxlZnRcIiwgXCJyaWdodFwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgfSxcbiAgeyBuYW1lOiBcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcImZvY3VzT25GaXJzdEVycm9yOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwiY29tcGxldGVkSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRIdG1sXCIgfSxcbiAge1xuICAgIG5hbWU6IFwiY29tcGxldGVkQmVmb3JlSHRtbDpodG1sXCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlZEJlZm9yZUh0bWxcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uOmh0bWxjb25kaXRpb25zXCIsXG4gICAgY2xhc3NOYW1lOiBcImh0bWxjb25kaXRpb25pdGVtXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJsb2FkaW5nSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMb2FkaW5nSHRtbFwiIH0sXG4gIHsgbmFtZTogXCJwYWdlczpzdXJ2ZXlwYWdlc1wiLCBjbGFzc05hbWU6IFwicGFnZVwiIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uc1wiLFxuICAgIGFsdGVybmF0aXZlTmFtZTogXCJlbGVtZW50c1wiLFxuICAgIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIixcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICBvbkdldFZhbHVlOiBmdW5jdGlvbihvYmo6IGFueSk6IGFueSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIG9uU2V0VmFsdWU6IGZ1bmN0aW9uKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udmVydGVyOiBhbnkpIHtcbiAgICAgIHZhciBwYWdlID0gb2JqLmFkZE5ld1BhZ2UoXCJcIik7XG4gICAgICBqc29uQ29udmVydGVyLnRvT2JqZWN0KHsgcXVlc3Rpb25zOiB2YWx1ZSB9LCBwYWdlKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJ0cmlnZ2Vyczp0cmlnZ2Vyc1wiLFxuICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dHJpZ2dlclwiLFxuICAgIGNsYXNzTmFtZVBhcnQ6IFwidHJpZ2dlclwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJjYWxjdWxhdGVkVmFsdWVzOmNhbGN1bGF0ZWR2YWx1ZXNcIixcbiAgICBjbGFzc05hbWU6IFwiY2FsY3VsYXRlZHZhbHVlXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJzdXJ2ZXlJZFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICB7IG5hbWU6IFwic3VydmV5UG9zdElkXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIHsgbmFtZTogXCJzdXJ2ZXlTaG93RGF0YVNhdmluZzpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIFwiY29va2llTmFtZVwiLFxuICBcInNlbmRSZXN1bHRPblBhZ2VOZXh0OmJvb2xlYW5cIixcbiAge1xuICAgIG5hbWU6IFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIsXG4gICAgZGVmYXVsdDogXCJib3R0b21cIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwiYm90aFwiXSxcbiAgfSxcbiAgeyBuYW1lOiBcInNob3dQcmV2QnV0dG9uOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd1RpdGxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd1BhZ2VUaXRsZXM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJzaG93Q29tcGxldGVkUGFnZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgXCJuYXZpZ2F0ZVRvVXJsXCIsXG4gIHtcbiAgICBuYW1lOiBcIm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvbjp1cmxjb25kaXRpb25zXCIsXG4gICAgY2xhc3NOYW1lOiBcInVybGNvbmRpdGlvbml0ZW1cIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zT3JkZXJcIixcbiAgICBkZWZhdWx0OiBcImluaXRpYWxcIixcbiAgICBjaG9pY2VzOiBbXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICB9LFxuICBcInNob3dQYWdlTnVtYmVyczpib29sZWFuXCIsXG4gIHtcbiAgICBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICBkZWZhdWx0OiBcIm9uXCIsXG4gICAgY2hvaWNlczogW1wib25cIiwgXCJvblBhZ2VcIiwgXCJvZmZcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwidG9wXCIsXG4gICAgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJ1bmRlclRpdGxlXCIsXG4gICAgY2hvaWNlczogW1widW5kZXJJbnB1dFwiLCBcInVuZGVyVGl0bGVcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIiwgZGVmYXVsdDogXCJ0b3BcIiwgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCJdIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgIGRlZmF1bHQ6IFwib2ZmXCIsXG4gICAgY2hvaWNlczogW1wib2ZmXCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwiYm90aFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicHJvZ3Jlc3NCYXJUeXBlXCIsXG4gICAgZGVmYXVsdDogXCJwYWdlc1wiLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIFwicGFnZXNcIixcbiAgICAgIFwicXVlc3Rpb25zXCIsXG4gICAgICBcInJlcXVpcmVkUXVlc3Rpb25zXCIsXG4gICAgICBcImNvcnJlY3RRdWVzdGlvbnNcIixcbiAgICAgIFwiYnV0dG9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHsgbmFtZTogXCJtb2RlXCIsIGRlZmF1bHQ6IFwiZWRpdFwiLCBjaG9pY2VzOiBbXCJlZGl0XCIsIFwiZGlzcGxheVwiXSB9LFxuICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJtYXhUZXh0TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibWF4T3RoZXJzTGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICBcImdvTmV4dFBhZ2VBdXRvbWF0aWM6Ym9vbGVhblwiLFxuICB7XG4gICAgbmFtZTogXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLFxuICAgIGRlZmF1bHQ6IFwib25Db21wbGV0ZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJvbkNvbXBsZXRlXCIsIFwib25IaWRkZW5cIiwgXCJvbkhpZGRlbkNvbnRhaW5lclwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY2hlY2tFcnJvcnNNb2RlXCIsXG4gICAgZGVmYXVsdDogXCJvbk5leHRQYWdlXCIsXG4gICAgY2hvaWNlczogW1wib25OZXh0UGFnZVwiLCBcIm9uVmFsdWVDaGFuZ2VkXCIsIFwib25WYWx1ZUNoYW5naW5nXCIsIFwib25Db21wbGV0ZVwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwidGV4dFVwZGF0ZU1vZGVcIixcbiAgICBkZWZhdWx0OiBcIm9uQmx1clwiLFxuICAgIGNob2ljZXM6IFtcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICB9LFxuICB7IG5hbWU6IFwic3RhcnRTdXJ2ZXlUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NTdGFydFN1cnZleVRleHRcIiB9LFxuICB7IG5hbWU6IFwicGFnZVByZXZUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlUHJldlRleHRcIiB9LFxuICB7IG5hbWU6IFwicGFnZU5leHRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlTmV4dFRleHRcIiB9LFxuICB7IG5hbWU6IFwiY29tcGxldGVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZVRleHRcIiB9LFxuICB7IG5hbWU6IFwicHJldmlld1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1ByZXZpZXdUZXh0XCIgfSxcbiAgeyBuYW1lOiBcImVkaXRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NFZGl0VGV4dFwiIH0sXG4gIHsgbmFtZTogXCJyZXF1aXJlZFRleHRcIiwgZGVmYXVsdDogXCIqXCIgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25TdGFydEluZGV4XCIsXG4gICAgZGVwZW5kc09uOiBbXCJzaG93UXVlc3Rpb25OdW1iZXJzXCJdLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24oc3VydmV5OiBhbnkpIHtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsXG4gICAgZGVmYXVsdDogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICBkZXBlbmRzT246IFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiXSxcbiAgICBjaG9pY2VzOiAob2JqOiBhbnkpID0+IHtcbiAgICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gb2JqLmdldFF1ZXN0aW9uVGl0bGVQYXR0ZXJuT3B0aW9ucygpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICB7XG4gICAgbmFtZTogXCJpc1NpbmdsZVBhZ2U6Ym9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zT25QYWdlTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwic3RhbmRhcmRcIixcbiAgICBjaG9pY2VzOiBbXCJzaW5nbGVQYWdlXCIsIFwic3RhbmRhcmRcIiwgXCJxdWVzdGlvblBlclBhZ2VcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIixcbiAgICBkZWZhdWx0OiBcIm5vUHJldmlld1wiLFxuICAgIGNob2ljZXM6IFtcIm5vUHJldmlld1wiLCBcInNob3dBbGxRdWVzdGlvbnNcIiwgXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2g6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2hQYWdlOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93VGltZXJQYW5lbFwiLFxuICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwiYWxsXCIsXG4gICAgY2hvaWNlczogW1wiYWxsXCIsIFwicGFnZVwiLCBcInN1cnZleVwiXSxcbiAgfSxcbl0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tICcuL3N1cnZleSc7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VydmV5OiBTdXJ2ZXlNb2RlbCkge1xuICB9XG4gIHB1YmxpYyBpc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgfHxcbiAgICAgIHRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuaXNFbXB0eSB8fFxuICAgICAgdGhpcy5zdXJ2ZXkuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikge1xuICAgICAgcmV0dXJuIHRydWU7ICAgIFxuICAgIH1cbiAgICByZXR1cm4gaW5kZXggPD0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyArIDE7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgbGV0IGVsZW1lbnRDc3M6IHN0cmluZyA9IHRoaXMuc3VydmV5LnZpc2libGVQYWdlc1tpbmRleF0ucGFzc2VkID9cbiAgICAgIHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZCA6IFwiXCI7XG4gICAgaWYgKHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8gPT09IGluZGV4KSB7XG4gICAgICBlbGVtZW50Q3NzICs9IGVsZW1lbnRDc3MgIT09IFwiXCIgPyBcIiBcIiA6IFwiXCI7XG4gICAgICBlbGVtZW50Q3NzICs9IHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KSkge1xuICAgICAgZWxlbWVudENzcyArPSBlbGVtZW50Q3NzICE9PSBcIlwiID8gXCIgXCIgOiBcIlwiO1xuICAgICAgZWxlbWVudENzcyArPSB0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50Q3NzO1xuICB9XG4gIHB1YmxpYyBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgaWYgKGluZGV4IDwgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyA9IGluZGV4O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA+IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8pIHtcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm87IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkubmV4dFBhZ2UoKSkgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBlbmdsaXNoU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5cbmV4cG9ydCB2YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xuICBjdXJyZW50TG9jYWxlVmFsdWU6IFwiXCIsXG4gIGRlZmF1bHRMb2NhbGVWYWx1ZTogXCJlblwiLFxuICBsb2NhbGVzOiA8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9Pnt9LFxuICBsb2NhbGVOYW1lczogPHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT57fSxcbiAgc3VwcG9ydGVkTG9jYWxlczogPEFycmF5PGFueT4+W10sXG4gIGdldCBjdXJyZW50TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9PT0gdGhpcy5kZWZhdWx0TG9jYWxlVmFsdWVcbiAgICAgID8gXCJcIlxuICAgICAgOiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZTtcbiAgfSxcbiAgc2V0IGN1cnJlbnRMb2NhbGUodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsID09PSBcImN6XCIpIHZhbCA9IFwiY3NcIjtcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9IHZhbDtcbiAgfSxcbiAgZ2V0IGRlZmF1bHRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlO1xuICB9LFxuICBzZXQgZGVmYXVsdExvY2FsZSh2YWw6IHN0cmluZykge1xuICAgIGlmICh2YWwgPT09IFwiY3pcIikgdmFsID0gXCJjc1wiO1xuICAgIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlID0gdmFsO1xuICB9LFxuICBnZXRMb2NhbGVTdHJpbmdzKGxvYzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVzW2xvY107XG4gIH0sXG4gIGdldEN1cnJlbnRTdHJpbmdzKCk6IGFueSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2FsZVxuICAgICAgPyB0aGlzLmxvY2FsZXNbdGhpcy5jdXJyZW50TG9jYWxlXVxuICAgICAgOiB0aGlzLmxvY2FsZXNbdGhpcy5kZWZhdWx0TG9jYWxlXTtcbiAgICBpZiAoIWxvYykgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgcmV0dXJuIGxvYztcbiAgfSxcbiAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q3VycmVudFN0cmluZ3MoKTtcbiAgICBpZiAoIWxvY1tzdHJOYW1lXSkgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgdmFyIHJlc3VsdCA9IGxvY1tzdHJOYW1lXTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubG9jYWxlc1tcImVuXCJdW3N0ck5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICBnZXRMb2NhbGVzOiBmdW5jdGlvbiAocmVtb3ZlRGVmYXVsdExvYzogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHJlcy5wdXNoKFwiXCIpO1xuICAgIHZhciBsb2NzID0gdGhpcy5sb2NhbGVzO1xuICAgIGlmICh0aGlzLnN1cHBvcnRlZExvY2FsZXMgJiYgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvY3MgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxvY3NbdGhpcy5zdXBwb3J0ZWRMb2NhbGVzW2ldXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBsb2NzKSB7XG4gICAgICBpZiAocmVtb3ZlRGVmYXVsdExvYyAmJiBrZXkgPT0gdGhpcy5kZWZhdWx0TG9jYWxlKSBjb250aW51ZTtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHZhciBsb2NOYW1lID0gKGxvYzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghbG9jKSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciByZXMgPSAoPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW2xvY107XG4gICAgICBpZiAoIXJlcykgcmVzID0gbG9jO1xuICAgICAgcmV0dXJuIHJlcy50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG4gICAgcmVzLnNvcnQoKGEsIGIpOiBudW1iZXIgPT4ge1xuICAgICAgdmFyIHN0cjEgPSBsb2NOYW1lKGEpO1xuICAgICAgdmFyIHN0cjIgPSBsb2NOYW1lKGIpO1xuICAgICAgaWYgKHN0cjEgPT09IHN0cjIpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHN0cjEgPCBzdHIyID8gLTEgOiAxO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG59O1xuXG5leHBvcnQgdmFyIHN1cnZleVN0cmluZ3MgPSBlbmdsaXNoU3RyaW5ncztcbig8YW55PnN1cnZleUxvY2FsaXphdGlvbikubG9jYWxlc1tcImVuXCJdID0gZW5nbGlzaFN0cmluZ3M7XG4oPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW1wiZW5cIl0gPSBcImVuZ2xpc2hcIjtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgc3VydmV5IHJ1bm5pbmcgaW4gdGhlIFdpbmRvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVdpbmRvd01vZGVsIGV4dGVuZHMgQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgc3VydmV5RWxlbWVudE5hbWUgPSBcIndpbmRvd1N1cnZleUpTXCI7XG4gIHN1cnZleVZhbHVlOiBTdXJ2ZXlNb2RlbDtcbiAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG5cbiAgdGVtcGxhdGVWYWx1ZTogc3RyaW5nO1xuICBleHBhbmRlZENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgc2hvd2luZ0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY2xvc2VXaW5kb3dPbkNvbXBsZXRlQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoanNvbk9iajogYW55LCBpbml0aWFsTW9kZWw6IFN1cnZleU1vZGVsID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGluaXRpYWxNb2RlbCkge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IGluaXRpYWxNb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHRoaXMuY3JlYXRlU3VydmV5KGpzb25PYmopO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgZG9jdW1lbnQpIHtcbiAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoZnVuY3Rpb24gKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgc2VsZi5vblN1cnZleUNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ3aW5kb3dcIjtcbiAgfVxuICAvKipcbiAgICogQSBzdXJ2ZXkgb2JqZWN0LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHZhbHVlIHRvIG5lZ2F0aXZlIHZhbHVlLCBmb3IgZXhhbXBsZSAtMSwgdG8gYXZvaWQgY2xvc2luZyB0aGUgd2luZG93IG9uIGNvbXBsZXRpbmcgdGhlIHN1cnZleS4gTGVhdmUgaXQgZXF1YWxzIHRvIDAgKGRlZmF1bHQgdmFsdWUpIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW1tZWRpYXRlbHksIG9yIHNldCBpdCB0byAzLCA1LCAxMCwgLi4uIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW4gMywgNSwgMTAgc2Vjb25kcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZU9uQ29tcGxldGVUaW1lb3V0OiBudW1iZXIgPSAwO1xuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IHNob3dpbmcuIFNldCBpdCB0byB0cnVlIHRvIHNob3cgdGhlIHdpbmRvdyBhbmQgZmFsc2UgdG8gaGlkZSBpdC5cbiAgICogQHNlZSBzaG93XG4gICAqIEBzZWUgaGlkZVxuICAgKi9cbiAgcHVibGljIGdldCBpc1Nob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1Nob3dpbmcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCB2YWwpO1xuICAgIGlmICh0aGlzLnNob3dpbmdDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc2hvd2luZ0NoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93IHRoZSB3aW5kb3dcbiAgICogQHNlZSBoaWRlXG4gICAqIEBzZWUgaXNTaG93aW5nXG4gICAqL1xuICBwdWJsaWMgc2hvdygpIHtcbiAgICB0aGlzLmlzU2hvd2luZyA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEhpZGUgdGhlIHdpbmRvd1xuICAgKiBAc2VlIHNob3dcbiAgICogQHNlZSBpc1Nob3dpbmdcbiAgICovXG4gIHB1YmxpYyBoaWRlKCkge1xuICAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2luZG93IGlzIGV4cGFuZGVkLiBTZXQgaXQgdG8gdHJ1ZSB0byBleHBhbmQgdGhlIHdpbmRvdyBvciBmYWxzZSB0byBjb2xsYXBzZSBpdC5cbiAgICogQHNlZSBleHBhbmRcbiAgICogQHNlZSBjb2xsYXBzZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0V4cGFuZGVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzRXhwYW5kZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNFeHBhbmRlZFwiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLmV4cGFuZGVkQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgdGhpcy5leHBhbmRlZENoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgd2luZG93IGFuZCBzdXJ2ZXkgdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnRpdGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc3VydmV5LnRpdGxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgd2luZG93IHRvIHNob3cgdGhlIHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgdGhpcy5leHBhbmRjb2xsYXBzZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogQ29sbGFwc2UgdGhlIHdpbmRvdyBhbmQgc2hvdyBzdXJ2ZXkgdGl0bGUgb25seS5cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKGZhbHNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KGpzb25PYmo6IGFueSk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleU1vZGVsKGpzb25PYmopO1xuICB9XG4gIHByb3RlY3RlZCBleHBhbmRjb2xsYXBzZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9IHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBvblN1cnZleUNvbXBsZXRlKCkge1xuICAgIGlmICh0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPCAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA9PSAwKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgdGltZXJJZDogYW55ID0gbnVsbDtcbiAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGltZXJJZCA9XG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jLCB0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgKiAxMDAwKVxuICAgICAgICAgIDogMDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNsb3NlV2luZG93T25Db21wbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcblxuZXhwb3J0IHZhciBzdXJ2ZXlUaW1lckZ1bmN0aW9ucyA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24gKGZ1bmM6ICgpID0+IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiAwO1xuICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jLCAxMDAwKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAodGltZXJJZDogbnVtYmVyKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVRpbWVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VWYWx1ZTogU3VydmV5VGltZXIgPSBudWxsO1xuICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpIHtcbiAgICBpZiAoIVN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUgPSBuZXcgU3VydmV5VGltZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBsaXN0ZW5lckNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHRpbWVySWQgPSAtMTtcbiAgcHVibGljIG9uVGltZXI6IEV2ZW50PCgpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoKSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIHN0YXJ0KGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLmFkZChmdW5jKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZXJJZCA8IDApIHtcbiAgICAgIHRoaXMudGltZXJJZCA9IHN1cnZleVRpbWVyRnVuY3Rpb25zLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmxpc3RlbmVyQ291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBzdG9wKGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLnJlbW92ZShmdW5jKTtcbiAgICB9XG4gICAgdGhpcy5saXN0ZW5lckNvdW50ZXItLTtcbiAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50ZXIgPT0gMCAmJiB0aGlzLnRpbWVySWQgPiAtMSkge1xuICAgICAgc3VydmV5VGltZXJGdW5jdGlvbnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICB0aGlzLnRpbWVySWQgPSAtMTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGRvVGltZXIoKSB7XG4gICAgaWYgKHRoaXMudGltZXJJZCA8IDApIHJldHVybjtcbiAgICB0aGlzLm9uVGltZXIuZmlyZSh0aGlzLCB7fSk7XG4gICAgdGhpcy50aW1lcklkID0gc3VydmV5VGltZXJGdW5jdGlvbnMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgSVN1cnZleSwgSVRleHRQcm9jZXNzb3IgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3Nvckl0ZW0ge1xuICBwdWJsaWMgc3RhcnQ6IG51bWJlcjtcbiAgcHVibGljIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvclZhbHVlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFeGlzdHMgPSBmYWxzZTtcbiAgICB0aGlzLmNhblByb2Nlc3MgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuICBwdWJsaWMgaXNFeGlzdHM6IGJvb2xlYW47XG4gIHB1YmxpYyBjYW5Qcm9jZXNzOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvciB7XG4gIHByaXZhdGUgaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWU6IGJvb2xlYW47XG4gIHB1YmxpYyBvblByb2Nlc3M6ICh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IoKSB7fVxuICBwdWJsaWMgcHJvY2VzcyhcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuID0gZmFsc2UsXG4gICAgZG9FbmNvZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHN0cmluZyB7XG4gICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IHRydWU7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcbiAgICBpZiAoIXRoaXMub25Qcm9jZXNzKSByZXR1cm4gdGV4dDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKHRleHQpO1xuICAgIGZvciAodmFyIGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5nZXROYW1lKHRleHQuc3Vic3RyaW5nKGl0ZW0uc3RhcnQgKyAxLCBpdGVtLmVuZCkpO1xuICAgICAgaWYgKCFuYW1lKSBjb250aW51ZTtcbiAgICAgIHZhciB0ZXh0VmFsdWUgPSBuZXcgVGV4dFByZVByb2Nlc3NvclZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgICB0aGlzLm9uUHJvY2Vzcyh0ZXh0VmFsdWUpO1xuICAgICAgaWYgKCF0ZXh0VmFsdWUuaXNFeGlzdHMpIHtcbiAgICAgICAgaWYgKHRleHRWYWx1ZS5jYW5Qcm9jZXNzKSB7XG4gICAgICAgICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHRleHRWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHJlcGxhY2VkVmFsdWUgPSAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGV4dFZhbHVlLnZhbHVlKVxuICAgICAgICA/IHRleHRWYWx1ZS52YWx1ZVxuICAgICAgICA6IFwiXCI7XG4gICAgICBpZiAoZG9FbmNvZGluZykge1xuICAgICAgICByZXBsYWNlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHJlcGxhY2VkVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGV4dCA9XG4gICAgICAgIHRleHQuc3Vic3RyKDAsIGl0ZW0uc3RhcnQpICsgcmVwbGFjZWRWYWx1ZSArIHRleHQuc3Vic3RyKGl0ZW0uZW5kICsgMSk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHB1YmxpYyBwcm9jZXNzVmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhblxuICApOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUge1xuICAgIHZhciB0ZXh0VmFsdWUgPSBuZXcgVGV4dFByZVByb2Nlc3NvclZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5vblByb2Nlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9jZXNzKHRleHRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNBbGxWYWx1ZXNPbkxhc3RSdW4oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldEl0ZW1zKHRleHQ6IHN0cmluZyk6IEFycmF5PFRleHRQcmVQcm9jZXNzb3JJdGVtPiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgIHZhciBzdGFydCA9IC0xO1xuICAgIHZhciBjaCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY2ggPSB0ZXh0W2ldO1xuICAgICAgaWYgKGNoID09IFwie1wiKSBzdGFydCA9IGk7XG4gICAgICBpZiAoY2ggPT0gXCJ9XCIpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID4gLTEpIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29ySXRlbSgpO1xuICAgICAgICAgIGl0ZW0uc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICBpdGVtLmVuZCA9IGk7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgcmV0dXJuIG5hbWUudHJpbSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRQcm9jZXNzb3IgaW1wbGVtZW50cyBJVGV4dFByb2Nlc3NvciB7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHZhcmlhYmxlTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIHByb2Nlc3NWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuXG4gICk6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzVmFsdWUobmFtZSwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLnBhbmVsID8gdGhpcy5wYW5lbC5nZXRWYWx1ZSgpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiAhIXRoaXMucGFuZWxcbiAgICAgID8gPFF1ZXN0aW9uPnRoaXMucGFuZWwuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShuYW1lKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvbkN1c3RvbVByb2Nlc3NUZXh0KHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vSVRleHRQcm9jZXNzb3JcbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpIHtcbiAgICBpZiAoIXRleHRWYWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm9uQ3VzdG9tUHJvY2Vzc1RleHQodGV4dFZhbHVlKSkgcmV0dXJuO1xuICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKHRleHRWYWx1ZS5uYW1lKTtcbiAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSBmaXJzdE5hbWUgPT0gdGhpcy52YXJpYWJsZU5hbWU7XG4gICAgdGV4dFZhbHVlLmNhblByb2Nlc3MgPSB0ZXh0VmFsdWUuaXNFeGlzdHM7XG4gICAgaWYgKCF0ZXh0VmFsdWUuY2FuUHJvY2VzcykgcmV0dXJuO1xuICAgIC8vbmFtZSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgdmFyaWFibGUgbmFtZVxuICAgIHRleHRWYWx1ZS5uYW1lID0gdGV4dFZhbHVlLm5hbWUucmVwbGFjZSh0aGlzLnZhcmlhYmxlTmFtZSArIFwiLlwiLCBcIlwiKTtcbiAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUpO1xuICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICg8YW55PnZhbHVlcylbZmlyc3ROYW1lXSA9IHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWVcbiAgICAgICAgPyBxdWVzdGlvbi5kaXNwbGF5VmFsdWVcbiAgICAgICAgOiBxdWVzdGlvbi52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFsbFZhbHVlcyA9ICEhdGhpcy5wYW5lbCA/IHRoaXMuZ2V0VmFsdWVzKCkgOiBudWxsO1xuICAgICAgaWYgKGFsbFZhbHVlcykge1xuICAgICAgICAoPGFueT52YWx1ZXMpW2ZpcnN0TmFtZV0gPSBhbGxWYWx1ZXNbZmlyc3ROYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGV4dFZhbHVlLnZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKHRleHRWYWx1ZS5uYW1lLCB2YWx1ZXMpO1xuICB9XG4gIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB0ZXh0ID0gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLnByb2Nlc3ModGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XG4gICAgcmV0dXJuIHN1cnZleSA/IHN1cnZleS5wcm9jZXNzVGV4dCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpIDogdGV4dDtcbiAgfVxuICBwcm9jZXNzVGV4dEV4KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogYW55IHtcbiAgICB0ZXh0ID0gdGhpcy5wcm9jZXNzVGV4dCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgIHZhciBoYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IuaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHZhciByZXMgPSB7IGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSwgdGV4dDogdGV4dCB9O1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgcmVzID0gdGhpcy5zdXJ2ZXkucHJvY2Vzc1RleHRFeCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGZhbHNlKTtcbiAgICB9XG4gICAgcmVzLmhhc0FsbFZhbHVlc09uTGFzdFJ1biA9XG4gICAgICByZXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuICYmIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IE9wZXJhbmRNYWtlciB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCB0cmlnZ2Vycy5cbiAqIEEgdHJpZ2dlciBjYWxscyBhIG1ldGhvZCB3aGVuIHRoZSBleHByZXNzaW9uIGNoYW5nZSB0aGUgcmVzdWx0OiBmcm9tIGZhbHNlIHRvIHRydWUgb3IgZnJvbSB0cnVlIHRvIGZhbHNlLlxuICogUGxlYXNlIG5vdGUsIGl0IHJ1bnMgb25seSBvbmUgY2hhbmdpbmcgdGhlIGV4cHJlc3Npb24gcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xuICBzdGF0aWMgb3BlcmF0b3JzVmFsdWU6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSBudWxsO1xuICBzdGF0aWMgZ2V0IG9wZXJhdG9ycygpIHtcbiAgICBpZiAoVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZSAhPSBudWxsKSByZXR1cm4gVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZTtcbiAgICBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlID0ge1xuICAgICAgZW1wdHk6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlO1xuICAgICAgfSxcbiAgICAgIG5vdGVtcHR5OiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWU7XG4gICAgICB9LFxuICAgICAgZXF1YWw6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBub3RlcXVhbDogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlW1wiaW5kZXhPZlwiXSAmJiB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID4gLTE7XG4gICAgICB9LFxuICAgICAgbm90Y29udGFpbnM6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF2YWx1ZSB8fCAhdmFsdWVbXCJpbmRleE9mXCJdIHx8IHZhbHVlLmluZGV4T2YoZXhwZWN0ZWRWYWx1ZSkgPT0gLTFcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBncmVhdGVyOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBsZXNzOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+PSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7XG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIFRyaWdnZXIub3BlcmF0b3JzVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgcHJpdmF0ZSB1c2VkTmFtZXM6IEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgaGFzRnVuY3Rpb246IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy51c2VkTmFtZXMgPSBbXTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wib3BlcmF0b3JcIiwgXCJ2YWx1ZVwiLCBcIm5hbWVcIl0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vbGRQcm9wZXJ0aWVzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImV4cHJlc3Npb25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLm9uRXhwcmVzc2lvbkNoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRyaWdnZXJiYXNlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoXCJ0cmlnZ2VyXCIsIFwiXCIpO1xuICAgIHZhciBleHAgPSAhIXRoaXMuZXhwcmVzc2lvbiA/IHRoaXMuZXhwcmVzc2lvbiA6IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgcmVzICs9IFwiLCBcIiArIGV4cDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIFwiZXF1YWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBvcGVyYXRvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIVRyaWdnZXIub3BlcmF0b3JzW3ZhbHVlXSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgY2hlY2tFeHByZXNzaW9uKFxuICAgIGtleXM6IGFueSxcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICBpZiAoIXRoaXMuaXNDaGVja1JlcXVpcmVkKGtleXMpKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgIHRoaXMucGVyZm9ybSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2hlY2sodmFsdWU6IGFueSkge1xuICAgIHZhciB0cmlnZ2VyUmVzdWx0ID0gVHJpZ2dlci5vcGVyYXRvcnNbdGhpcy5vcGVyYXRvcl0odmFsdWUsIHRoaXMudmFsdWUpO1xuICAgIGlmICh0cmlnZ2VyUmVzdWx0KSB7XG4gICAgICB0aGlzLm9uU3VjY2Vzcyh7fSwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGVyZm9ybSh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJSZXN1bHQocmVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVzdWx0KFxuICAgIHJlczogYm9vbGVhbixcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMub25TdWNjZXNzKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHt9XG4gIHByb3RlY3RlZCBvbkZhaWx1cmUoKSB7fVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5vbGRQcm9wZXJ0aWVzQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgb2xkUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5vbkV4cHJlc3Npb25DaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkV4cHJlc3Npb25DaGFuZ2VkKCkge1xuICAgIHRoaXMudXNlZE5hbWVzID0gW107XG4gICAgdGhpcy5oYXNGdW5jdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgfVxuICBwdWJsaWMgYnVpbGRFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHJldHVybiBcIlwiO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnZhbHVlKSAmJiB0aGlzLmlzUmVxdWlyZVZhbHVlKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgXCJ7XCIgK1xuICAgICAgdGhpcy5uYW1lICtcbiAgICAgIFwifSBcIiArXG4gICAgICB0aGlzLm9wZXJhdG9yICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci50b09wZXJhbmRTdHJpbmcodGhpcy52YWx1ZSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgaXNDaGVja1JlcXVpcmVkKGtleXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgha2V5cykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuYnVpbGRVc2VkTmFtZXMoKTtcbiAgICBpZiAodGhpcy5oYXNGdW5jdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHByb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXNlZE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMudXNlZE5hbWVzW2ldO1xuICAgICAgaWYgKGtleXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3NWYWx1ZS5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICBpZiAoIWtleXMuaGFzT3duUHJvcGVydHkoZmlyc3ROYW1lKSkgY29udGludWU7XG4gICAgICBpZiAobmFtZSA9PSBmaXJzdE5hbWUpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIGtleVZhbHVlID0ga2V5c1tmaXJzdE5hbWVdO1xuICAgICAgaWYgKGtleVZhbHVlID09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICBpZiAoXG4gICAgICAgICFrZXlWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIm9sZFZhbHVlXCIpIHx8XG4gICAgICAgICFrZXlWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIm5ld1ZhbHVlXCIpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgdmFyIHY6IGFueSA9IHt9O1xuICAgICAgdltmaXJzdE5hbWVdID0ga2V5VmFsdWVbXCJvbGRWYWx1ZVwiXTtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHByb2Nlc3NWYWx1ZS5nZXRWYWx1ZShuYW1lLCB2KTtcbiAgICAgIHZbZmlyc3ROYW1lXSA9IGtleVZhbHVlW1wibmV3VmFsdWVcIl07XG4gICAgICB2YXIgbmV3VmFsdWUgPSBwcm9jZXNzVmFsdWUuZ2V0VmFsdWUobmFtZSwgdik7XG4gICAgICByZXR1cm4gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFVzZWROYW1lcygpIHtcbiAgICBpZiAoISF0aGlzLmNvbmRpdGlvblJ1bm5lcikgcmV0dXJuO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uO1xuICAgIGlmICghZXhwcmVzc2lvbikge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcihleHByZXNzaW9uKTtcbiAgICB0aGlzLmhhc0Z1bmN0aW9uID0gdGhpcy5jb25kaXRpb25SdW5uZXIuaGFzRnVuY3Rpb24oKTtcbiAgICB0aGlzLnVzZWROYW1lcyA9IHRoaXMuY29uZGl0aW9uUnVubmVyLmdldFZhcmlhYmxlcygpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzUmVxdWlyZVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yICE9PSBcImVtcHR5XCIgJiYgdGhpcy5vcGVyYXRvciAhPSBcIm5vdGVtcHR5XCI7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcbiAgc2V0Q29tcGxldGVkKCk6IGFueTtcbiAgc2V0VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNWYXJpYWJsZTogYm9vbGVhbik6IGFueTtcbiAgY29weVRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIGZyb21OYW1lOiBzdHJpbmcpOiBhbnk7XG4gIGZvY3VzUXVlc3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJdCBleHRlbmRzIHRoZSBUcmlnZ2VyIGJhc2UgY2xhc3MgYW5kIGFkZCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBTdXJ2ZXlKUyBjbGFzc2VzLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xuICBwcm90ZWN0ZWQgb3duZXJWYWx1ZTogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldCBvd25lcigpOiBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgICByZXR1cm4gdGhpcy5vd25lclZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRPd25lcihvd25lcjogSVN1cnZleVRyaWdnZXJPd25lcikge1xuICAgIHRoaXMub3duZXJWYWx1ZSA9IG93bmVyO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5vd25lciAmJiAhISg8YW55PnRoaXMub3duZXIpW1wiZ2V0U3VydmV5XCJdXG4gICAgICA/ICg8YW55PnRoaXMub3duZXIpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCBpdCBtYWtlcyBxdWVzdGlvbnMvcGFnZXMgdmlzaWJsZS5cbiAqIE9odGVyd2lzZSBpdCBtYWtlcyB0aGVtIGludmlzaWJsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJWaXNpYmxlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIHB1YmxpYyBwYWdlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInZpc2libGV0cmlnZ2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMub25UcmlnZ2VyKHRoaXMub25JdGVtU3VjY2Vzcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHtcbiAgICB0aGlzLm9uVHJpZ2dlcih0aGlzLm9uSXRlbUZhaWx1cmUpO1xuICB9XG4gIHByaXZhdGUgb25UcmlnZ2VyKGZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdmFyIG9iamVjdHMgPSB0aGlzLm93bmVyLmdldE9iamVjdHModGhpcy5wYWdlcywgdGhpcy5xdWVzdGlvbnMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgZnVuYyhvYmplY3RzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uSXRlbVN1Y2Nlc3MoaXRlbTogYW55KSB7XG4gICAgaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtRmFpbHVyZShpdGVtOiBhbnkpIHtcbiAgICBpdGVtLnZpc2libGUgPSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgaXQgY29tcGxldGVzIHRoZSBzdXJ2ZXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbXBsZXRldHJpZ2dlclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNPbk5leHRQYWdlKCkge1xuICAgIHJldHVybiAhc2V0dGluZ3MuZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAodGhpcy5vd25lcikgdGhpcy5vd25lci5zZXRDb21wbGV0ZWQoKTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGZyb20gcHJvcGVydHkgKipzZXRWYWx1ZSoqIHdpbGwgYmUgc2V0IHRvICoqc2V0VG9OYW1lKipcbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJTZXRWYWx1ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic2V0dmFsdWV0cmlnZ2VyXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZXRUb05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2V0VG9OYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBzZXRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VmFsdWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmFyaWFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmFyaWFibGVcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNWYXJpYWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1ZhcmlhYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgdGhpcy5zZXRWYWx1ZSwgdGhpcy5pc1ZhcmlhYmxlKTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlIHN1cnZleSBnbyB0byBxdWVzdGlvbiAqKmdvdG9OYW1lKiogYW5kIGZvY3VzIGl0LlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclNraXAgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNraXB0cmlnZ2VyXCI7XG4gIH1cbiAgcHVibGljIGdldCBnb3RvTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJnb3RvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGdvdG9OYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZ290b05hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzT25OZXh0UGFnZSgpIHtcbiAgICByZXR1cm4gIXNldHRpbmdzLmV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuZ290b05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB0aGlzLm93bmVyLmZvY3VzUXVlc3Rpb24odGhpcy5nb3RvTmFtZSk7XG4gIH1cbn1cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZSAqKnJ1bkV4cHJlc3Npb24qKiB3aWxsIGJlIHJ1bi4gSWYgKipzZXRUb05hbWUqKiBwcm9wZXJ0eSBpcyBub3QgZW1wdHkgdGhlbiB0aGUgcmVzdWx0IG9mICoqcnVuRXhwcmVzc2lvbioqIHdpbGwgYmUgc2V0IHRvIGl0LlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24gZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJ1bmV4cHJlc3Npb250cmlnZ2VyXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZXRUb05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2V0VG9OYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2V0VG9OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBydW5FeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJ1bkV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBydW5FeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicnVuRXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMub3duZXIgfHwgIXRoaXMucnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHZhciBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb25SdW5uZXIodGhpcy5ydW5FeHByZXNzaW9uKTtcbiAgICBpZiAoZXhwcmVzc2lvbi5jYW5SdW4pIHtcbiAgICAgIGV4cHJlc3Npb24ub25SdW5Db21wbGV0ZSA9IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlUnVuRXhwcmVzc2lvbihyZXMpO1xuICAgICAgfTtcbiAgICAgIGV4cHJlc3Npb24ucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgb25Db21wbGV0ZVJ1bkV4cHJlc3Npb24obmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghIXRoaXMuc2V0VG9OYW1lICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3duZXIuc2V0VHJpZ2dlclZhbHVlKHRoaXMuc2V0VG9OYW1lLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgZnJvbSBxdWVzdGlvbiAqKmZyb21OYW1lKiogd2lsbCBiZSBzZXQgaW50byAqKnNldFRvTmFtZSoqLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2V0VG9OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFRvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgZnJvbU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZnJvbU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBmcm9tTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZyb21OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb3B5dmFsdWV0cmlnZ2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB0aGlzLm93bmVyLmNvcHlUcmlnZ2VyVmFsdWUodGhpcy5zZXRUb05hbWUsIHRoaXMuZnJvbU5hbWUpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJ0cmlnZ2VyXCIsIFtcbiAgeyBuYW1lOiBcIm9wZXJhdG9yXCIsIGRlZmF1bHQ6IFwiZXF1YWxcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgeyBuYW1lOiBcInZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIFwiZXhwcmVzc2lvbjpjb25kaXRpb25cIixcbl0pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwibmFtZVwiLCB2aXNpYmxlOiBmYWxzZSB9XSxcbiAgbnVsbCxcbiAgXCJ0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInZpc2libGV0cmlnZ2VyXCIsXG4gIFtcInBhZ2VzOnBhZ2VzXCIsIFwicXVlc3Rpb25zOnF1ZXN0aW9uc1wiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY29tcGxldGV0cmlnZ2VyXCIsXG4gIFtdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb21wbGV0ZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic2V0dmFsdWV0cmlnZ2VyXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiIXNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInNldFZhbHVlOnRyaWdnZXJ2YWx1ZVwiLFxuICAgICAgZGVwZW5kc09uOiBcInNldFRvTmFtZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgISFvYmpbXCJzZXRUb05hbWVcIl07XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImlzVmFyaWFibGU6Ym9vbGVhblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY29weXZhbHVldHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcIiFzZXRUb05hbWU6cXVlc3Rpb252YWx1ZVwiIH0sIHsgbmFtZTogXCIhZnJvbU5hbWU6cXVlc3Rpb252YWx1ZVwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb3B5VmFsdWUoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNraXB0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwiIWdvdG9OYW1lOnF1ZXN0aW9uXCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclNraXAoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJ1bmV4cHJlc3Npb250cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwic2V0VG9OYW1lOnF1ZXN0aW9udmFsdWVcIiB9LCBcInJ1bkV4cHJlc3Npb246ZXhwcmVzc2lvblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbigpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcbiIsImxldCBfaXNNb2JpbGUgPSBmYWxzZTtcbmxldCB2ZW5kb3IgPSBudWxsO1xuXG5pZiAoXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBuYXZpZ2F0b3IgJiZcbiAgd2luZG93XG4pIHtcbiAgdmVuZG9yID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBuYXZpZ2F0b3IudmVuZG9yIHx8ICg8YW55PndpbmRvdykub3BlcmE7XG59XG5cbihmdW5jdGlvbiAoYTogYW55KSB7XG4gIGlmICghYSkgcmV0dXJuO1xuICBpZiAoXG4gICAgLyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWluby9pLnRlc3QoXG4gICAgICBhXG4gICAgKSB8fFxuICAgIC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXFwtKXxhaShrb3xybil8YWwoYXZ8Y2F8Y28pfGFtb2l8YW4oZXh8bnl8eXcpfGFwdHV8YXIoY2h8Z28pfGFzKHRlfHVzKXxhdHR3fGF1KGRpfFxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1xcLShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtXFwtfGNlbGx8Y2h0bXxjbGRjfGNtZFxcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1xcLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8XFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFxcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlxcLTV8Z1xcLW1vfGdvKFxcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcXC0obXxwfHQpfGhlaVxcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXFwtY3xodChjKFxcLXwgfF98YXxnfHB8c3x0KXx0cCl8aHUoYXd8dGMpfGlcXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XFwtfFxcLyl8aWJyb3xpZGVhfGlnMDF8aWtvbXxpbTFrfGlubm98aXBhcXxpcmlzfGphKHR8dilhfGpicm98amVtdXxqaWdzfGtkZGl8a2VqaXxrZ3QoIHxcXC8pfGtsb258a3B0IHxrd2NcXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFxcLyhrfGx8dSl8NTB8NTR8XFwtW2Etd10pfGxpYnd8bHlueHxtMVxcLXd8bTNnYXxtNTBcXC98bWEodGV8dWl8eG8pfG1jKDAxfDIxfGNhKXxtXFwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcXC18b258dGZ8d2Z8d2d8d3QpfG5vayg2fGkpfG56cGh8bzJpbXxvcCh0aXx3dil8b3Jhbnxvd2cxfHA4MDB8cGFuKGF8ZHx0KXxwZHhnfHBnKDEzfFxcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblxcLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFxcLWd8cWFcXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFxcLVsyLTddfGlcXC0pfHF0ZWt8cjM4MHxyNjAwfHJha3N8cmltOXxybyh2ZXx6byl8czU1XFwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXFwtfG9vfHBcXC0pfHNka1xcL3xzZShjKFxcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcXC18c2hhcnxzaWUoXFwtfG0pfHNrXFwtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXFwtfHZcXC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcXC18dGRnXFwtfHRlbChpfG0pfHRpbVxcLXx0XFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cXC18bTN8bTUpfHR4XFwtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XFwtdil8dm00MHx2b2RhfHZ1bGN8dngoNTJ8NTN8NjB8NjF8NzB8ODB8ODF8ODN8ODV8OTgpfHczYyhcXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcXC18eW91cnx6ZXRvfHp0ZVxcLS9pLnRlc3QoXG4gICAgICBhLnN1YnN0cigwLCA0KVxuICAgIClcbiAgKVxuICAgIF9pc01vYmlsZSA9IHRydWU7XG59KSh2ZW5kb3IpO1xuXG5leHBvcnQgY29uc3QgSXNNb2JpbGUgPSBfaXNNb2JpbGU7XG4iLCJleHBvcnQgdHlwZSBWZXJ0aWNhbFBvc2l0aW9uID0gXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcIm1pZGRsZVwiO1xuZXhwb3J0IHR5cGUgSG9yaXpvbnRhbFBvc2l0aW9uID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcImNlbnRlclwiO1xuZXhwb3J0IGludGVyZmFjZSBJUG9zaXRpb24ge1xuICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xuICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU51bWJlclBvc2l0aW9uIGV4dGVuZHMgSVBvc2l0aW9uIHtcbiAgbGVmdD86IG51bWJlcjtcbiAgdG9wPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaXplIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cFV0aWxzIHtcbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb3NpdGlvbihcbiAgICB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbixcbiAgICBzaG93UG9pbnRlcjogYm9vbGVhblxuICApOiBJTnVtYmVyUG9zaXRpb24ge1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJjZW50ZXJcIilcbiAgICAgIHZhciBsZWZ0ID0gKHRhcmdldFJlY3QubGVmdCArIHRhcmdldFJlY3QucmlnaHQgLSB3aWR0aCkgLyAyO1xuICAgIGVsc2UgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PSBcImxlZnRcIikgbGVmdCA9IHRhcmdldFJlY3QubGVmdCAtIHdpZHRoO1xuICAgIGVsc2UgbGVmdCA9IHRhcmdldFJlY3QucmlnaHQ7XG5cbiAgICBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcIm1pZGRsZVwiKVxuICAgICAgdmFyIHRvcCA9ICh0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuYm90dG9tIC0gaGVpZ2h0KSAvIDI7XG4gICAgZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcInRvcFwiKSB0b3AgPSB0YXJnZXRSZWN0LnRvcCAtIGhlaWdodDtcbiAgICBlbHNlIHRvcCA9IHRhcmdldFJlY3QuYm90dG9tO1xuXG4gICAgaWYgKHNob3dQb2ludGVyKSB7XG4gICAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIgJiYgdmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICAgIGlmICh2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgICAgICB0b3AgPSB0b3AgKyB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3AgPSB0b3AgLSB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGxlZnQ6IE1hdGgucm91bmQobGVmdCksIHRvcDogTWF0aC5yb3VuZCh0b3ApIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVZlcnRpY2FsRGltZW5zaW9ucyhcbiAgICB0b3A6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB3aW5kb3dIZWlnaHQ6IG51bWJlclxuICApIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0b3AgPCAwKSB7XG4gICAgICByZXN1bHQgPSB7IGhlaWdodDogaGVpZ2h0ICsgdG9wLCB0b3A6IDAgfTtcbiAgICB9IGVsc2UgaWYgKGhlaWdodCArIHRvcCA+IHdpbmRvd0hlaWdodCkge1xuICAgICAgcmVzdWx0ID0geyBoZWlnaHQ6IHdpbmRvd0hlaWdodCAtIHRvcCwgdG9wOiB0b3AgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlVmVydGljYWxQb3NpdGlvbihcbiAgICB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHZlcnRpY2FsUG9zaXRpb246IFZlcnRpY2FsUG9zaXRpb24sXG4gICAgc2hvd1BvaW50ZXI6IGJvb2xlYW4sXG4gICAgd2luZG93SGVpZ2h0OiBudW1iZXJcbiAgKTogVmVydGljYWxQb3NpdGlvbiB7XG4gICAgbGV0IGRlbHRhVG9wID1cbiAgICAgIGhlaWdodCAtICh0YXJnZXRSZWN0LnRvcCArIChzaG93UG9pbnRlciA/IHRhcmdldFJlY3QuaGVpZ2h0IDogMCkpO1xuICAgIGxldCBkZWx0YUJvdHRvbSA9XG4gICAgICBoZWlnaHQgK1xuICAgICAgdGFyZ2V0UmVjdC5ib3R0b20gLVxuICAgICAgKHNob3dQb2ludGVyID8gdGFyZ2V0UmVjdC5oZWlnaHQgOiAwKSAtXG4gICAgICB3aW5kb3dIZWlnaHQ7XG4gICAgaWYgKGRlbHRhVG9wID4gMCAmJiBkZWx0YUJvdHRvbSA8PSAwICYmIHZlcnRpY2FsUG9zaXRpb24gPT0gXCJ0b3BcIikge1xuICAgICAgdmVydGljYWxQb3NpdGlvbiA9IFwiYm90dG9tXCI7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGRlbHRhQm90dG9tID4gMCAmJlxuICAgICAgZGVsdGFUb3AgPD0gMCAmJlxuICAgICAgdmVydGljYWxQb3NpdGlvbiA9PSBcImJvdHRvbVwiXG4gICAgKSB7XG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gXCJ0b3BcIjtcbiAgICB9IGVsc2UgaWYgKGRlbHRhQm90dG9tID4gMCAmJiBkZWx0YVRvcCA+IDApIHtcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSBkZWx0YVRvcCA8IGRlbHRhQm90dG9tID8gXCJ0b3BcIiA6IFwiYm90dG9tXCI7XG4gICAgfVxuICAgIHJldHVybiB2ZXJ0aWNhbFBvc2l0aW9uO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb3B1cERpcmVjdGlvbihcbiAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBWZXJ0aWNhbFBvc2l0aW9uLFxuICAgIGhvcml6b250YWxQb3NpdGlvbjogSG9yaXpvbnRhbFBvc2l0aW9uXG4gICkge1xuICAgIHZhciBwb3B1cERpcmVjdGlvbjogc3RyaW5nO1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJjZW50ZXJcIiAmJiB2ZXJ0aWNhbFBvc2l0aW9uICE9IFwibWlkZGxlXCIpIHtcbiAgICAgIHBvcHVwRGlyZWN0aW9uID0gdmVydGljYWxQb3NpdGlvbjtcbiAgICB9IGVsc2UgaWYgKGhvcml6b250YWxQb3NpdGlvbiAhPSBcImNlbnRlclwiKSB7XG4gICAgICBwb3B1cERpcmVjdGlvbiA9IGhvcml6b250YWxQb3NpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHBvcHVwRGlyZWN0aW9uO1xuICB9XG5cbiAgLy9jYWxsZWQgd2hlbiBzaG93UG9pbnRlciAgaXMgdHJ1ZVxuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZVBvaW50ZXJUYXJnZXQoXG4gICAgdGFyZ2V0UmVjdDogQ2xpZW50UmVjdCxcbiAgICB0b3A6IG51bWJlcixcbiAgICBsZWZ0OiBudW1iZXIsXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvblxuICApIHtcbiAgICB2YXIgdGFyZ2V0UG9zOiBJTnVtYmVyUG9zaXRpb24gPSB7fTtcbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIpIHtcbiAgICAgIHRhcmdldFBvcy50b3AgPSB0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdFtob3Jpem9udGFsUG9zaXRpb25dO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICB0YXJnZXRQb3MudG9wID0gdGFyZ2V0UmVjdFt2ZXJ0aWNhbFBvc2l0aW9uXTtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdC5sZWZ0ICsgdGFyZ2V0UmVjdC53aWR0aCAvIDI7XG4gICAgfVxuICAgIHRhcmdldFBvcy5sZWZ0ID0gTWF0aC5yb3VuZCh0YXJnZXRQb3MubGVmdCAtIGxlZnQpO1xuICAgIHRhcmdldFBvcy50b3AgPSBNYXRoLnJvdW5kKHRhcmdldFBvcy50b3AgLSB0b3ApO1xuICAgIHJldHVybiB0YXJnZXRQb3M7XG4gIH1cbn1cbiIsImltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9ucy9hY3Rpb25cIjtcblxuaW50ZXJmYWNlIElEaW1lbnNpb25zIHtcbiAgc2Nyb2xsOiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzSW5pbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1pbkRpbWVuc2lvbkNvbnN0ID0gNTY7XG4gIHNlcGFyYXRvclNpemUgPSAxNztcblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZTogKFxuICAgIGVsdDogRWxlbWVudFxuICApID0+IENTU1N0eWxlRGVjbGFyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZS5iaW5kKHdpbmRvdyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBtb2RlbDogQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gICAgcHJpdmF0ZSBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBkb3RzSXRlbVNpemU6IG51bWJlciA9IDQ4XG4gICkge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHRoaXMucHJvY2VzcygpKTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICBnZXQgaXRlbXMoKTogQXJyYXk8QWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwuYWN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSAhPT0gZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogZWxlbWVudC5zY3JvbGxXaWR0aCxcbiAgICAgIG9mZnNldDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGNhbGNJdGVtc1NpemVzKCkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLm1vZGVsLmFjdGlvbnM7XG4gICAgdGhpcy5jb250YWluZXJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuaXRlbXNTZWxlY3RvcilcbiAgICAgIC5mb3JFYWNoKChpdGVtOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgY3VycmVudEFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICAgICAgPyB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgICAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgICAgIDogY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb247XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmlzaWJsZUl0ZW1zQ291bnQoc2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpdGVtc1NpemVzOiBudW1iZXJbXSA9IHRoaXMuaXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLm1pbkRpbWVuc2lvbik7XG4gICAgbGV0IGN1cnJTaXplOiBudW1iZXIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXNTaXplcy5sZW5ndGg7IGkrKykge1xuICAgICAgY3VyclNpemUgKz0gaXRlbXNTaXplc1tpXTtcbiAgICAgIGlmIChjdXJyU2l6ZSA+IHNpemUpIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSXRlbU1vZGUoZGltZW5zaW9uOiBudW1iZXIsIG1pblNpemU6IG51bWJlciwgbWF4U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIGZvciAobGV0IGluZGV4ID0gaXRlbXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgaWYgKG1pblNpemUgPD0gZGltZW5zaW9uICYmIGRpbWVuc2lvbiA8IG1heFNpemUpIHtcbiAgICAgICAgbWF4U2l6ZSAtPSBpdGVtc1tpbmRleF0ubWF4RGltZW5zaW9uIC0gaXRlbXNbaW5kZXhdLm1pbkRpbWVuc2lvbjtcbiAgICAgICAgaXRlbXNbaW5kZXhdLm1vZGUgPSBcInNtYWxsXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc1tpbmRleF0ubW9kZSA9IFwibGFyZ2VcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZml0KGRpbWVuc2lvbjogbnVtYmVyKSB7XG4gICAgaWYgKGRpbWVuc2lvbiA8PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLm1vZGVsLnJlbW92ZURvdHNCdXR0b24oKTtcbiAgICBsZXQgbWluU2l6ZSA9IDA7XG4gICAgbGV0IG1heFNpemUgPSAwO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIG1pblNpemUgKz0gaXRlbS5taW5EaW1lbnNpb247XG4gICAgICBtYXhTaXplICs9IGl0ZW0ubWF4RGltZW5zaW9uO1xuICAgIH0pO1xuXG4gICAgaWYgKGRpbWVuc2lvbiA+PSBtYXhTaXplKSB7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5tb2RlID0gXCJsYXJnZVwiKSk7XG4gICAgfSBlbHNlIGlmIChkaW1lbnNpb24gPCBtaW5TaXplKSB7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5tb2RlID0gXCJzbWFsbFwiKSk7XG4gICAgICB0aGlzLm1vZGVsLnNob3dGaXJzdE4oXG4gICAgICAgIHRoaXMuZ2V0VmlzaWJsZUl0ZW1zQ291bnQoZGltZW5zaW9uIC0gdGhpcy5kb3RzSXRlbVNpemUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1Nb2RlKGRpbWVuc2lvbiwgbWluU2l6ZSwgbWF4U2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0luaWxpemVkKSB7XG4gICAgICB0aGlzLmNhbGNJdGVtc1NpemVzKCk7XG4gICAgICB0aGlzLmlzSW5pbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmZpdCh0aGlzLmdldEF2YWlsYWJsZVNwYWNlKCkpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciBleHRlbmRzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBwcm90ZWN0ZWQgbWluRGltZW5zaW9uQ29uc3QgPSA0MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgZG90c0l0ZW1TaXplPzogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucygpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgb2Zmc2V0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2U6IG51bWJlciA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgc3BhY2UgLT0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wKSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjSXRlbVNpemUoaXRlbTogSFRNTERpdkVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLm9mZnNldEhlaWdodDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi8uLi9zZXR0aW5nc1wiO1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGE6IGFueSwgYjogYW55KSB7XG4gIGNvbnN0IHJlZ0V4U3RyaXAwOiBSZWdFeHAgPSAvKFxcLjArKSskLztcbiAgY29uc3Qgc2VnbWVudHNBOiBzdHJpbmdbXSA9IGEucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBzZWdtZW50c0I6IHN0cmluZ1tdID0gYi5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IGxlbjogbnVtYmVyID0gTWF0aC5taW4oc2VnbWVudHNBLmxlbmd0aCwgc2VnbWVudHNCLmxlbmd0aCk7XG4gIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGRpZmY6IG51bWJlciA9XG4gICAgICBwYXJzZUludChzZWdtZW50c0FbaV0sIDEwKSAtIHBhcnNlSW50KHNlZ21lbnRzQltpXSwgMTApO1xuICAgIGlmIChkaWZmKSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xufVxuZnVuY3Rpb24gY29uZmlybUFjdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCEhc2V0dGluZ3MgJiYgISFzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYylcbiAgICByZXR1cm4gc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMobWVzc2FnZSk7XG4gIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVCcm93c2VyKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIGNvbnN0IG9sZEllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gIGNvbnN0IGVsZXZlbkllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gIHJldHVybiBvbGRJZSA+IC0xIHx8IGVsZXZlbkllID4gLTE7XG59XG5mdW5jdGlvbiBkZXRlY3RJRU9yRWRnZSgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNvbnN0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgY29uc3QgdHJpZGVudDogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgIGNvbnN0IGVkZ2U6IG51bWJlciA9IHVhLmluZGV4T2YoXCJFZGdlL1wiKTtcbiAgICAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9IGVkZ2UgPiAwIHx8IHRyaWRlbnQgPiAwIHx8IG1zaWUgPiAwO1xuICB9XG4gIHJldHVybiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZTtcbn1cbmZ1bmN0aW9uIGxvYWRGaWxlRnJvbUJhc2U2NChiNjREYXRhOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBieXRlU3RyaW5nOiBzdHJpbmcgPSBhdG9iKGI2NERhdGEuc3BsaXQoXCIsXCIpWzFdKTtcblxuICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgICBjb25zdCBtaW1lU3RyaW5nOiBzdHJpbmcgPSBiNjREYXRhXG4gICAgICAuc3BsaXQoXCIsXCIpWzBdXG4gICAgICAuc3BsaXQoXCI6XCIpWzFdXG4gICAgICAuc3BsaXQoXCI7XCIpWzBdO1xuXG4gICAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYW4gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBhYjogQXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIC8vIHdyaXRlIHRoZSBBcnJheUJ1ZmZlciB0byBhIGJsb2IsIGFuZCB5b3UncmUgZG9uZVxuICAgIGNvbnN0IGJiOiBCbG9iID0gbmV3IEJsb2IoW2FiXSwgeyB0eXBlOiBtaW1lU3RyaW5nIH0pO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYlxuICAgICkge1xuICAgICAgd2luZG93Lm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJiLCBmaWxlTmFtZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHt9XG59XG5mdW5jdGlvbiBpc01vYmlsZSgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cub3JpZW50YXRpb24gIT09IFwidW5kZWZpbmVkXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIHRocmVzaG9sZDogbnVtYmVyID0gMFxuKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudFJlY3Q6IERPTVJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB2aWV3SGVpZ2h0OiBudW1iZXIgPSBNYXRoLm1heChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgIHdpbmRvdy5pbm5lckhlaWdodFxuICApO1xuICBjb25zdCB0b3BXaW46IG51bWJlciA9IC10aHJlc2hvbGQ7XG4gIGNvbnN0IGJvdHRvbVdpbjogbnVtYmVyID0gdmlld0hlaWdodCArIHRocmVzaG9sZDtcbiAgY29uc3QgdG9wRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LnRvcDtcbiAgY29uc3QgYm90dG9tRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LmJvdHRvbTtcblxuICBjb25zdCBtYXhUb3A6IG51bWJlciA9IE1hdGgubWF4KHRvcFdpbiwgdG9wRWwpO1xuICBjb25zdCBtaW5Cb3R0b206IG51bWJlciA9IE1hdGgubWluKGJvdHRvbVdpbiwgYm90dG9tRWwpO1xuICByZXR1cm4gbWF4VG9wIDw9IG1pbkJvdHRvbTtcbn1cblxuZnVuY3Rpb24gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbiAgaWYgKFxuICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcImF1dG9cIilcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZChpZDogc3RyaW5nKSB7XG4gIGlmICghZG9jdW1lbnQpIHJldHVybjtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWwpIHJldHVybjtcbiAgY29uc3Qgc2Nyb2xsYWJsZUVsID0gZmluZFNjcm9sbGFibGVQYXJlbnQoZWwpO1xuICBpZiAoISFzY3JvbGxhYmxlRWwpIHtcbiAgICBzY3JvbGxhYmxlRWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJzY3JvbGxcIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWljb25OYW1lKSByZXR1cm4gaWNvbk5hbWU7XG4gIHZhciBwcm94eU5hbWUgPSAoPGFueT5zZXR0aW5ncy5jdXN0b21JY29ucylbaWNvbk5hbWVdO1xuICByZXR1cm4gISFwcm94eU5hbWUgPyBwcm94eU5hbWUgOiBpY29uTmFtZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnKFxuICBzaXplOiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBpY29uTmFtZTogc3RyaW5nLFxuICBzdmdFbGVtOiBhbnlcbikge1xuICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IChzaXplIHx8IGhlaWdodCB8fCAxNikgKyBcInB4XCI7XG4gIGNvbnN0IG5vZGU6IGFueSA9IHN2Z0VsZW0uY2hpbGROb2Rlc1swXTtcbiAgY29uc3QgcmVhbEljb25OYW1lID0gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWUpO1xuICBub2RlLnNldEF0dHJpYnV0ZU5TKFxuICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIFwieGxpbms6aHJlZlwiLFxuICAgIFwiI1wiICsgcmVhbEljb25OYW1lXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoPCgpID0+IFQ+dmFsdWUpKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUodmFsdWU6IGFueSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwiXCIgKyB2YWx1ZSArIFwicHhcIjtcbiAgfVxuICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3RTeW1ib2w6IHN0cmluZyA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBudW06IG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICByZXR1cm4gXCJcIiArIG51bSArIFwicHhcIjtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBkb0tleTJDbGljayhldjogYW55KSB7XG4gIHZhciBlbDogYW55ID0gZXYudGFyZ2V0O1xuICBpZiAoIWVsKSByZXR1cm47XG4gIHZhciBjaGFyID0gZXYud2hpY2ggfHwgZXYua2V5Q29kZTtcbiAgaWYgKGNoYXIgPT09IDEzIHx8IGNoYXIgPT09IDMyKSB7XG4gICAgaWYgKGVsLmNsaWNrKSBlbC5jbGljaygpO1xuICB9IGVsc2UgaWYgKGNoYXIgPT09IDI3KSB7XG4gICAgaWYgKGVsLmJsdXIpIGVsLmJsdXIoKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBkZXRlY3RJRUJyb3dzZXIsXG4gIGxvYWRGaWxlRnJvbUJhc2U2NCxcbiAgaXNNb2JpbGUsXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIGZpbmRTY3JvbGxhYmxlUGFyZW50LFxuICBzY3JvbGxFbGVtZW50QnlDaGlsZElkLFxuICBjcmVhdGVTdmcsXG4gIGRvS2V5MkNsaWNrLFxuICBnZXRJY29uTmFtZUZyb21Qcm94eSxcbn07XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleUVycm9yT3duZXIsIElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBDdXN0b21FcnJvciwgUmVxdXJlTnVtZXJpY0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlc3VsdCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogYW55LCBwdWJsaWMgZXJyb3I6IFN1cnZleUVycm9yID0gbnVsbCkge31cbn1cbi8qKlxuICogQmFzZSBTdXJ2ZXlKUyB2YWxpZGF0b3IgY2xhc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlIHtcbiAgcHVibGljIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyO1xuICBwdWJsaWMgb25Bc3luY0NvbXBsZXRlZDogKHJlc3VsdDogVmFsaWRhdG9yUmVzdWx0KSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIsIHRoaXMsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyICYmICEhKDxhbnk+dGhpcy5lcnJvck93bmVyKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmVycm9yT3duZXIpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc1ZhbGlkYXRlQWxsVmFsdWVzKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50ZXh0KSByZXR1cm4gdGhpcy50ZXh0O1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRFcnJvclRleHQobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBc3luYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZXJyb3JPd25lclxuICAgICAgPyB0aGlzLmVycm9yT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICB9XG4gIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUN1c3RvbUVycm9yKG5hbWU6IHN0cmluZyk6IFN1cnZleUVycm9yIHtcbiAgICByZXR1cm4gbmV3IEN1c3RvbUVycm9yKHRoaXMuZ2V0RXJyb3JUZXh0KG5hbWUpLCB0aGlzLmVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFR5cGUoKS5yZXBsYWNlKFwidmFsaWRhdG9yXCIsIFwiXCIpO1xuICAgIGlmICghIXRoaXMudGV4dCkge1xuICAgICAgcmVzICs9IFwiLCBcIiArIHRoaXMudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdG9yT3duZXIge1xuICBnZXRWYWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj47XG4gIHZhbGlkYXRlZFZhbHVlOiBhbnk7XG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZztcbiAgZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk6IGFueTtcbiAgZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpOiBhbnk7XG59XG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUnVubmVyIHtcbiAgcHJpdmF0ZSBhc3luY1ZhbGlkYXRvcnM6IEFycmF5PFN1cnZleVZhbGlkYXRvcj47XG4gIHB1YmxpYyBvbkFzeW5jQ29tcGxldGVkOiAoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pID0+IHZvaWQ7XG4gIHB1YmxpYyBydW4ob3duZXI6IElWYWxpZGF0b3JPd25lcik6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciB2YWx1ZXMgPSBudWxsO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnByZXBhcmVBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICB2YXIgYXN5bmNSZXN1bHRzOiBBcnJheTxTdXJ2ZXlFcnJvcj4gPSBbXTtcbiAgICB2YXIgdmFsaWRhdG9ycyA9IG93bmVyLmdldFZhbGlkYXRvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW2ldO1xuICAgICAgaWYgKCF2YWx1ZXMgJiYgdmFsaWRhdG9yLmlzVmFsaWRhdGVBbGxWYWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzID0gb3duZXIuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICAgIHByb3BlcnRpZXMgPSBvd25lci5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWRhdG9yLmlzQXN5bmMpIHtcbiAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRvcnMucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgICB2YWxpZGF0b3Iub25Bc3luY0NvbXBsZXRlZCA9IChyZXN1bHQ6IFZhbGlkYXRvclJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmICghIXJlc3VsdCAmJiAhIXJlc3VsdC5lcnJvcikgYXN5bmNSZXN1bHRzLnB1c2gocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICBpZiAoIXRoaXMub25Bc3luY0NvbXBsZXRlZCkgcmV0dXJuO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9yc1tpXS5pc1J1bm5pbmcpIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vbkFzeW5jQ29tcGxldGVkKGFzeW5jUmVzdWx0cyk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRvcnMgPSBvd25lci5nZXRWYWxpZGF0b3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsaWRhdG9yID0gdmFsaWRhdG9yc1tpXTtcblxuICAgICAgdmFyIHZhbGlkYXRvclJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZShcbiAgICAgICAgb3duZXIudmFsaWRhdGVkVmFsdWUsXG4gICAgICAgIG93bmVyLmdldFZhbGlkYXRvclRpdGxlKCksXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgcHJvcGVydGllc1xuICAgICAgKTtcbiAgICAgIGlmICghIXZhbGlkYXRvclJlc3VsdCAmJiAhIXZhbGlkYXRvclJlc3VsdC5lcnJvcikge1xuICAgICAgICByZXMucHVzaCh2YWxpZGF0b3JSZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoID09IDAgJiYgISF0aGlzLm9uQXN5bmNDb21wbGV0ZWQpXG4gICAgICB0aGlzLm9uQXN5bmNDb21wbGV0ZWQoW10pO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcmVwYXJlQXN5bmNWYWxpZGF0b3JzKCkge1xuICAgIGlmICghIXRoaXMuYXN5bmNWYWxpZGF0b3JzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXN5bmNWYWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzW2ldLm9uQXN5bmNDb21wbGV0ZWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICB9XG59XG4vKipcbiAqIFZhbGlkYXRlIG51bWVyaWMgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgTnVtZXJpY1ZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1pblZhbHVlOiBudW1iZXIgPSBudWxsLCBtYXhWYWx1ZTogbnVtYmVyID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5taW5WYWx1ZSA9IG1pblZhbHVlO1xuICAgIHRoaXMubWF4VmFsdWUgPSBtYXhWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm51bWVyaWN2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFIZWxwZXJzLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIG5ldyBSZXF1cmVOdW1lcmljRXJyb3IobnVsbCwgdGhpcy5lcnJvck93bmVyKVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBWYWxpZGF0b3JSZXN1bHQocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgIGlmICh0aGlzLm1pblZhbHVlICE9PSBudWxsICYmIHRoaXMubWluVmFsdWUgPiByZXN1bHQudmFsdWUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLm1heFZhbHVlIDwgcmVzdWx0LnZhbHVlKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiA/IG51bGwgOiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHZOYW1lID0gbmFtZSA/IG5hbWUgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidmFsdWVcIik7XG4gICAgaWYgKHRoaXMubWluVmFsdWUgIT09IG51bGwgJiYgdGhpcy5tYXhWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwibnVtZXJpY01pbk1heFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgICAgLmdldFN0cmluZyhcIm51bWVyaWNNaW5cIilcbiAgICAgICAgICBbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWluVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwibnVtZXJpY01heFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odk5hbWUsIHRoaXMubWF4VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIG1pblZhbHVlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5WYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblZhbHVlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heFZhbHVlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFZhbHVlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVcIiwgdmFsKTtcbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSB0ZXh0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtaW5MZW5ndGg6IG51bWJlciA9IDAsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIgPSAwLFxuICAgIGFsbG93RGlnaXRzID0gdHJ1ZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWluTGVuZ3RoID0gbWluTGVuZ3RoO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xuICAgIHRoaXMuYWxsb3dEaWdpdHMgPSBhbGxvd0RpZ2l0cztcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRleHR2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmFsbG93RGlnaXRzKSB7XG4gICAgICB2YXIgcmVnID0gL15bQS1aYS16XFxzXSokLztcbiAgICAgIGlmICghcmVnLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDAgJiYgdGhpcy5tYXhMZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwidGV4dE1pbk1heExlbmd0aFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5taW5MZW5ndGgsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwidGV4dE1pbkxlbmd0aFwiKVxuICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5taW5MZW5ndGgpO1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJ0ZXh0TWF4TGVuZ3RoXCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5tYXhMZW5ndGgpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluTGVuZ3RoIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5MZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluTGVuZ3RoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluTGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluTGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhMZW5ndGggcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGFsbG93RGlnaXRzIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0RpZ2l0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dEaWdpdHNcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0RpZ2l0cyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0RpZ2l0c1wiLCB2YWwpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbnN3ZXJDb3VudFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1pbkNvdW50OiBudW1iZXIgPSBudWxsLCBtYXhDb3VudDogbnVtYmVyID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5taW5Db3VudCA9IG1pbkNvdW50O1xuICAgIHRoaXMubWF4Q291bnQgPSBtYXhDb3VudDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImFuc3dlcmNvdW50dmFsaWRhdG9yXCI7XG4gIH1cbiAgcHVibGljIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICB2YWx1ZXM6IGFueSA9IG51bGwsXG4gICAgcHJvcGVydGllczogYW55ID0gbnVsbFxuICApOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmNvbnN0cnVjdG9yICE9IEFycmF5KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY291bnQgPSB2YWx1ZS5sZW5ndGg7XG4gICAgaWYgKGNvdW50ID09IDApIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLm1pbkNvdW50ICYmIGNvdW50IDwgdGhpcy5taW5Db3VudCkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IoXG4gICAgICAgICAgc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKFwibWluU2VsZWN0RXJyb3JcIilcbiAgICAgICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pbkNvdW50KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhDb3VudCAmJiBjb3VudCA+IHRoaXMubWF4Q291bnQpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKFxuICAgICAgICAgIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAgICAgLmdldFN0cmluZyhcIm1heFNlbGVjdEVycm9yXCIpXG4gICAgICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5tYXhDb3VudClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5Db3VudCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluQ291bnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5Db3VudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbkNvdW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhDb3VudCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4Q291bnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhDb3VudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heENvdW50XCIsIHZhbCk7XG4gIH1cbn1cbi8qKlxuICogVXNlIGl0IHRvIHZhbGlkYXRlIHRoZSB0ZXh0IGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWdleFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHJlZ2V4OiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZ2V4ID0gcmVnZXg7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZWdleHZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMucmVnZXggfHwgdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRoaXMucmVnZXgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5oYXNFcnJvcihyZSwgdmFsdWVbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYXNFcnJvcihyZSwgdmFsdWUsIG5hbWUpO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3IocmU6IFJlZ0V4cCwgdmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAocmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlZ2V4IHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCByZWdleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZWdleFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlZ2V4KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVnZXhcIiwgdmFsKTtcbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSBlLW1haWwgYWRkcmVzcyBpbiB0aGUgdGV4dCBpbnB1dFxuICovXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBwcml2YXRlIHJlID0gL14oKFtePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpPVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KCk9W1xcXVxcLiw7Olxcc0BcXFwiXXsyLH0pJC9pO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZW1haWx2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMucmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImludmFsaWRFbWFpbFwiKTtcbiAgfVxufVxuXG4vKipcbiAqIFNob3cgZXJyb3IgaWYgZXhwcmVzc2lvbiByZXR1cm5zIGZhbHNlXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XG4gIHByaXZhdGUgaXNSdW5uaW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4cHJlc3Npb252YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGVBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0FzeW5jKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5lbnN1cmVDb25kaXRpb25SdW5uZXIoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblJ1bm5lci5pc0FzeW5jO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUnVubmluZ1ZhbHVlO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMuZW5zdXJlQ29uZGl0aW9uUnVubmVyKCkpIHJldHVybiBudWxsO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzKSA9PiB7XG4gICAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICBpZiAoISF0aGlzLm9uQXN5bmNDb21wbGV0ZWQpIHtcbiAgICAgICAgdGhpcy5vbkFzeW5jQ29tcGxldGVkKHRoaXMuZ2VuZXJhdGVFcnJvcihyZXMsIHZhbHVlLCBuYW1lKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gdHJ1ZTtcbiAgICB2YXIgcmVzID0gdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaWYgKHRoaXMuY29uZGl0aW9uUnVubmVyLmlzQXN5bmMpIHJldHVybiBudWxsO1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUVycm9yKHJlcywgdmFsdWUsIG5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZUVycm9yKHJlczogYm9vbGVhbiwgdmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcImludmFsaWRFeHByZXNzaW9uXCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5leHByZXNzaW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgZW5zdXJlQ29uZGl0aW9uUnVubmVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghIXRoaXMuY29uZGl0aW9uUnVubmVyKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5leHByZXNzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBleHByZXNzaW9uIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJzdXJ2ZXl2YWxpZGF0b3JcIiwgW1xuICB7IG5hbWU6IFwidGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGV4dFwiIH0sXG5dKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibnVtZXJpY3ZhbGlkYXRvclwiLFxuICBbXCJtaW5WYWx1ZTpudW1iZXJcIiwgXCJtYXhWYWx1ZTpudW1iZXJcIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTnVtZXJpY1ZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJ0ZXh0dmFsaWRhdG9yXCIsXG4gIFtcIm1pbkxlbmd0aDpudW1iZXJcIiwgXCJtYXhMZW5ndGg6bnVtYmVyXCIsIFwiYWxsb3dEaWdpdHM6Ym9vbGVhblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0VmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImFuc3dlcmNvdW50dmFsaWRhdG9yXCIsXG4gIFtcIm1pbkNvdW50Om51bWJlclwiLCBcIm1heENvdW50Om51bWJlclwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBBbnN3ZXJDb3VudFZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJyZWdleHZhbGlkYXRvclwiLFxuICBbXCJyZWdleFwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdleFZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJlbWFpbHZhbGlkYXRvclwiLFxuICBbXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBFbWFpbFZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImV4cHJlc3Npb252YWxpZGF0b3JcIixcbiAgW1wiZXhwcmVzc2lvbjpjb25kaXRpb25cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEJhc2VWdWUgZXh0ZW5kcyBWdWUge1xuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc1JlbmRlcmluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgaWYgKCEhbW9kZWwpIHtcbiAgICAgICg8YW55Pm1vZGVsKS5pc1JlbmRlcmluZyA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc1JlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgcmV0dXJuICEhbW9kZWwgJiYgISEoPGFueT5tb2RlbCkuaXNSZW5kZXJpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHt9XG4gIHByb3RlY3RlZCBvblVwZGF0ZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25EZXN0cm95ZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25DcmVhdGVkKCkge1xuICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICBpZiAoIW1vZGVsKSByZXR1cm47XG4gICAgbW9kZWwuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoOiBhbnksIGtleTogYW55KSA9PiB7XG4gICAgICBWdWUuc2V0KGhhc2gsIGtleSwgaGFzaFtrZXldKTtcbiAgICB9KTtcbiAgICBtb2RlbC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSAoXG4gICAgICBwcm9wZXJ0aWVzSGFzaDogYW55LFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdmFsOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGlmICghcHJvcGVydGllc0hhc2guaGFzT3duUHJvcGVydHkobmFtZSkgfHwgIXRoaXMuZ2V0SXNSZW5kZXJpbmcoKSlcbiAgICAgICAgVnVlLnNldChwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgdmFsKTtcbiAgICAgIGVsc2UgcHJvcGVydGllc0hhc2hbbmFtZV0gPSB2YWw7XG4gICAgfTtcbiAgfVxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMub25DcmVhdGVkKCk7XG4gIH1cbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgfVxuICBiZWZvcmVVcGRhdGUoKSB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIHRoaXMub25Nb3VudGVkKCk7XG4gIH1cbiAgdXBkYXRlZCgpIHtcbiAgICB0aGlzLnNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLm9uRGVzdHJveWVkKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZVZ1ZTtcbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNjZDM0MGEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzVjY2QzNDBhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzVjY2QzNDBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzVjY2QzNDBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1Y2NkMzQwYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNjZDM0MGEmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MGU0YWViYiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3MGU0YWViYicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3MGU0YWViYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3MGU0YWViYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzcwZTRhZWJiJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzBlNGFlYmImXCIiLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQm9vbGVhbiBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQm9vbGVhbk1vZGVsPiB7XG4gIGdldCBpdGVtQ2xhc3MoKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IGlzQ2hlY2tlZCA9IHF1ZXN0aW9uLmNoZWNrZWRWYWx1ZTtcbiAgICBsZXQgaXNEaXNhYmxlZCA9IHF1ZXN0aW9uLmlzUmVhZE9ubHk7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IGNzc0NsYXNzZXMuaXRlbTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBlbHNlIGlmIChpc0NoZWNrZWQgPT09IG51bGwpXG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1JbmRldGVybWluYXRlO1xuICAgIHJldHVybiBpdGVtQ2xhc3M7XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhjaGVja2VkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICBjc3NDbGFzc2VzLmxhYmVsICtcbiAgICAgIFwiIFwiICtcbiAgICAgIChxdWVzdGlvbi5jaGVja2VkVmFsdWUgPT09ICFjaGVja2VkIHx8IHF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgPyBxdWVzdGlvbi5jc3NDbGFzc2VzLmRpc2FibGVkTGFiZWxcbiAgICAgICAgOiBcIlwiKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBwcmV2ZW50RGVmYXVsdHMoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgcHVibGljIG9uU3dpdGNoQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdHMoZXZlbnQpO1xuICAgICAgdmFyIGlzUmlnaHRDbGljayA9IGV2ZW50Lm9mZnNldFggLyBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggPiAwLjU7XG4gICAgICB2YXIgaXNSdGwgPVxuICAgICAgICBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGV2ZW50LnRhcmdldCkuZGlyZWN0aW9uID09IFwicnRsXCI7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IGlzUnRsID8gIWlzUmlnaHRDbGljayA6IGlzUmlnaHRDbGljaztcbiAgICB9XG4gIH1cbiAgcHVibGljIG9uTGFiZWxDbGljayhldmVudDogYW55LCB2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdHMoZXZlbnQpO1xuICAgICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiZGM3YWJiJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzZiZGM3YWJiJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzZiZGM3YWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzZiZGM3YWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmJkYzdhYmImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNmJkYzdhYmInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvYnV0dG9uZ3JvdXAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YmRjN2FiYiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YmFkNmFjZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzRiYWQ2YWNlJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzRiYWQ2YWNlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzRiYWQ2YWNlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRiYWQ2YWNlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2FkMjc2ZjYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnY2FkMjc2ZjYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnY2FkMjc2ZjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnY2FkMjc2ZjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYWQyNzZmNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjYWQyNzZmNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jaGVja2JveC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhZDI3NmY2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM1OGM4MGQwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYzU4YzgwZDAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYzU4YzgwZDAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYzU4YzgwZDAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzU4YzgwZDAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA5OWMyYzhkJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jb21tZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwOTljMmM4ZCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwOTljMmM4ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwOTljMmM4ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDk5YzJjOGQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDk5YzJjOGQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tbWVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA5OWMyYzhkJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjYTRmMjc2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGNhNGYyNzYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGNhNGYyNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGNhNGYyNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGNhNGYyNzYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNGNhNGYyNzYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjYTRmMjc2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNDBhMDU2ZjgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNDBhMDU2ZjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNDBhMDU2ZjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBhMDU2ZjgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNDBhMDU2ZjgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwYTA1NmY4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWFhYjY4NTAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWFhYjY4NTAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWFhYjY4NTAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWFhYjY4NTAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxYWFiNjg1MCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzMxM2JmMjEwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzMxM2JmMjEwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzMxM2JmMjEwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTNiZjIxMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczMTNiZjIxMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxM2JmMjEwJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmZTU0NjMyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmZlNTQ2MzInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmZlNTQ2MzInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmZlNTQ2MzInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZlNTQ2MzImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMmZlNTQ2MzInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmZTU0NjMyJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZjYxMTdkYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnN2Y2MTE3ZGMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnN2Y2MTE3ZGMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnN2Y2MTE3ZGMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2RlZmF1bHQtdGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmNjExN2RjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzdmNjExN2RjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Y2MTE3ZGMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjMTdhMDEwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjYzE3YTAxMCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjYzE3YTAxMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjYzE3YTAxMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2MxN2EwMTAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignY2MxN2EwMTAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzE3YTAxMCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWI0ZTY5YjYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzViNGU2OWI2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzViNGU2OWI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzViNGU2OWI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjRlNjliNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YjRlNjliNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViNGU2OWI2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGY1NWQyOTgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGY1NWQyOTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGY1NWQyOTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjU1ZDI5OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0ZjU1ZDI5OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4YTdhYTYwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjOGE3YWE2MCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzhhN2FhNjAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzhhN2FhNjAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOGE3YWE2MCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2MxOGRmZDc0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWMxOGRmZDc0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2MxOGRmZDc0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzE4ZGZkNzQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdlZjExMjY1YycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmMTEyNjVjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2VmMTEyNjVjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzY4NDc3NmY4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzY4NDc3NmY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzY4NDc3NmY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg0Nzc2ZjgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNjg0Nzc2ZjgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNzI4ODZlYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYjcyODg2ZWMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYjcyODg2ZWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYjcyODg2ZWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3RpdGxlLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI3Mjg4NmVjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2I3Mjg4NmVjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YjcyODg2ZWMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxYTllMjE5NicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxYTllMjE5NicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb3NpdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY3VzdG9tLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhZTA5YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2Q0YWFlMDlhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2Q0YWFlMDlhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2N1c3RvbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFlNjFhN2I3JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWU2MWE3YjcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWU2MWE3YjcnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjMyMTVkMyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2YjMyMTVkMycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2YjMyMTVkMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2YjMyMTVkMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzZiMzIxNWQzJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Ryb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmIzMjE1ZDMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5NzM0NzJhYycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5NzM0NzJhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5NzM0NzJhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTczNDcyYWMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOTczNDcyYWMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZWxlbWVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjdhZGM1MzcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjdhZGM1MzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjdhZGM1MzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3YWRjNTM3JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI3YWRjNTM3Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA1MDUyYzBhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA1MDUyYzBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA1MDUyYzBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lbXB0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwNTJjMGEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDUwNTJjMGEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZW1wdHkudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VtcHR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNTA1MmMwYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NjgyZTZhZCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzU2ODJlNmFkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzU2ODJlNmFkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzU2ODJlNmFkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzU2ODJlNmFkJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Vycm9ycy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWQyMDg2NWEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWQyMDg2NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWQyMDg2NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkMjA4NjVhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFkMjA4NjVhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2V4cHJlc3Npb24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ZpbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzIwZjcwMjg0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzIwZjcwMjg0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzIwZjcwMjg0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9maWxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGY3MDI4NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyMGY3MDI4NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9maWxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTZhZTFhNzgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5NmFlMWE3OCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5NmFlMWE3OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5NmFlMWE3OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5NmFlMWE3OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9mbG93cGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzlkOTkyYzMwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzlkOTkyYzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzlkOTkyYzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5ZDk5MmMzMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjljZmY4Y2YmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2OWNmZjhjZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2OWNmZjhjZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2OWNmZjhjZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2OWNmZjhjZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9oZWFkZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2h0bWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA3NDJlMTZkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA3NDJlMTZkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA3NDJlMTZkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9odG1sLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNzQyZTE2ZCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwNzQyZTE2ZCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9odG1sLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ltYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZGM4ZDcwOSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbWFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxZGM4ZDcwOScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxZGM4ZDcwOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxZGM4ZDcwOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkYzhkNzA5JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFkYzhkNzA5Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ltYWdlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxNTNmZTA1MicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxNTNmZTA1MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxNTNmZTA1MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1M2ZlMDUyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzE1M2ZlMDUyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUzZmUwNTImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMmY0MDMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3ZmEyZjQwMycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3ZmEyZjQwMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3ZmEyZjQwMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3ZmEyZjQwMycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXgudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzNjYTU0ZWU1JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzNjYTU0ZWU1JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzNjYTU0ZWU1JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2E1NGVlNSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczY2E1NGVlNScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwYjRkYTZkOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwYjRkYTZkOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwYjRkYTZkOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBiNGRhNmQ4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzBiNGRhNmQ4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGI0ZGE2ZDgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5YTBiODhlOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5YTBiODhlOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5YTBiODhlOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWEwYjg4ZTgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOWEwYjg4ZTgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbWF0cml4ZHluYW1pYy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZmExOTdlNGEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZmExOTdlNGEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZmExOTdlNGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZmExOTdlNGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdmYTE5N2U0YScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhMTk3ZTRhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkzZmU0YzAyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnOTNmZTRjMDInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnOTNmZTRjMDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnOTNmZTRjMDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOTNmZTRjMDInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ZWFkZmQ2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3NWVhZGZkNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3NWVhZGZkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3NWVhZGZkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzVlYWRmZDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzVlYWRmZDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbmF2aWdhdGlvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ZWFkZmQ2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmVkNzc2ZmYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmVkNzc2ZmYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmVkNzc2ZmYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmVkNzc2ZmYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZWQ3NzZmZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyZWQ3NzZmZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9vdGhlckNob2ljZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJlZDc3NmZmJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGU5NjJhNTEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGU5NjJhNTEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGU5NjJhNTEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRlOTYyYTUxJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhZ2UudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNzg4OTljJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBjNzg4OTljJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBjNzg4OTljJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBjNzg4OTljJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMGM3ODg5OWMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzc4ODk5YyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZGRhNWQwNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzlkZGE1ZDA2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzlkZGE1ZDA2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzlkZGE1ZDA2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzlkZGE1ZDA2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pYy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzQyYmZmYWMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzQyYmZmYWMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzQyYmZmYWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzQyYmZmYWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3NDJiZmZhYycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc0MmJmZmFjJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRiNmIyZjdlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZGI2YjJmN2UnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZGI2YjJmN2UnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZGI2YjJmN2UnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGI2YjJmN2UmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignZGI2YjJmN2UnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGI2YjJmN2UmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyN2UzMjVlZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyN2UzMjVlZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyN2UzMjVlZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3ZTMyNWVmJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI3ZTMyNWVmJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3Byb2dyZXNzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdlMzI1ZWYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyYWU3ZGU0MicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyYWU3ZGU0MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyYWU3ZGU0MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYWU3ZGU0MiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyYWU3ZGU0MicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYWU3ZGU0MiZcIiIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVnVlPFQgZXh0ZW5kcyBRdWVzdGlvbj4gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgcHVibGljIGlubmVyVmFsdWU6IGFueSA9IG51bGw7XG5cbiAgQFByb3AoKSBxdWVzdGlvbjogVDtcbiAgLy8gY3NzIHByb3AgbmVlZCBvbmx5IGZvciBwYW5lbC4gV2hlbiBwYW5lbCB3aWxsIGhhdmUgY3NzQ2xhc3NlcyBwcm9wZXJ0eSB0aGlzIHByb3Agd2lsbCBuZWVkIHRvIHJlbW92ZVxuICBAUHJvcCgpIGNzczogYW55O1xuXG4gIEBXYXRjaChcInF1ZXN0aW9uXCIpXG4gIGNoYW5nZVF1ZXN0aW9uKG5ld192YWw6IFQsIG9sZF92YWw6IFQpIHtcbiAgICB0aGlzLmlubmVyVmFsdWUgPSBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbi5iZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUXVlc3Rpb25WdWU7XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2YzZkNTI2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yYWRpb2dyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwNmM2ZDUyNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwNmM2ZDUyNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwNmM2ZDUyNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDZjNmQ1MjYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDZjNmQ1MjYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmFkaW9ncm91cC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2YzZkNTI2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJiZTk3YjkmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWJiZTk3YjknKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWJiZTk3YjknLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWJiZTk3YjknLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmJlOTdiOSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YmJlOTdiOScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViYmU5N2I5JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYWRlZDc2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmZhZGVkNzYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmZhZGVkNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmZhZGVkNzYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZhZGVkNzYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMmZhZGVkNzYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmFkZWQ3NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcmFua2luZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTkwNzRlZWEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcmFua2luZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzE5MDc0ZWVhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzE5MDc0ZWVhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzE5MDc0ZWVhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxOTA3NGVlYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcmF0aW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDkyYmZkZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzcwOTJiZmRmJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzcwOTJiZmRmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzcwOTJiZmRmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwOTJiZmRmJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzcwOTJiZmRmJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3JhdGluZy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmF0aW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwOTJiZmRmJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjYzBiZDg4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnN2NjMGJkODgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnN2NjMGJkODgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnN2NjMGJkODgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3Jvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjMGJkODgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignN2NjMGJkODgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcm93LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Jvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjMGJkODgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDQ2MjM0OWQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwNDYyMzQ5ZCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwNDYyMzQ5ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwNDYyMzQ5ZCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwNDYyMzQ5ZCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTYzOWYxNTImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzk2MzlmMTUyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzk2MzlmMTUyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzk2MzlmMTUyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NjM5ZjE1MiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5NjM5ZjE1MicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTYzOWYxNTImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zdHJpbmctdmlld2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3ZDkxODUwOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3ZDkxODUwOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3ZDkxODUwOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5MTg1MDgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignN2Q5MTg1MDgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvc3RyaW5nLXZpZXdlci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOTE4NTA4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQzYTNkNzVhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZDNhM2Q3NWEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZDNhM2Q3NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZDNhM2Q3NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3N0cmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNhM2Q3NWEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignZDNhM2Q3NWEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvc3RyaW5nLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNhM2Q3NWEmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3N1cnZleS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg3NGUxYzgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2ODc0ZTFjOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2ODc0ZTFjOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2ODc0ZTFjOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODc0ZTFjOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2ODc0ZTFjOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdXJ2ZXkudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODc0ZTFjOCZcIiIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFZ1ZVN1cnZleU1vZGVsIGV4dGVuZHMgU3VydmV5TW9kZWwge1xuICByZW5kZXJDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJDYWxsYmFjaykge1xuICAgICAgdGhpcy5yZW5kZXJDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkaW5nU3VydmV5RnJvbVNlcnZpY2UoKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuICBnZXQgY3NzKCkge1xuICAgIHJldHVybiBzdXJ2ZXlDc3MuZ2V0Q3NzKCk7XG4gIH1cbiAgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5tZXJnZVZhbHVlcyh2YWx1ZSwgdGhpcy5jc3MpO1xuICB9XG4gIHB1YmxpYyBzZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBWdWUuc2V0KHZhbHVlc0hhc2gsIGtleSwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBkZWxldGVEYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBWdWUuZGVsZXRlKHZhbHVlc0hhc2gsIGtleSk7XG4gIH1cbiAgcHVibGljIGRvQWZ0ZXJSZW5kZXJTdXJ2ZXkoZWw6IGFueSkge1xuICAgIHRoaXMuYWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xuICB9XG4gIHB1YmxpYyBkb0FmdGVyUmVuZGVySGVhZGVyKGVsOiBhbnkpIHtcbiAgICB0aGlzLmFmdGVyUmVuZGVySGVhZGVyKGVsKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVnVlU3VydmV5V2luZG93TW9kZWwgZXh0ZW5kcyBTdXJ2ZXlXaW5kb3dNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSwgaW5pdGlhbE1vZGVsOiBTdXJ2ZXlNb2RlbCA9IG51bGwpIHtcbiAgICBzdXBlcihqc29uT2JqLCBpbml0aWFsTW9kZWwpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiBuZXcgVnVlU3VydmV5TW9kZWwoanNvbk9iaik7XG4gIH1cbn1cblxuU3VydmV5TW9kZWwucGxhdGZvcm0gPSBcInZ1ZVwiO1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi90ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGVjZTQyMiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNDBlY2U0MjInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNDBlY2U0MjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNDBlY2U0MjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3RleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwZWNlNDIyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzQwZWNlNDIyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3RleHQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGVjZTQyMiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBkMmFiZTIxJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBkMmFiZTIxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBkMmFiZTIxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZDJhYmUyMSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwZDJhYmUyMScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGQyYWJlMjEmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RpdGxlY29udGVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2Q0OWI4M2EmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjZDQ5YjgzYScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjZDQ5YjgzYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjZDQ5YjgzYScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDQ5YjgzYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjZDQ5YjgzYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS90aXRsZWNvbnRlbnQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aXRsZWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RpdGxlY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDQ5YjgzYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vd2luZG93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MmY1ODhiMiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzYyZjU4OGIyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzYyZjU4OGIyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzYyZjU4OGIyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU4OGIyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzYyZjU4OGIyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3dpbmRvdy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3dpbmRvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vd2luZG93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU4OGIyJlwiIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Z1ZV9fOyJdLCJzb3VyY2VSb290IjoiIn0=","// Styles\nimport './VItemGroup.sass'\n\n// Mixins\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\nexport type GroupableInstance = InstanceType & {\n id?: string\n to?: any\n value?: any\n }\n\nexport const BaseItemGroup = mixins(\n Proxyable,\n Themeable\n).extend({\n name: 'base-item-group',\n\n props: {\n activeClass: {\n type: String,\n default: 'v-item--active',\n },\n mandatory: Boolean,\n max: {\n type: [Number, String],\n default: null,\n },\n multiple: Boolean,\n },\n\n data () {\n return {\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n internalLazyValue: this.value !== undefined\n ? this.value\n : this.multiple ? [] : undefined,\n items: [] as GroupableInstance[],\n }\n },\n\n computed: {\n classes (): Record {\n return {\n 'v-item-group': true,\n ...this.themeClasses,\n }\n },\n selectedIndex (): number {\n return (this.selectedItem && this.items.indexOf(this.selectedItem)) || -1\n },\n selectedItem (): GroupableInstance | undefined {\n if (this.multiple) return undefined\n\n return this.selectedItems[0]\n },\n selectedItems (): GroupableInstance[] {\n return this.items.filter((item, index) => {\n return this.toggleMethod(this.getValue(item, index))\n })\n },\n selectedValues (): any[] {\n if (this.internalValue == null) return []\n\n return Array.isArray(this.internalValue)\n ? this.internalValue\n : [this.internalValue]\n },\n toggleMethod (): (v: any) => boolean {\n if (!this.multiple) {\n return (v: any) => this.internalValue === v\n }\n\n const internalValue = this.internalValue\n if (Array.isArray(internalValue)) {\n return (v: any) => internalValue.includes(v)\n }\n\n return () => false\n },\n },\n\n watch: {\n internalValue: 'updateItemsState',\n items: 'updateItemsState',\n },\n\n created () {\n if (this.multiple && !Array.isArray(this.internalValue)) {\n consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n }\n },\n\n methods: {\n\n genData (): object {\n return {\n class: this.classes,\n }\n },\n getValue (item: GroupableInstance, i: number): unknown {\n return item.value == null || item.value === ''\n ? i\n : item.value\n },\n onClick (item: GroupableInstance) {\n this.updateInternalValue(\n this.getValue(item, this.items.indexOf(item))\n )\n },\n register (item: GroupableInstance) {\n const index = this.items.push(item) - 1\n\n item.$on('change', () => this.onClick(item))\n\n // If no value provided and mandatory,\n // assign first registered item\n if (this.mandatory && !this.selectedValues.length) {\n this.updateMandatory()\n }\n\n this.updateItem(item, index)\n },\n unregister (item: GroupableInstance) {\n if (this._isDestroyed) return\n\n const index = this.items.indexOf(item)\n const value = this.getValue(item, index)\n\n this.items.splice(index, 1)\n\n const valueIndex = this.selectedValues.indexOf(value)\n\n // Items is not selected, do nothing\n if (valueIndex < 0) return\n\n // If not mandatory, use regular update process\n if (!this.mandatory) {\n return this.updateInternalValue(value)\n }\n\n // Remove the value\n if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = this.internalValue.filter(v => v !== value)\n } else {\n this.internalValue = undefined\n }\n\n // If mandatory and we have no selection\n // add the last item as value\n /* istanbul ignore else */\n if (!this.selectedItems.length) {\n this.updateMandatory(true)\n }\n },\n updateItem (item: GroupableInstance, index: number) {\n const value = this.getValue(item, index)\n\n item.isActive = this.toggleMethod(value)\n },\n // https://github.com/vuetifyjs/vuetify/issues/5352\n updateItemsState () {\n this.$nextTick(() => {\n if (this.mandatory &&\n !this.selectedItems.length\n ) {\n return this.updateMandatory()\n }\n\n // TODO: Make this smarter so it\n // doesn't have to iterate every\n // child in an update\n this.items.forEach(this.updateItem)\n })\n },\n updateInternalValue (value: any) {\n this.multiple\n ? this.updateMultiple(value)\n : this.updateSingle(value)\n },\n updateMandatory (last?: boolean) {\n if (!this.items.length) return\n\n const items = this.items.slice()\n\n if (last) items.reverse()\n\n const item = items.find(item => !item.disabled)\n\n // If no tabs are available\n // aborts mandatory value\n if (!item) return\n\n const index = this.items.indexOf(item)\n\n this.updateInternalValue(\n this.getValue(item, index)\n )\n },\n updateMultiple (value: any) {\n const defaultValue = Array.isArray(this.internalValue)\n ? this.internalValue\n : []\n const internalValue = defaultValue.slice()\n const index = internalValue.findIndex(val => val === value)\n\n if (\n this.mandatory &&\n // Item already exists\n index > -1 &&\n // value would be reduced below min\n internalValue.length - 1 < 1\n ) return\n\n if (\n // Max is set\n this.max != null &&\n // Item doesn't exist\n index < 0 &&\n // value would be increased above max\n internalValue.length + 1 > this.max\n ) return\n\n index > -1\n ? internalValue.splice(index, 1)\n : internalValue.push(value)\n\n this.internalValue = internalValue\n },\n updateSingle (value: any) {\n const isSame = value === this.internalValue\n\n if (this.mandatory && isSame) return\n\n this.internalValue = isSame ? undefined : value\n },\n },\n\n render (h): VNode {\n return h('div', this.genData(), this.$slots.default)\n },\n})\n\nexport default BaseItemGroup.extend({\n name: 'v-item-group',\n\n provide (): object {\n return {\n itemGroup: this,\n }\n },\n})\n","// Styles\nimport './VListItemGroup.sass'\n\n// Extensions\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n BaseItemGroup,\n Colorable\n).extend({\n name: 'v-list-item-group',\n\n provide () {\n return {\n isInGroup: true,\n listItemGroup: this,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-list-item-group': true,\n }\n },\n },\n\n methods: {\n genData (): object {\n return this.setTextColor(this.color, {\n ...BaseItemGroup.options.methods.genData.call(this),\n attrs: {\n role: 'listbox',\n },\n })\n },\n },\n})\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType,\n default: undefined,\n },\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click,\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim()\n\n const path = `_vnode.data.class.${activeClass}`\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (getObjectValueByPath(this.$refs.link, path)) {\n this.toggle()\n }\n })\n },\n toggle: () => { /* noop */ },\n },\n})\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(b,c,d){var e=new XMLHttpRequest;e.open(\"GET\",b),e.responseType=\"blob\",e.onload=function(){a(e.response,c,d)},e.onerror=function(){console.error(\"could not download file\")},e.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(a,b,d,e){if(e=e||open(\"\",\"_blank\"),e&&(e.document.title=e.document.body.innerText=\"downloading...\"),\"string\"==typeof a)return c(a,b,d);var g=\"application/octet-stream\"===a.type,h=/constructor/i.test(f.HTMLElement)||f.safari,i=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((i||g&&h)&&\"object\"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),e?e.location.href=a:location=a,e=null},j.readAsDataURL(a)}else{var k=f.URL||f.webkitURL,l=k.createObjectURL(a);e?e.location=l:location.href=l,e=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}});f.saveAs=a.saveAs=a,\"undefined\"!=typeof module&&(module.exports=a)});\n\n//# sourceMappingURL=FileSaver.min.js.map","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/);\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/* cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W100 */\nvar cptable = {version:\"1.14.0\"};\ncptable[437] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[620] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàąçêëèïîćÄĄĘęłôöĆûùŚÖÜ¢Ł¥śƒŹŻóÓńŃźż¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[737] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[850] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[852] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[857] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[861] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[865] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[866] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[874] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[895] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ČüéďäĎŤčěĚĹÍľǪÄÁÉžŽôöÓůÚýÖÜŠĽÝŘťáíóúňŇŮÔšřŕŔ¼§«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[932] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚��������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[129] = \"���������������������������������������������������������������� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×�÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓�����������∈∋⊆⊇⊂⊃∪∩��������∧∨¬⇒⇔∀∃�����������∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬�������ʼn♯♭♪†‡¶����◯���\".split(\"\");\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\nD[130] = \"�������������������������������������������������������������������������������0123456789�������ABCDEFGHIJKLMNOPQRSTUVWXYZ�������abcdefghijklmnopqrstuvwxyz����ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん��������������\".split(\"\");\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\nD[131] = \"����������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ�ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ��������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�����������������������������������������\".split(\"\");\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\nD[132] = \"����������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмн�опрстуфхцчшщъыьэюя�������������─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂�����������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\nD[135] = \"����������������������������������������������������������������①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡��������㍻�〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪���������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\nD[136] = \"���������������������������������������������������������������������������������������������������������������������������������������������������������������亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭���\".split(\"\");\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\nD[137] = \"����������������������������������������������������������������院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円�園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改���\".split(\"\");\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\nD[138] = \"����������������������������������������������������������������魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫�橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄���\".split(\"\");\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\nD[139] = \"����������������������������������������������������������������機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救�朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈���\".split(\"\");\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\nD[140] = \"����������������������������������������������������������������掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨�劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向���\".split(\"\");\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\nD[141] = \"����������������������������������������������������������������后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降�項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷���\".split(\"\");\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\nD[142] = \"����������������������������������������������������������������察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止�死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周���\".split(\"\");\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\nD[143] = \"����������������������������������������������������������������宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳�準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾���\".split(\"\");\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\nD[144] = \"����������������������������������������������������������������拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨�逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線���\".split(\"\");\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\nD[145] = \"����������������������������������������������������������������繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻�操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只���\".split(\"\");\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\nD[146] = \"����������������������������������������������������������������叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄�逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓���\".split(\"\");\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\nD[147] = \"����������������������������������������������������������������邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬�凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入���\".split(\"\");\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\nD[148] = \"����������������������������������������������������������������如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅�楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美���\".split(\"\");\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\nD[149] = \"����������������������������������������������������������������鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷�斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋���\".split(\"\");\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\nD[150] = \"����������������������������������������������������������������法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆�摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒���\".split(\"\");\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\nD[151] = \"����������������������������������������������������������������諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲�沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯���\".split(\"\");\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\nD[152] = \"����������������������������������������������������������������蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕��������������������������������������������弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲���\".split(\"\");\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\nD[153] = \"����������������������������������������������������������������僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭�凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨���\".split(\"\");\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\nD[154] = \"����������������������������������������������������������������咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸�噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩���\".split(\"\");\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\nD[155] = \"����������������������������������������������������������������奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀�它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏���\".split(\"\");\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\nD[156] = \"����������������������������������������������������������������廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠�怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛���\".split(\"\");\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\nD[157] = \"����������������������������������������������������������������戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫�捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼���\".split(\"\");\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\nD[158] = \"����������������������������������������������������������������曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎�梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣���\".split(\"\");\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\nD[159] = \"����������������������������������������������������������������檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯�麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌���\".split(\"\");\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\nD[224] = \"����������������������������������������������������������������漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝�烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱���\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"����������������������������������������������������������������瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿�痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬���\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"����������������������������������������������������������������磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰�窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆���\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"����������������������������������������������������������������紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷�縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋���\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"����������������������������������������������������������������隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤�艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈���\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"����������������������������������������������������������������蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬�蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞���\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"����������������������������������������������������������������襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧�諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊���\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"����������������������������������������������������������������蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜�轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮���\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"����������������������������������������������������������������錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙�閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰���\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"����������������������������������������������������������������顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃�騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈���\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"����������������������������������������������������������������鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯�黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙�������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[237] = \"����������������������������������������������������������������纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏�塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱���\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"����������������������������������������������������������������犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙�蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"���\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[250] = \"����������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊�兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯���\".split(\"\");\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\nD[251] = \"����������������������������������������������������������������涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神�祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙���\".split(\"\");\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\nD[252] = \"����������������������������������������������������������������髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[936] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[129] = \"����������������������������������������������������������������丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪乫乬乭乮乯乲乴乵乶乷乸乹乺乻乼乽乿亀亁亂亃亄亅亇亊�亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂伃伄伅伆伇伈伋伌伒伓伔伕伖伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾伿佀佁佂佄佅佇佈佉佊佋佌佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢�\".split(\"\");\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\nD[130] = \"����������������������������������������������������������������侤侫侭侰侱侲侳侴侶侷侸侹侺侻侼侽侾俀俁係俆俇俈俉俋俌俍俒俓俔俕俖俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倆倇倈倉倊�個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸倹倻倽倿偀偁偂偄偅偆偉偊偋偍偐偑偒偓偔偖偗偘偙偛偝偞偟偠偡偢偣偤偦偧偨偩偪偫偭偮偯偰偱偲偳側偵偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠傡傢傤傦傪傫傭傮傯傰傱傳傴債傶傷傸傹傼�\".split(\"\");\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\nD[131] = \"����������������������������������������������������������������傽傾傿僀僁僂僃僄僅僆僇僈僉僊僋僌働僎僐僑僒僓僔僕僗僘僙僛僜僝僞僟僠僡僢僣僤僥僨僩僪僫僯僰僱僲僴僶僷僸價僺僼僽僾僿儀儁儂儃億儅儈�儉儊儌儍儎儏儐儑儓儔儕儖儗儘儙儚儛儜儝儞償儠儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾兂兇兊兌兎兏児兒兓兗兘兙兛兝兞兟兠兡兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦冧冨冩冪冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒凓凔凕凖凗�\".split(\"\");\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\nD[132] = \"����������������������������������������������������������������凘凙凚凜凞凟凢凣凥処凧凨凩凪凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄剅剆則剈剉剋剎剏剒剓剕剗剘�剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳剴創剶剷剸剹剺剻剼剾劀劃劄劅劆劇劉劊劋劌劍劎劏劑劒劔劕劖劗劘劙劚劜劤劥劦劧劮劯劰労劵劶劷劸効劺劻劼劽勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務勚勛勜勝勞勠勡勢勣勥勦勧勨勩勪勫勬勭勮勯勱勲勳勴勵勶勷勸勻勼勽匁匂匃匄匇匉匊匋匌匎�\".split(\"\");\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\nD[133] = \"����������������������������������������������������������������匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯匰匱匲匳匴匵匶匷匸匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏�厐厑厒厓厔厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯厰厱厲厳厴厵厷厸厹厺厼厽厾叀參叄叅叆叇収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝呞呟呠呡呣呥呧呩呪呫呬呭呮呯呰呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡�\".split(\"\");\nfor(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}\nD[134] = \"����������������������������������������������������������������咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠員哢哣哤哫哬哯哰哱哴哵哶哷哸哹哻哾唀唂唃唄唅唈唊唋唌唍唎唒唓唕唖唗唘唙唚唜唝唞唟唡唥唦�唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋啌啍啎問啑啒啓啔啗啘啙啚啛啝啞啟啠啢啣啨啩啫啯啰啱啲啳啴啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠喡喢喣喤喥喦喨喩喪喫喬喭單喯喰喲喴営喸喺喼喿嗀嗁嗂嗃嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗嗘嗙嗚嗛嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸嗹嗺嗻嗼嗿嘂嘃嘄嘅�\".split(\"\");\nfor(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}\nD[135] = \"����������������������������������������������������������������嘆嘇嘊嘋嘍嘐嘑嘒嘓嘔嘕嘖嘗嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀噁噂噃噄噅噆噇噈噉噊噋噏噐噑噒噓噕噖噚噛噝噞噟噠噡�噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽噾噿嚀嚁嚂嚃嚄嚇嚈嚉嚊嚋嚌嚍嚐嚑嚒嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚰嚱嚲嚳嚴嚵嚶嚸嚹嚺嚻嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囋囌囍囎囏囐囑囒囓囕囖囘囙囜団囥囦囧囨囩囪囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國圌圍圎圏圐圑�\".split(\"\");\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\nD[136] = \"����������������������������������������������������������������園圓圔圕圖圗團圙圚圛圝圞圠圡圢圤圥圦圧圫圱圲圴圵圶圷圸圼圽圿坁坃坄坅坆坈坉坋坒坓坔坕坖坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀�垁垇垈垉垊垍垎垏垐垑垔垕垖垗垘垙垚垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹垺垻垼垽垾垿埀埁埄埅埆埇埈埉埊埌埍埐埑埓埖埗埛埜埞埡埢埣埥埦埧埨埩埪埫埬埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥堦堧堨堩堫堬堭堮堯報堲堳場堶堷堸堹堺堻堼堽�\".split(\"\");\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\nD[137] = \"����������������������������������������������������������������堾堿塀塁塂塃塅塆塇塈塉塊塋塎塏塐塒塓塕塖塗塙塚塛塜塝塟塠塡塢塣塤塦塧塨塩塪塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塿墂墄墆墇墈墊墋墌�墍墎墏墐墑墔墕墖増墘墛墜墝墠墡墢墣墤墥墦墧墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墽墾墿壀壂壃壄壆壇壈壉壊壋壌壍壎壏壐壒壓壔壖壗壘壙壚壛壜壝壞壟壠壡壢壣壥壦壧壨壩壪壭壯壱売壴壵壷壸壺壻壼壽壾壿夀夁夃夅夆夈変夊夋夌夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻�\".split(\"\");\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\nD[138] = \"����������������������������������������������������������������夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛奜奝奞奟奡奣奤奦奧奨奩奪奫奬奭奮奯奰奱奲奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦�妧妬妭妰妱妳妴妵妶妷妸妺妼妽妿姀姁姂姃姄姅姇姈姉姌姍姎姏姕姖姙姛姞姟姠姡姢姤姦姧姩姪姫姭姮姯姰姱姲姳姴姵姶姷姸姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪娫娬娭娮娯娰娳娵娷娸娹娺娻娽娾娿婁婂婃婄婅婇婈婋婌婍婎婏婐婑婒婓婔婖婗婘婙婛婜婝婞婟婠�\".split(\"\");\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\nD[139] = \"����������������������������������������������������������������婡婣婤婥婦婨婩婫婬婭婮婯婰婱婲婳婸婹婻婼婽婾媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媓媔媕媖媗媘媙媜媝媞媟媠媡媢媣媤媥媦媧媨媩媫媬�媭媮媯媰媱媴媶媷媹媺媻媼媽媿嫀嫃嫄嫅嫆嫇嫈嫊嫋嫍嫎嫏嫐嫑嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬嫭嫮嫯嫰嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬸嬹嬺嬻嬼嬽嬾嬿孁孂孃孄孅孆孇�\".split(\"\");\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\nD[140] = \"����������������������������������������������������������������孈孉孊孋孌孍孎孏孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏�寑寔寕寖寗寘寙寚寛寜寠寢寣實寧審寪寫寬寭寯寱寲寳寴寵寶寷寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧屨屩屪屫屬屭屰屲屳屴屵屶屷屸屻屼屽屾岀岃岄岅岆岇岉岊岋岎岏岒岓岕岝岞岟岠岡岤岥岦岧岨�\".split(\"\");\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\nD[141] = \"����������������������������������������������������������������岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅峆峇峈峉峊峌峍峎峏峐峑峓峔峕峖峗峘峚峛峜峝峞峟峠峢峣峧峩峫峬峮峯峱峲峳峴峵島峷峸峹峺峼峽峾峿崀�崁崄崅崈崉崊崋崌崍崏崐崑崒崓崕崗崘崙崚崜崝崟崠崡崢崣崥崨崪崫崬崯崰崱崲崳崵崶崷崸崹崺崻崼崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵙嵚嵜嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵪嵭嵮嵰嵱嵲嵳嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶚嶛嶜嶞嶟嶠�\".split(\"\");\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\nD[142] = \"����������������������������������������������������������������嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶸嶹嶺嶻嶼嶽嶾嶿巀巁巂巃巄巆巇巈巉巊巋巌巎巏巐巑巒巓巔巕巖巗巘巙巚巜巟巠巣巤巪巬巭�巰巵巶巸巹巺巻巼巿帀帄帇帉帊帋帍帎帒帓帗帞帟帠帡帢帣帤帥帨帩帪師帬帯帰帲帳帴帵帶帹帺帾帿幀幁幃幆幇幈幉幊幋幍幎幏幐幑幒幓幖幗幘幙幚幜幝幟幠幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨庩庪庫庬庮庯庰庱庲庴庺庻庼庽庿廀廁廂廃廄廅�\".split(\"\");\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\nD[143] = \"����������������������������������������������������������������廆廇廈廋廌廍廎廏廐廔廕廗廘廙廚廜廝廞廟廠廡廢廣廤廥廦廧廩廫廬廭廮廯廰廱廲廳廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤�弨弫弬弮弰弲弳弴張弶強弸弻弽弾弿彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢徣徤徥徦徧復徫徬徯徰徱徲徳徴徶徸徹徺徻徾徿忀忁忂忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇�\".split(\"\");\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\nD[144] = \"����������������������������������������������������������������怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰怱怲怳怴怶怷怸怹怺怽怾恀恄恅恆恇恈恉恊恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀�悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽悾悿惀惁惂惃惄惇惈惉惌惍惎惏惐惒惓惔惖惗惙惛惞惡惢惣惤惥惪惱惲惵惷惸惻惼惽惾惿愂愃愄愅愇愊愋愌愐愑愒愓愔愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾慀慁慂慃慄慅慆�\".split(\"\");\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\nD[145] = \"����������������������������������������������������������������慇慉態慍慏慐慒慓慔慖慗慘慙慚慛慜慞慟慠慡慣慤慥慦慩慪慫慬慭慮慯慱慲慳慴慶慸慹慺慻慼慽慾慿憀憁憂憃憄憅憆憇憈憉憊憌憍憏憐憑憒憓憕�憖憗憘憙憚憛憜憞憟憠憡憢憣憤憥憦憪憫憭憮憯憰憱憲憳憴憵憶憸憹憺憻憼憽憿懀懁懃懄懅懆懇應懌懍懎懏懐懓懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懧懨懩懪懫懬懭懮懯懰懱懲懳懴懶懷懸懹懺懻懼懽懾戀戁戂戃戄戅戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸戹戺戻戼扂扄扅扆扊�\".split(\"\");\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\nD[146] = \"����������������������������������������������������������������扏扐払扖扗扙扚扜扝扞扟扠扡扢扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋抌抍抎抏抐抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁�拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳挴挵挶挷挸挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖捗捘捙捚捛捜捝捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙掚掛掜掝掞掟採掤掦掫掯掱掲掵掶掹掻掽掿揀�\".split(\"\");\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\nD[147] = \"����������������������������������������������������������������揁揂揃揅揇揈揊揋揌揑揓揔揕揗揘揙揚換揜揝揟揢揤揥揦揧揨揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆搇搈搉搊損搎搑搒搕搖搗搘搙搚搝搟搢搣搤�搥搧搨搩搫搮搯搰搱搲搳搵搶搷搸搹搻搼搾摀摂摃摉摋摌摍摎摏摐摑摓摕摖摗摙摚摛摜摝摟摠摡摢摣摤摥摦摨摪摫摬摮摯摰摱摲摳摴摵摶摷摻摼摽摾摿撀撁撃撆撈撉撊撋撌撍撎撏撐撓撔撗撘撚撛撜撝撟撠撡撢撣撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆擇擈擉擊擋擌擏擑擓擔擕擖擙據�\".split(\"\");\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\nD[148] = \"����������������������������������������������������������������擛擜擝擟擠擡擣擥擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攁攂攃攄攅攆攇攈攊攋攌攍攎攏攐攑攓攔攕攖攗攙攚攛攜攝攞攟攠攡�攢攣攤攦攧攨攩攪攬攭攰攱攲攳攷攺攼攽敀敁敂敃敄敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數敹敺敻敼敽敾敿斀斁斂斃斄斅斆斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱斲斳斴斵斶斷斸斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘旙旚旛旜旝旞旟旡旣旤旪旫�\".split(\"\");\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\nD[149] = \"����������������������������������������������������������������旲旳旴旵旸旹旻旼旽旾旿昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷昸昹昺昻昽昿晀時晄晅晆晇晈晉晊晍晎晐晑晘�晙晛晜晝晞晠晢晣晥晧晩晪晫晬晭晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘暙暚暛暜暞暟暠暡暢暣暤暥暦暩暪暫暬暭暯暰暱暲暳暵暶暷暸暺暻暼暽暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曚曞曟曠曡曢曣曤曥曧曨曪曫曬曭曮曯曱曵曶書曺曻曽朁朂會�\".split(\"\");\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\nD[150] = \"����������������������������������������������������������������朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠朡朢朣朤朥朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗杘杙杚杛杝杢杣杤杦杧杫杬杮東杴杶�杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹枺枻枼枽枾枿柀柂柅柆柇柈柉柊柋柌柍柎柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵柶柷柸柹柺査柼柾栁栂栃栄栆栍栐栒栔栕栘栙栚栛栜栞栟栠栢栣栤栥栦栧栨栫栬栭栮栯栰栱栴栵栶栺栻栿桇桋桍桏桒桖桗桘桙桚桛�\".split(\"\");\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\nD[151] = \"����������������������������������������������������������������桜桝桞桟桪桬桭桮桯桰桱桲桳桵桸桹桺桻桼桽桾桿梀梂梄梇梈梉梊梋梌梍梎梐梑梒梔梕梖梘梙梚梛梜條梞梟梠梡梣梤梥梩梪梫梬梮梱梲梴梶梷梸�梹梺梻梼梽梾梿棁棃棄棅棆棇棈棊棌棎棏棐棑棓棔棖棗棙棛棜棝棞棟棡棢棤棥棦棧棨棩棪棫棬棭棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆椇椈椉椊椌椏椑椓椔椕椖椗椘椙椚椛検椝椞椡椢椣椥椦椧椨椩椪椫椬椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楕楖楘楙楛楜楟�\".split(\"\");\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\nD[152] = \"����������������������������������������������������������������楡楢楤楥楧楨楩楪楬業楯楰楲楳楴極楶楺楻楽楾楿榁榃榅榊榋榌榎榏榐榑榒榓榖榗榙榚榝榞榟榠榡榢榣榤榥榦榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽�榾榿槀槂槃槄槅槆槇槈槉構槍槏槑槒槓槕槖槗様槙槚槜槝槞槡槢槣槤槥槦槧槨槩槪槫槬槮槯槰槱槳槴槵槶槷槸槹槺槻槼槾樀樁樂樃樄樅樆樇樈樉樋樌樍樎樏樐樑樒樓樔樕樖標樚樛樜樝樞樠樢樣樤樥樦樧権樫樬樭樮樰樲樳樴樶樷樸樹樺樻樼樿橀橁橂橃橅橆橈橉橊橋橌橍橎橏橑橒橓橔橕橖橗橚�\".split(\"\");\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\nD[153] = \"����������������������������������������������������������������橜橝橞機橠橢橣橤橦橧橨橩橪橫橬橭橮橯橰橲橳橴橵橶橷橸橺橻橽橾橿檁檂檃檅檆檇檈檉檊檋檌檍檏檒檓檔檕檖檘檙檚檛檜檝檞檟檡檢檣檤檥檦�檧檨檪檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欥欦欨欩欪欫欬欭欮�\".split(\"\");\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\nD[154] = \"����������������������������������������������������������������欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍歎歏歐歑歒歓歔歕歖歗歘歚歛歜歝歞歟歠歡歨歩歫歬歭歮歯歰歱歲歳歴歵歶歷歸歺歽歾歿殀殅殈�殌殎殏殐殑殔殕殗殘殙殜殝殞殟殠殢殣殤殥殦殧殨殩殫殬殭殮殯殰殱殲殶殸殹殺殻殼殽殾毀毃毄毆毇毈毉毊毌毎毐毑毘毚毜毝毞毟毠毢毣毤毥毦毧毨毩毬毭毮毰毱毲毴毶毷毸毺毻毼毾毿氀氁氂氃氄氈氉氊氋氌氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋汌汍汎汏汑汒汓汖汘�\".split(\"\");\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\nD[155] = \"����������������������������������������������������������������汙汚汢汣汥汦汧汫汬汭汮汯汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘�泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟洠洡洢洣洤洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽浾浿涀涁涃涄涆涇涊涋涍涏涐涒涖涗涘涙涚涜涢涥涬涭涰涱涳涴涶涷涹涺涻涼涽涾淁淂淃淈淉淊�\".split(\"\");\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\nD[156] = \"����������������������������������������������������������������淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽淾淿渀渁渂渃渄渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵�渶渷渹渻渼渽渾渿湀湁湂湅湆湇湈湉湊湋湌湏湐湑湒湕湗湙湚湜湝湞湠湡湢湣湤湥湦湧湨湩湪湬湭湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽満溁溂溄溇溈溊溋溌溍溎溑溒溓溔溕準溗溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪滫滬滭滮滯�\".split(\"\");\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\nD[157] = \"����������������������������������������������������������������滰滱滲滳滵滶滷滸滺滻滼滽滾滿漀漁漃漄漅漇漈漊漋漌漍漎漐漑漒漖漗漘漙漚漛漜漝漞漟漡漢漣漥漦漧漨漬漮漰漲漴漵漷漸漹漺漻漼漽漿潀潁潂�潃潄潅潈潉潊潌潎潏潐潑潒潓潔潕潖潗潙潚潛潝潟潠潡潣潤潥潧潨潩潪潫潬潯潰潱潳潵潶潷潹潻潽潾潿澀澁澂澃澅澆澇澊澋澏澐澑澒澓澔澕澖澗澘澙澚澛澝澞澟澠澢澣澤澥澦澨澩澪澫澬澭澮澯澰澱澲澴澵澷澸澺澻澼澽澾澿濁濃濄濅濆濇濈濊濋濌濍濎濏濐濓濔濕濖濗濘濙濚濛濜濝濟濢濣濤濥�\".split(\"\");\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\nD[158] = \"����������������������������������������������������������������濦濧濨濩濪濫濬濭濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀒瀓瀔瀕瀖瀗瀘瀙瀜瀝瀞瀟瀠瀡瀢瀤瀥瀦瀧瀨瀩瀪�瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀶瀷瀸瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灍灎灐灑灒灓灔灕灖灗灘灙灚灛灜灝灟灠灡灢灣灤灥灦灧灨灩灪灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞炟炠炡炢炣炤炥炦炧炨炩炪炰炲炴炵炶為炾炿烄烅烆烇烉烋烌烍烎烏烐烑烒烓烔烕烖烗烚�\".split(\"\");\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\nD[159] = \"����������������������������������������������������������������烜烝烞烠烡烢烣烥烪烮烰烱烲烳烴烵烶烸烺烻烼烾烿焀焁焂焃焄焅焆焇焈焋焌焍焎焏焑焒焔焗焛焜焝焞焟焠無焢焣焤焥焧焨焩焪焫焬焭焮焲焳焴�焵焷焸焹焺焻焼焽焾焿煀煁煂煃煄煆煇煈煉煋煍煏煐煑煒煓煔煕煖煗煘煙煚煛煝煟煠煡煢煣煥煩煪煫煬煭煯煰煱煴煵煶煷煹煻煼煾煿熀熁熂熃熅熆熇熈熉熋熌熍熎熐熑熒熓熕熖熗熚熛熜熝熞熡熢熣熤熥熦熧熩熪熫熭熮熯熰熱熲熴熶熷熸熺熻熼熽熾熿燀燁燂燄燅燆燇燈燉燊燋燌燍燏燐燑燒燓�\".split(\"\");\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\nD[160] = \"����������������������������������������������������������������燖燗燘燙燚燛燜燝燞營燡燢燣燤燦燨燩燪燫燬燭燯燰燱燲燳燴燵燶燷燸燺燻燼燽燾燿爀爁爂爃爄爅爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚�爛爜爞爟爠爡爢爣爤爥爦爧爩爫爭爮爯爲爳爴爺爼爾牀牁牂牃牄牅牆牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅犆犇犈犉犌犎犐犑犓犔犕犖犗犘犙犚犛犜犝犞犠犡犢犣犤犥犦犧犨犩犪犫犮犱犲犳犵犺犻犼犽犾犿狀狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛�\".split(\"\");\nfor(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}\nD[161] = \"����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������︵︶︹︺︿﹀︽︾﹁﹂﹃﹄��︻︼︷︸︱�︳︴����������\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"����������������������������������������������������������������ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇�█▉▊▋▌▍▎▏▓▔▕▼▽◢◣◤◥☉⊕〒〝〞�����������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ�ńň�ɡ����ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"����������������������������������������������������������������〡〢〣〤〥〦〧〨〩㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦�℡㈱�‐���ー゛゜ヽヾ〆ゝゞ﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡�﹢﹣﹤﹥﹦﹨﹩﹪﹫�������������〇�������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[170] = \"����������������������������������������������������������������狜狝狟狢狣狤狥狦狧狪狫狵狶狹狽狾狿猀猂猄猅猆猇猈猉猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀獁獂獃獄獅獆獇獈�獉獊獋獌獎獏獑獓獔獕獖獘獙獚獛獜獝獞獟獡獢獣獤獥獦獧獨獩獪獫獮獰獱�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\nD[171] = \"����������������������������������������������������������������獲獳獴獵獶獷獸獹獺獻獼獽獿玀玁玂玃玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣玤玥玦玧玨玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃珄珅珆珇�珋珌珎珒珓珔珕珖珗珘珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳珴珵珶珷�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\nD[172] = \"����������������������������������������������������������������珸珹珺珻珼珽現珿琀琁琂琄琇琈琋琌琍琎琑琒琓琔琕琖琗琘琙琜琝琞琟琠琡琣琤琧琩琫琭琯琱琲琷琸琹琺琻琽琾琿瑀瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍�瑎瑏瑐瑑瑒瑓瑔瑖瑘瑝瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑮瑯瑱瑲瑳瑴瑵瑸瑹瑺�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\nD[173] = \"����������������������������������������������������������������瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑璒璓璔璕璖璗璘璙璚璛璝璟璠璡璢璣璤璥璦璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇�瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓓瓔瓕瓖瓗瓘瓙瓚瓛瓝瓟瓡瓥瓧瓨瓩瓪瓫瓬瓭瓰瓱瓲�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\nD[174] = \"����������������������������������������������������������������瓳瓵瓸瓹瓺瓻瓼瓽瓾甀甁甂甃甅甆甇甈甉甊甋甌甎甐甒甔甕甖甗甛甝甞甠甡產産甤甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘�畝畞畟畠畡畢畣畤畧畨畩畫畬畭畮畯異畱畳畵當畷畺畻畼畽畾疀疁疂疄疅疇�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\nD[175] = \"����������������������������������������������������������������疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦疧疨疩疪疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇�瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\nD[176] = \"����������������������������������������������������������������癅癆癇癈癉癊癋癎癏癐癑癒癓癕癗癘癙癚癛癝癟癠癡癢癤癥癦癧癨癩癪癬癭癮癰癱癲癳癴癵癶癷癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛�皜皝皞皟皠皡皢皣皥皦皧皨皩皪皫皬皭皯皰皳皵皶皷皸皹皺皻皼皽皾盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"����������������������������������������������������������������盄盇盉盋盌盓盕盙盚盜盝盞盠盡盢監盤盦盧盨盩盪盫盬盭盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎眏眐眑眒眓眔眕眖眗眘眛眜眝眞眡眣眤眥眧眪眫�眬眮眰眱眲眳眴眹眻眽眾眿睂睄睅睆睈睉睊睋睌睍睎睏睒睓睔睕睖睗睘睙睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"����������������������������������������������������������������睝睞睟睠睤睧睩睪睭睮睯睰睱睲睳睴睵睶睷睸睺睻睼瞁瞂瞃瞆瞇瞈瞉瞊瞋瞏瞐瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶瞷瞸瞹瞺�瞼瞾矀矁矂矃矄矅矆矇矈矉矊矋矌矎矏矐矑矒矓矔矕矖矘矙矚矝矞矟矠矡矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"����������������������������������������������������������������矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃砄砅砆砇砈砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚�硛硜硞硟硠硡硢硣硤硥硦硧硨硩硯硰硱硲硳硴硵硶硸硹硺硻硽硾硿碀碁碂碃场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"����������������������������������������������������������������碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨碩碪碫碬碭碮碯碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚磛磜磝磞磟磠磡磢磣�磤磥磦磧磩磪磫磭磮磯磰磱磳磵磶磸磹磻磼磽磾磿礀礂礃礄礆礇礈礉礊礋礌础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"����������������������������������������������������������������礍礎礏礐礑礒礔礕礖礗礘礙礚礛礜礝礟礠礡礢礣礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礵礶礷礸礹礽礿祂祃祄祅祇祊祋祌祍祎祏祐祑祒祔祕祘祙祡祣�祤祦祩祪祫祬祮祰祱祲祳祴祵祶祹祻祼祽祾祿禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"����������������������������������������������������������������禓禔禕禖禗禘禙禛禜禝禞禟禠禡禢禣禤禥禦禨禩禪禫禬禭禮禯禰禱禲禴禵禶禷禸禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙秚秛秜秝秞秠秡秢秥秨秪�秬秮秱秲秳秴秵秶秷秹秺秼秾秿稁稄稅稇稈稉稊稌稏稐稑稒稓稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"����������������������������������������������������������������稝稟稡稢稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稴稵稶稸稺稾穀穁穂穃穄穅穇穈穉穊穋穌積穎穏穐穒穓穔穕穖穘穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨�穩穪穫穬穭穮穯穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"����������������������������������������������������������������窣窤窧窩窪窫窮窯窰窱窲窴窵窶窷窸窹窺窻窼窽窾竀竁竂竃竄竅竆竇竈竉竊竌竍竎竏竐竑竒竓竔竕竗竘竚竛竜竝竡竢竤竧竨竩竪竫竬竮竰竱竲竳�竴竵競竷竸竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"����������������������������������������������������������������笯笰笲笴笵笶笷笹笻笽笿筀筁筂筃筄筆筈筊筍筎筓筕筗筙筜筞筟筡筣筤筥筦筧筨筩筪筫筬筭筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆箇箈箉箊箋箌箎箏�箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹箺箻箼箽箾箿節篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"����������������������������������������������������������������篅篈築篊篋篍篎篏篐篒篔篕篖篗篘篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲篳篴篵篶篸篹篺篻篽篿簀簁簂簃簄簅簆簈簉簊簍簎簐簑簒簓簔簕簗簘簙�簚簛簜簝簞簠簡簢簣簤簥簨簩簫簬簭簮簯簰簱簲簳簴簵簶簷簹簺簻簼簽簾籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"����������������������������������������������������������������籃籄籅籆籇籈籉籊籋籌籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲籵籶籷籸籹籺籾籿粀粁粂粃粄粅粆粇�粈粊粋粌粍粎粏粐粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴粵粶粷粸粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"����������������������������������������������������������������粿糀糂糃糄糆糉糋糎糏糐糑糒糓糔糘糚糛糝糞糡糢糣糤糥糦糧糩糪糫糬糭糮糰糱糲糳糴糵糶糷糹糺糼糽糾糿紀紁紂紃約紅紆紇紈紉紋紌納紎紏紐�紑紒紓純紕紖紗紘紙級紛紜紝紞紟紡紣紤紥紦紨紩紪紬紭紮細紱紲紳紴紵紶肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"����������������������������������������������������������������紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絯絰統絲絳絴絵絶�絸絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"����������������������������������������������������������������継続綛綜綝綞綟綠綡綢綣綤綥綧綨綩綪綫綬維綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙�線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"����������������������������������������������������������������緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹�縺縼總績縿繀繂繃繄繅繆繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"����������������������������������������������������������������繞繟繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纜纝纞�纮纴纻纼绖绤绬绹缊缐缞缷缹缻缼缽缾缿罀罁罃罆罇罈罉罊罋罌罍罎罏罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"����������������������������������������������������������������罖罙罛罜罝罞罠罣罤罥罦罧罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂羃羄羅羆羇羈羉羋羍羏羐羑羒羓羕羖羗羘羙羛羜羠羢羣羥羦羨義羪羫羬羭羮羱�羳羴羵羶羷羺羻羾翀翂翃翄翆翇翈翉翋翍翏翐翑習翓翖翗翙翚翛翜翝翞翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"����������������������������������������������������������������翤翧翨翪翫翬翭翯翲翴翵翶翷翸翹翺翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫耬耭耮耯耰耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗�聙聛聜聝聞聟聠聡聢聣聤聥聦聧聨聫聬聭聮聯聰聲聳聴聵聶職聸聹聺聻聼聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"����������������������������������������������������������������聾肁肂肅肈肊肍肎肏肐肑肒肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇胈胉胊胋胏胐胑胒胓胔胕胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋�脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"����������������������������������������������������������������腀腁腂腃腄腅腇腉腍腎腏腒腖腗腘腛腜腝腞腟腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃膄膅膆膇膉膋膌膍膎膐膒膓膔膕膖膗膙膚膞膟膠膡膢膤膥�膧膩膫膬膭膮膯膰膱膲膴膵膶膷膸膹膼膽膾膿臄臅臇臈臉臋臍臎臏臐臑臒臓摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"����������������������������������������������������������������臔臕臖臗臘臙臚臛臜臝臞臟臠臡臢臤臥臦臨臩臫臮臯臰臱臲臵臶臷臸臹臺臽臿舃與興舉舊舋舎舏舑舓舕舖舗舘舙舚舝舠舤舥舦舧舩舮舲舺舼舽舿�艀艁艂艃艅艆艈艊艌艍艎艐艑艒艓艔艕艖艗艙艛艜艝艞艠艡艢艣艤艥艦艧艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"����������������������������������������������������������������艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸�苺苼苽苾苿茀茊茋茍茐茒茓茖茘茙茝茞茟茠茡茢茣茤茥茦茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[199] = \"����������������������������������������������������������������茾茿荁荂荄荅荈荊荋荌荍荎荓荕荖荗荘荙荝荢荰荱荲荳荴荵荶荹荺荾荿莀莁莂莃莄莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡莢莣莤莥莦莧莬莭莮�莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�\".split(\"\");\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\nD[200] = \"����������������������������������������������������������������菮華菳菴菵菶菷菺菻菼菾菿萀萂萅萇萈萉萊萐萒萓萔萕萖萗萙萚萛萞萟萠萡萢萣萩萪萫萬萭萮萯萰萲萳萴萵萶萷萹萺萻萾萿葀葁葂葃葄葅葇葈葉�葊葋葌葍葎葏葐葒葓葔葕葖葘葝葞葟葠葢葤葥葦葧葨葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�\".split(\"\");\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\nD[201] = \"����������������������������������������������������������������葽葾葿蒀蒁蒃蒄蒅蒆蒊蒍蒏蒐蒑蒒蒓蒔蒕蒖蒘蒚蒛蒝蒞蒟蒠蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗�蓘蓙蓚蓛蓜蓞蓡蓢蓤蓧蓨蓩蓪蓫蓭蓮蓯蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�\".split(\"\");\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\nD[202] = \"����������������������������������������������������������������蔃蔄蔅蔆蔇蔈蔉蔊蔋蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢蔣蔤蔥蔦蔧蔨蔩蔪蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔾蔿蕀蕁蕂蕄蕅蕆蕇蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕�蕗蕘蕚蕛蕜蕝蕟蕠蕡蕢蕣蕥蕦蕧蕩蕪蕫蕬蕭蕮蕯蕰蕱蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"����������������������������������������������������������������薂薃薆薈薉薊薋薌薍薎薐薑薒薓薔薕薖薗薘薙薚薝薞薟薠薡薢薣薥薦薧薩薫薬薭薱薲薳薴薵薶薸薺薻薼薽薾薿藀藂藃藄藅藆藇藈藊藋藌藍藎藑藒�藔藖藗藘藙藚藛藝藞藟藠藡藢藣藥藦藧藨藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"����������������������������������������������������������������藹藺藼藽藾蘀蘁蘂蘃蘄蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘒蘓蘔蘕蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘨蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘹蘺蘻蘽蘾蘿虀�虁虂虃虄虅虆虇虈虉虊虋虌虒虓處虖虗虘虙虛虜虝號虠虡虣虤虥虦虧虨虩虪獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"����������������������������������������������������������������虭虯虰虲虳虴虵虶虷虸蚃蚄蚅蚆蚇蚈蚉蚎蚏蚐蚑蚒蚔蚖蚗蚘蚙蚚蚛蚞蚟蚠蚡蚢蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻蚼蚽蚾蚿蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜�蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"����������������������������������������������������������������蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀蝁蝂蝃蝄蝅蝆蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚蝛蝜蝝蝞蝟蝡蝢蝦蝧蝨蝩蝪蝫蝬蝭蝯蝱蝲蝳蝵�蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎螏螐螑螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"����������������������������������������������������������������螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁蟂蟃蟄蟅蟇蟈蟉蟌蟍蟎蟏蟐蟔蟕蟖蟗蟘蟙蟚蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸�蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋蠌蠍蠎蠏蠐蠑蠒蠔蠗蠘蠙蠚蠜蠝蠞蠟蠠蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"����������������������������������������������������������������蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠳蠴蠵蠶蠷蠸蠺蠻蠽蠾蠿衁衂衃衆衇衈衉衊衋衎衏衐衑衒術衕衖衘衚衛衜衝衞衟衠衦衧衪衭衯衱衳衴衵衶衸衹衺�衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"����������������������������������������������������������������袬袮袯袰袲袳袴袵袶袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚裛補裝裞裠裡裦裧裩裪裫裬裭裮裯裲裵裶裷裺裻製裿褀褁褃褄褅褆複褈�褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褠褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"����������������������������������������������������������������褸褹褺褻褼褽褾褿襀襂襃襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襠襡襢襣襤襥襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襼�襽襾覀覂覄覅覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"����������������������������������������������������������������覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴觵觶觷觸觹觺�觻觼觽觾觿訁訂訃訄訅訆計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"����������������������������������������������������������������訞訟訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訿詀詁詂詃詄詅詆詇詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞�詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詺詻詼詽詾詿誀浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"����������������������������������������������������������������誁誂誃誄誅誆誇誈誋誌認誎誏誐誑誒誔誕誖誗誘誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀諁諂�諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"����������������������������������������������������������������諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣�謤謥謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿譀譁譂譃譄譅帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"����������������������������������������������������������������譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠譡譢譣譤譥譧譨譩譪譫譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆�讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"����������������������������������������������������������������谸谹谺谻谼谽谾谿豀豂豃豄豅豈豊豋豍豎豏豐豑豒豓豔豖豗豘豙豛豜豝豞豟豠豣豤豥豦豧豨豩豬豭豮豯豰豱豲豴豵豶豷豻豼豽豾豿貀貁貃貄貆貇�貈貋貍貎貏貐貑貒貓貕貖貗貙貚貛貜貝貞貟負財貢貣貤貥貦貧貨販貪貫責貭亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"����������������������������������������������������������������貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬�賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"����������������������������������������������������������������贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸赹赺赻赼赽赾赿趀趂趃趆趇趈趉趌趍趎趏趐趒趓趕趖趗趘趙趚趛趜趝趞趠趡�趢趤趥趦趧趨趩趪趫趬趭趮趯趰趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"����������������������������������������������������������������跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾跿踀踁踂踃踄踆踇踈踋踍踎踐踑踒踓踕踖踗踘踙踚踛踜踠踡踤踥踦踧踨踫踭踰踲踳踴踶踷踸踻踼踾�踿蹃蹅蹆蹌蹍蹎蹏蹐蹓蹔蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"����������������������������������������������������������������蹳蹵蹷蹸蹹蹺蹻蹽蹾躀躂躃躄躆躈躉躊躋躌躍躎躑躒躓躕躖躗躘躙躚躛躝躟躠躡躢躣躤躥躦躧躨躩躪躭躮躰躱躳躴躵躶躷躸躹躻躼躽躾躿軀軁軂�軃軄軅軆軇軈軉車軋軌軍軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"����������������������������������������������������������������軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠輡輢輣�輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"����������������������������������������������������������������轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆�迉迊迋迌迍迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"����������������������������������������������������������������這逜連逤逥逧逨逩逪逫逬逰週進逳逴逷逹逺逽逿遀遃遅遆遈遉遊運遌過達違遖遙遚遜遝遞遟遠遡遤遦遧適遪遫遬遯遰遱遲遳遶遷選遹遺遻遼遾邁�還邅邆邇邉邊邌邍邎邏邐邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"����������������������������������������������������������������郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄚鄛鄜�鄝鄟鄠鄡鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄰鄲鄳鄴鄵鄶鄷鄸鄺鄻鄼鄽鄾鄿酀酁酂酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"����������������������������������������������������������������酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀醁醂醃醄醆醈醊醎醏醓醔醕醖醗醘醙醜醝醞醟醠醡醤醥醦醧醨醩醫醬醰醱醲醳醶醷醸醹醻�醼醽醾醿釀釁釂釃釄釅釆釈釋釐釒釓釔釕釖釗釘釙釚釛針釞釟釠釡釢釣釤釥帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"����������������������������������������������������������������釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤�鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀鉁鉂鉃鉄鉅狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"����������������������������������������������������������������鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅�銆銇銈銉銊銋銌銍銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"����������������������������������������������������������������銨銩銪銫銬銭銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠鋡鋢鋣鋤鋥鋦鋧鋨�鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈錉洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"����������������������������������������������������������������錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉�鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"����������������������������������������������������������������鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫�鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"����������������������������������������������������������������鏎鏏鏐鏑鏒鏓鏔鏕鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍�鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"����������������������������������������������������������������鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑬鑭鑮鑯�鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"����������������������������������������������������������������锧锳锽镃镈镋镕镚镠镮镴镵長镸镹镺镻镼镽镾門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪�閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"����������������������������������������������������������������闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟闠闡闢闣闤闥闦闧闬闿阇阓阘阛阞阠阣阤阥阦阧阨阩阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗�陘陙陚陜陝陞陠陣陥陦陫陭陮陯陰陱陳陸陹険陻陼陽陾陿隀隁隂隃隄隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"����������������������������������������������������������������隌階隑隒隓隕隖隚際隝隞隟隠隡隢隣隤隥隦隨隩險隫隬隭隮隯隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖雗雘雙雚雛雜雝雞雟雡離難雤雥雦雧雫�雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗霘霙霚霛霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"����������������������������������������������������������������霡霢霣霤霥霦霧霨霩霫霬霮霯霱霳霴霵霶霷霺霻霼霽霿靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑靔靕靗靘靚靜靝靟靣靤靦靧靨靪靫靬靭靮靯靰靱�靲靵靷靸靹靺靻靽靾靿鞀鞁鞂鞃鞄鞆鞇鞈鞉鞊鞌鞎鞏鞐鞓鞕鞖鞗鞙鞚鞛鞜鞝臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"����������������������������������������������������������������鞞鞟鞡鞢鞤鞥鞦鞧鞨鞩鞪鞬鞮鞰鞱鞳鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠韡韢韣�韤韥韨韮韯韰韱韲韴韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須頉頊頋頌頍頎怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"����������������������������������������������������������������頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額�顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"����������������������������������������������������������������顯顰顱顲顳顴颋颎颒颕颙颣風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍飏飐飔飖飗飛飜飝飠飡飢飣飤�飥飦飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"����������������������������������������������������������������餈餉養餋餌餎餏餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠餡餢餣餤餥餦餧館餩餪餫餬餭餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈饉�饊饋饌饍饎饏饐饑饒饓饖饗饘饙饚饛饜饝饞饟饠饡饢饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"����������������������������������������������������������������馌馎馚馛馜馝馞馟馠馡馢馣馤馦馧馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘�駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"����������������������������������������������������������������駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸�騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"����������������������������������������������������������������驚驛驜驝驞驟驠驡驢驣驤驥驦驧驨驩驪驫驲骃骉骍骎骔骕骙骦骩骪骫骬骭骮骯骲骳骴骵骹骻骽骾骿髃髄髆髇髈髉髊髍髎髏髐髒體髕髖髗髙髚髛髜�髝髞髠髢髣髤髥髧髨髩髪髬髮髰髱髲髳髴髵髶髷髸髺髼髽髾髿鬀鬁鬂鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"����������������������������������������������������������������鬇鬉鬊鬋鬌鬍鬎鬐鬑鬒鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬠鬡鬢鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬰鬱鬳鬴鬵鬶鬷鬸鬹鬺鬽鬾鬿魀魆魊魋魌魎魐魒魓魕魖魗魘魙魚�魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"����������������������������������������������������������������魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺�鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"����������������������������������������������������������������鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚�鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"����������������������������������������������������������������鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺�鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾鲿鳀鳁鳂鳈鳉鳑鳒鳚鳛鳠鳡鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nD[248] = \"����������������������������������������������������������������鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡�鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\nD[249] = \"����������������������������������������������������������������鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁�鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\nD[250] = \"����������������������������������������������������������������鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡�鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\nD[251] = \"����������������������������������������������������������������鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽麀�麁麃麄麅麆麉麊麌麍麎麏麐麑麔麕麖麗麘麙麚麛麜麞麠麡麢麣麤麥麧麨麩麪�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\nD[252] = \"����������������������������������������������������������������麫麬麭麮麯麰麱麲麳麵麶麷麹麺麼麿黀黁黂黃黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰黱黲黳黴黵黶黷黸黺黽黿鼀鼁鼂鼃鼄鼅�鼆鼇鼈鼉鼊鼌鼏鼑鼒鼔鼕鼖鼘鼚鼛鼜鼝鼞鼟鼡鼣鼤鼥鼦鼧鼨鼩鼪鼫鼭鼮鼰鼱�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\nD[253] = \"����������������������������������������������������������������鼲鼳鼴鼵鼶鼸鼺鼼鼿齀齁齂齃齅齆齇齈齉齊齋齌齍齎齏齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸�齹齺齻齼齽齾龁龂龍龎龏龐龑龒龓龔龕龖龗龘龜龝龞龡龢龣龤龥郎凉秊裏隣�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}\nD[254] = \"����������������������������������������������������������������兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[254].length; ++j) if(D[254][j].charCodeAt(0) !== 0xFFFD) { e[D[254][j]] = 65024 + j; d[65024 + j] = D[254][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[949] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[129] = \"�����������������������������������������������������������������갂갃갅갆갋갌갍갎갏갘갞갟갡갢갣갥갦갧갨갩갪갫갮갲갳갴������갵갶갷갺갻갽갾갿걁걂걃걄걅걆걇걈걉걊걌걎걏걐걑걒걓걕������걖걗걙걚걛걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯걲걳걵걶걹걻걼걽걾걿겂겇겈겍겎겏겑겒겓겕겖겗겘겙겚겛겞겢겣겤겥겦겧겫겭겮겱겲겳겴겵겶겷겺겾겿곀곂곃곅곆곇곉곊곋곍곎곏곐곑곒곓곔곖곘곙곚곛곜곝곞곟곢곣곥곦곩곫곭곮곲곴곷곸곹곺곻곾곿괁괂괃괅괇괈괉괊괋괎괐괒괓�\".split(\"\");\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\nD[130] = \"�����������������������������������������������������������������괔괕괖괗괙괚괛괝괞괟괡괢괣괤괥괦괧괨괪괫괮괯괰괱괲괳������괶괷괹괺괻괽괾괿굀굁굂굃굆굈굊굋굌굍굎굏굑굒굓굕굖굗������굙굚굛굜굝굞굟굠굢굤굥굦굧굨굩굪굫굮굯굱굲굷굸굹굺굾궀궃궄궅궆궇궊궋궍궎궏궑궒궓궔궕궖궗궘궙궚궛궞궟궠궡궢궣궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궸궹궺궻궼궽궾궿귂귃귅귆귇귉귊귋귌귍귎귏귒귔귕귖귗귘귙귚귛귝귞귟귡귢귣귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷�\".split(\"\");\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\nD[131] = \"�����������������������������������������������������������������귺귻귽귾긂긃긄긅긆긇긊긌긎긏긐긑긒긓긕긖긗긘긙긚긛긜������긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯긲긳긵긶긹긻긼������긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗깘깙깚깛깞깢깣깤깦깧깪깫깭깮깯깱깲깳깴깵깶깷깺깾깿꺀꺁꺂꺃꺆꺇꺈꺉꺊꺋꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺿껁껂껃껅껆껇껈껉껊껋껎껒껓껔껕껖껗껚껛껝껞껟껠껡껢껣껤껥�\".split(\"\");\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\nD[132] = \"�����������������������������������������������������������������껦껧껩껪껬껮껯껰껱껲껳껵껶껷껹껺껻껽껾껿꼀꼁꼂꼃꼄꼅������꼆꼉꼊꼋꼌꼎꼏꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣������꼤꼥꼦꼧꼨꼩꼪꼫꼮꼯꼱꼳꼵꼶꼷꼸꼹꼺꼻꼾꽀꽄꽅꽆꽇꽊꽋꽌꽍꽎꽏꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽞꽟꽠꽡꽢꽣꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽺꽻꽼꽽꽾꽿꾁꾂꾃꾅꾆꾇꾉꾊꾋꾌꾍꾎꾏꾒꾓꾔꾖꾗꾘꾙꾚꾛꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾺꾻꾽꾾�\".split(\"\");\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\nD[133] = \"�����������������������������������������������������������������꾿꿁꿂꿃꿄꿅꿆꿊꿌꿏꿐꿑꿒꿓꿕꿖꿗꿘꿙꿚꿛꿝꿞꿟꿠꿡������꿢꿣꿤꿥꿦꿧꿪꿫꿬꿭꿮꿯꿲꿳꿵꿶꿷꿹꿺꿻꿼꿽꿾꿿뀂뀃������뀅뀆뀇뀈뀉뀊뀋뀍뀎뀏뀑뀒뀓뀕뀖뀗뀘뀙뀚뀛뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끾끿낁낂낃낅낆낇낈낉낊낋낎낐낒낓낔낕낖낗낛낝낞낣낤�\".split(\"\");\nfor(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}\nD[134] = \"�����������������������������������������������������������������낥낦낧낪낰낲낶낷낹낺낻낽낾낿냀냁냂냃냆냊냋냌냍냎냏냒������냓냕냖냗냙냚냛냜냝냞냟냡냢냣냤냦냧냨냩냪냫냬냭냮냯냰������냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇넊넍넎넏넑넔넕넖넗넚넞넟넠넡넢넦넧넩넪넫넭넮넯넰넱넲넳넶넺넻넼넽넾넿녂녃녅녆녇녉녊녋녌녍녎녏녒녓녖녗녙녚녛녝녞녟녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷녺녻녽녾녿놁놃놄놅놆놇놊놌놎놏놐놑놕놖놗놙놚놛놝�\".split(\"\");\nfor(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}\nD[135] = \"�����������������������������������������������������������������놞놟놠놡놢놣놤놥놦놧놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸������놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇍뇎뇏뇑뇒뇓뇕������뇖뇗뇘뇙뇚뇛뇞뇠뇡뇢뇣뇤뇥뇦뇧뇪뇫뇭뇮뇯뇱뇲뇳뇴뇵뇶뇷뇸뇺뇼뇾뇿눀눁눂눃눆눇눉눊눍눎눏눐눑눒눓눖눘눚눛눜눝눞눟눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눵눶눷눸눹눺눻눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉙뉚뉛뉝뉞뉟뉡뉢뉣뉤뉥뉦뉧뉪뉫뉬뉭뉮�\".split(\"\");\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\nD[136] = \"�����������������������������������������������������������������뉯뉰뉱뉲뉳뉶뉷뉸뉹뉺뉻뉽뉾뉿늀늁늂늃늆늇늈늊늋늌늍늎������늏늒늓늕늖늗늛늜늝늞늟늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷������늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇닊닋닍닎닏닑닓닔닕닖닗닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉댊댋댌댍댎댏댒댖댗댘댙댚댛댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓덗덙덚덝덠덡덢덣�\".split(\"\");\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\nD[137] = \"�����������������������������������������������������������������덦덨덪덬덭덯덲덳덵덶덷덹덺덻덼덽덾덿뎂뎆뎇뎈뎉뎊뎋뎍������뎎뎏뎑뎒뎓뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎢뎣뎤뎥뎦뎧뎩뎪뎫뎭������뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됑됒됓됔됕됖됗됙됚됛됝됞됟됡됢됣됤됥됦됧됪됬됭됮됯됰됱됲됳됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄�\".split(\"\");\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\nD[138] = \"�����������������������������������������������������������������둅둆둇둈둉둊둋둌둍둎둏둒둓둕둖둗둙둚둛둜둝둞둟둢둤둦������둧둨둩둪둫둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒁뒂������뒃뒄뒅뒆뒇뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒞뒟뒠뒡뒢뒣뒥뒦뒧뒩뒪뒫뒭뒮뒯뒰뒱뒲뒳뒴뒶뒸뒺뒻뒼뒽뒾뒿듁듂듃듅듆듇듉듊듋듌듍듎듏듑듒듓듔듖듗듘듙듚듛듞듟듡듢듥듧듨듩듪듫듮듰듲듳듴듵듶듷듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓딖딗딙딚딝�\".split(\"\");\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\nD[139] = \"�����������������������������������������������������������������딞딟딠딡딢딣딦딫딬딭딮딯딲딳딵딶딷딹딺딻딼딽딾딿땂땆������땇땈땉땊땎땏땑땒땓땕땖땗땘땙땚땛땞땢땣땤땥땦땧땨땩땪������땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떢떣떥떦떧떩떬떭떮떯떲떶떷떸떹떺떾떿뗁뗂뗃뗅뗆뗇뗈뗉뗊뗋뗎뗒뗓뗔뗕뗖뗗뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿�\".split(\"\");\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\nD[140] = \"�����������������������������������������������������������������똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏똒똓똕똖똗똙똚똛똜똝������똞똟똠똡똢똣똤똦똧똨똩똪똫똭똮똯똰똱똲똳똵똶똷똸똹똺������똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙥뙦뙧뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚞뚟뚡뚢뚣뚥뚦뚧뚨뚩뚪뚭뚮뚯뚰뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂�\".split(\"\");\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\nD[141] = \"�����������������������������������������������������������������뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛕뛖뛗뛘뛙뛚뛛뛜뛝������뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛱뛲뛳뛵뛶뛷뛹뛺������뛻뛼뛽뛾뛿뜂뜃뜄뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜪뜫뜭뜮뜱뜲뜳뜴뜵뜶뜷뜺뜼뜽뜾뜿띀띁띂띃띅띆띇띉띊띋띍띎띏띐띑띒띓띖띗띘띙띚띛띜띝띞띟띡띢띣띥띦띧띩띪띫띬띭띮띯띲띴띶띷띸띹띺띻띾띿랁랂랃랅랆랇랈랉랊랋랎랓랔랕랚랛랝랞�\".split(\"\");\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\nD[142] = \"�����������������������������������������������������������������랟랡랢랣랤랥랦랧랪랮랯랰랱랲랳랶랷랹랺랻랼랽랾랿럀럁������럂럃럄럅럆럈럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝������럞럟럠럡럢럣럤럥럦럧럨럩럪럫럮럯럱럲럳럵럶럷럸럹럺럻럾렂렃렄렅렆렊렋렍렎렏렑렒렓렔렕렖렗렚렜렞렟렠렡렢렣렦렧렩렪렫렭렮렯렰렱렲렳렶렺렻렼렽렾렿롁롂롃롅롆롇롈롉롊롋롌롍롎롏롐롒롔롕롖롗롘롙롚롛롞롟롡롢롣롥롦롧롨롩롪롫롮롰롲롳롴롵롶롷롹롺롻롽롾롿뢀뢁뢂뢃뢄�\".split(\"\");\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\nD[143] = \"�����������������������������������������������������������������뢅뢆뢇뢈뢉뢊뢋뢌뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟������뢠뢡뢢뢣뢤뢥뢦뢧뢩뢪뢫뢬뢭뢮뢯뢱뢲뢳뢵뢶뢷뢹뢺뢻뢼뢽������뢾뢿룂룄룆룇룈룉룊룋룍룎룏룑룒룓룕룖룗룘룙룚룛룜룞룠룢룣룤룥룦룧룪룫룭룮룯룱룲룳룴룵룶룷룺룼룾룿뤀뤁뤂뤃뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤙뤚뤛뤜뤝뤞뤟뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤾뤿륁륂륃륅륆륇륈륉륊륋륍륎륐륒륓륔륕륖륗�\".split(\"\");\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\nD[144] = \"�����������������������������������������������������������������륚륛륝륞륟륡륢륣륤륥륦륧륪륬륮륯륰륱륲륳륶륷륹륺륻륽������륾륿릀릁릂릃릆릈릋릌릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞������릟릠릡릢릣릤릥릦릧릨릩릪릫릮릯릱릲릳릵릶릷릸릹릺릻릾맀맂맃맄맅맆맇맊맋맍맓맔맕맖맗맚맜맟맠맢맦맧맩맪맫맭맮맯맰맱맲맳맶맻맼맽맾맿먂먃먄먅먆먇먉먊먋먌먍먎먏먐먑먒먓먔먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷먺먻먽먾먿멁멃멄멅멆�\".split(\"\");\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\nD[145] = \"�����������������������������������������������������������������멇멊멌멏멐멑멒멖멗멙멚멛멝멞멟멠멡멢멣멦멪멫멬멭멮멯������멲멳멵멶멷멹멺멻멼멽멾멿몀몁몂몆몈몉몊몋몍몎몏몐몑몒������몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧몪몭몮몯몱몳몴몵몶몷몺몼몾몿뫀뫁뫂뫃뫅뫆뫇뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫽뫾뫿묁묂묃묅묆묇묈묉묊묋묌묎묐묒묓묔묕묖묗묙묚묛묝묞묟묡묢묣묤묥묦묧�\".split(\"\");\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\nD[146] = \"�����������������������������������������������������������������묨묪묬묭묮묯묰묱묲묳묷묹묺묿뭀뭁뭂뭃뭆뭈뭊뭋뭌뭎뭑뭒������뭓뭕뭖뭗뭙뭚뭛뭜뭝뭞뭟뭠뭢뭤뭥뭦뭧뭨뭩뭪뭫뭭뭮뭯뭰뭱������뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮉뮊뮋뮍뮎뮏뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮥뮦뮧뮩뮪뮫뮭뮮뮯뮰뮱뮲뮳뮵뮶뮸뮹뮺뮻뮼뮽뮾뮿믁믂믃믅믆믇믉믊믋믌믍믎믏믑믒믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷믺믻믽믾밁�\".split(\"\");\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\nD[147] = \"�����������������������������������������������������������������밃밄밅밆밇밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵������밶밷밹밺밻밼밽밾밿뱂뱆뱇뱈뱊뱋뱎뱏뱑뱒뱓뱔뱕뱖뱗뱘뱙������뱚뱛뱜뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃벆벇벉벊벍벏벐벑벒벓벖벘벛벜벝벞벟벢벣벥벦벩벪벫벬벭벮벯벲벶벷벸벹벺벻벾벿볁볂볃볅볆볇볈볉볊볋볌볎볒볓볔볖볗볙볚볛볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳볷볹볺볻볽�\".split(\"\");\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\nD[148] = \"�����������������������������������������������������������������볾볿봀봁봂봃봆봈봊봋봌봍봎봏봑봒봓봕봖봗봘봙봚봛봜봝������봞봟봠봡봢봣봥봦봧봨봩봪봫봭봮봯봰봱봲봳봴봵봶봷봸봹������봺봻봼봽봾봿뵁뵂뵃뵄뵅뵆뵇뵊뵋뵍뵎뵏뵑뵒뵓뵔뵕뵖뵗뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵥뵦뵧뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿붂붃붅붆붋붌붍붎붏붒붔붖붗붘붛붝붞붟붠붡붢붣붥붦붧붨붩붪붫붬붭붮붯붱붲붳붴붵붶붷붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑�\".split(\"\");\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\nD[149] = \"�����������������������������������������������������������������뷒뷓뷖뷗뷙뷚뷛뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷪뷫뷬뷭뷮뷯뷱������뷲뷳뷵뷶뷷뷹뷺뷻뷼뷽뷾뷿븁븂븄븆븇븈븉븊븋븎븏븑븒븓������븕븖븗븘븙븚븛븞븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃빆빇빉빊빋빍빏빐빑빒빓빖빘빜빝빞빟빢빣빥빦빧빩빫빬빭빮빯빲빶빷빸빹빺빾빿뺁뺂뺃뺅뺆뺇뺈뺉뺊뺋뺎뺒뺓뺔뺕뺖뺗뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷�\".split(\"\");\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\nD[150] = \"�����������������������������������������������������������������뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻒뻓������뻕뻖뻙뻚뻛뻜뻝뻞뻟뻡뻢뻦뻧뻨뻩뻪뻫뻭뻮뻯뻰뻱뻲뻳뻴뻵������뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼂뼃뼄뼅뼆뼇뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼚뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽂뽃뽅뽆뽇뽉뽊뽋뽌뽍뽎뽏뽒뽓뽔뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂�\".split(\"\");\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\nD[151] = \"�����������������������������������������������������������������뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾕뾖뾗뾘뾙뾚뾛뾜뾝������뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾱뾲뾳뾴뾵뾶뾷뾸������뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿆뿇뿈뿉뿊뿋뿎뿏뿑뿒뿓뿕뿖뿗뿘뿙뿚뿛뿝뿞뿠뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀽쀾쀿�\".split(\"\");\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\nD[152] = \"�����������������������������������������������������������������쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁒쁓쁔쁕쁖쁗쁙쁚쁛������쁝쁞쁟쁡쁢쁣쁤쁥쁦쁧쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹������쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삒삓삕삖삗삙삚삛삜삝삞삟삢삤삦삧삨삩삪삫삮삱삲삷삸삹삺삻삾샂샃샄샆샇샊샋샍샎샏샑샒샓샔샕샖샗샚샞샟샠샡샢샣샦샧샩샪샫샭샮샯샰샱샲샳샶샸샺샻샼샽샾샿섁섂섃섅섆섇섉섊섋섌섍섎섏섑섒섓섔섖섗섘섙섚섛섡섢섥섨섩섪섫섮�\".split(\"\");\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\nD[153] = \"�����������������������������������������������������������������섲섳섴섵섷섺섻섽섾섿셁셂셃셄셅셆셇셊셎셏셐셑셒셓셖셗������셙셚셛셝셞셟셠셡셢셣셦셪셫셬셭셮셯셱셲셳셵셶셷셹셺셻������셼셽셾셿솀솁솂솃솄솆솇솈솉솊솋솏솑솒솓솕솗솘솙솚솛솞솠솢솣솤솦솧솪솫솭솮솯솱솲솳솴솵솶솷솸솹솺솻솼솾솿쇀쇁쇂쇃쇅쇆쇇쇉쇊쇋쇍쇎쇏쇐쇑쇒쇓쇕쇖쇙쇚쇛쇜쇝쇞쇟쇡쇢쇣쇥쇦쇧쇩쇪쇫쇬쇭쇮쇯쇲쇴쇵쇶쇷쇸쇹쇺쇻쇾쇿숁숂숃숅숆숇숈숉숊숋숎숐숒숓숔숕숖숗숚숛숝숞숡숢숣�\".split(\"\");\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\nD[154] = \"�����������������������������������������������������������������숤숥숦숧숪숬숮숰숳숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅������쉆쉇쉉쉊쉋쉌쉍쉎쉏쉒쉓쉕쉖쉗쉙쉚쉛쉜쉝쉞쉟쉡쉢쉣쉤쉦������쉧쉨쉩쉪쉫쉮쉯쉱쉲쉳쉵쉶쉷쉸쉹쉺쉻쉾슀슂슃슄슅슆슇슊슋슌슍슎슏슑슒슓슔슕슖슗슙슚슜슞슟슠슡슢슣슦슧슩슪슫슮슯슰슱슲슳슶슸슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛싞싟싡싢싥싦싧싨싩싪싮싰싲싳싴싵싷싺싽싾싿쌁쌂쌃쌄쌅쌆쌇쌊쌋쌎쌏�\".split(\"\");\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\nD[155] = \"�����������������������������������������������������������������쌐쌑쌒쌖쌗쌙쌚쌛쌝쌞쌟쌠쌡쌢쌣쌦쌧쌪쌫쌬쌭쌮쌯쌰쌱쌲������쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썆썇썈썉썊썋썌썍������썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧썪썫썭썮썯썱썳썴썵썶썷썺썻썾썿쎀쎁쎂쎃쎅쎆쎇쎉쎊쎋쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏚�\".split(\"\");\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\nD[156] = \"�����������������������������������������������������������������쏛쏝쏞쏡쏣쏤쏥쏦쏧쏪쏫쏬쏮쏯쏰쏱쏲쏳쏶쏷쏹쏺쏻쏼쏽쏾������쏿쐀쐁쐂쐃쐄쐅쐆쐇쐉쐊쐋쐌쐍쐎쐏쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚������쐛쐜쐝쐞쐟쐠쐡쐢쐣쐥쐦쐧쐨쐩쐪쐫쐭쐮쐯쐱쐲쐳쐵쐶쐷쐸쐹쐺쐻쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑦쑧쑩쑪쑫쑭쑮쑯쑰쑱쑲쑳쑶쑷쑸쑺쑻쑼쑽쑾쑿쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒕쒖쒗쒘쒙쒚쒛쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩�\".split(\"\");\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\nD[157] = \"�����������������������������������������������������������������쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒹쒺쒻쒽쒾쒿쓀쓁쓂쓃쓄쓅������쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟������쓠쓡쓢쓣쓤쓥쓦쓧쓨쓪쓫쓬쓭쓮쓯쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂씃씄씅씆씇씈씉씊씋씍씎씏씑씒씓씕씖씗씘씙씚씛씝씞씟씠씡씢씣씤씥씦씧씪씫씭씮씯씱씲씳씴씵씶씷씺씼씾씿앀앁앂앃앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩앪앫앬앭앮앯앲앶앷앸앹앺앻앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔�\".split(\"\");\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\nD[158] = \"�����������������������������������������������������������������얖얙얚얛얝얞얟얡얢얣얤얥얦얧얨얪얫얬얭얮얯얰얱얲얳얶������얷얺얿엀엁엂엃엋엍엏엒엓엕엖엗엙엚엛엜엝엞엟엢엤엦엧������엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑옒옓옔옕옖옗옚옝옞옟옠옡옢옣옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉왊왋왌왍왎왏왒왖왗왘왙왚왛왞왟왡왢왣왤왥왦왧왨왩왪왫왭왮왰왲왳왴왵왶왷왺왻왽왾왿욁욂욃욄욅욆욇욊욌욎욏욐욑욒욓욖욗욙욚욛욝욞욟욠욡욢욣욦�\".split(\"\");\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\nD[159] = \"�����������������������������������������������������������������욨욪욫욬욭욮욯욲욳욵욶욷욻욼욽욾욿웂웄웆웇웈웉웊웋웎������웏웑웒웓웕웖웗웘웙웚웛웞웟웢웣웤웥웦웧웪웫웭웮웯웱웲������웳웴웵웶웷웺웻웼웾웿윀윁윂윃윆윇윉윊윋윍윎윏윐윑윒윓윖윘윚윛윜윝윞윟윢윣윥윦윧윩윪윫윬윭윮윯윲윴윶윸윹윺윻윾윿읁읂읃읅읆읇읈읉읋읎읐읙읚읛읝읞읟읡읢읣읤읥읦읧읩읪읬읭읮읯읰읱읲읳읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛잜잝잞잟잢잧잨잩잪잫잮잯잱잲잳잵잶잷�\".split(\"\");\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\nD[160] = \"�����������������������������������������������������������������잸잹잺잻잾쟂쟃쟄쟅쟆쟇쟊쟋쟍쟏쟑쟒쟓쟔쟕쟖쟗쟙쟚쟛쟜������쟞쟟쟠쟡쟢쟣쟥쟦쟧쟩쟪쟫쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺������쟻쟼쟽쟾쟿젂젃젅젆젇젉젋젌젍젎젏젒젔젗젘젙젚젛젞젟젡젢젣젥젦젧젨젩젪젫젮젰젲젳젴젵젶젷젹젺젻젽젾젿졁졂졃졄졅졆졇졊졋졎졏졐졑졒졓졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯졲졳졵졶졷졹졻졼졽졾졿좂좄좈좉좊좎좏좐좑좒좓좕좖좗좘좙좚좛좜좞좠좢좣좤�\".split(\"\");\nfor(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}\nD[161] = \"�����������������������������������������������������������������좥좦좧좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좾좿죀죁������죂죃죅죆죇죉죊죋죍죎죏죐죑죒죓죖죘죚죛죜죝죞죟죢죣죥������죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죶죷죸죹죺죻죾죿줁줂줃줇줈줉줊줋줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"�����������������������������������������������������������������줐줒줓줔줕줖줗줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫������줭줮줯줰줱줲줳줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇������쥈쥉쥊쥋쥌쥍쥎쥏쥒쥓쥕쥖쥗쥙쥚쥛쥜쥝쥞쥟쥢쥤쥥쥦쥧쥨쥩쥪쥫쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®������������������������\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"�����������������������������������������������������������������쥱쥲쥳쥵쥶쥷쥸쥹쥺쥻쥽쥾쥿즀즁즂즃즄즅즆즇즊즋즍즎즏������즑즒즓즔즕즖즗즚즜즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮������즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿짂짃짅짆짉짋짌짍짎짏짒짔짗짘짛!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"�����������������������������������������������������������������짞짟짡짣짥짦짨짩짪짫짮짲짳짴짵짶짷짺짻짽짾짿쨁쨂쨃쨄������쨅쨆쨇쨊쨎쨏쨐쨑쨒쨓쨕쨖쨗쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥������쨦쨧쨨쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ�\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"�����������������������������������������������������������������쩇쩈쩉쩊쩋쩎쩏쩑쩒쩓쩕쩖쩗쩘쩙쩚쩛쩞쩢쩣쩤쩥쩦쩧쩩쩪������쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩾쩿쪀쪁쪂쪃쪅쪆������쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ�����ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"�����������������������������������������������������������������쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪾쪿쫁쫂쫃쫅������쫆쫇쫈쫉쫊쫋쫎쫐쫒쫔쫕쫖쫗쫚쫛쫜쫝쫞쫟쫡쫢쫣쫤쫥쫦쫧������쫨쫩쫪쫫쫭쫮쫯쫰쫱쫲쫳쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊���������������������������\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"�����������������������������������������������������������������쬋쬌쬍쬎쬏쬑쬒쬓쬕쬖쬗쬙쬚쬛쬜쬝쬞쬟쬢쬣쬤쬥쬦쬧쬨쬩������쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭂쭃쭄������쭅쭆쭇쭊쭋쭍쭎쭏쭑쭒쭓쭔쭕쭖쭗쭚쭛쭜쭞쭟쭠쭡쭢쭣쭥쭦쭧쭨쭩쭪쭫쭬㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆����������������\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"�����������������������������������������������������������������쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈������쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮝쮞쮟쮠쮡쮢쮣������쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄ÆЪĦ�IJ�ĿŁØŒºÞŦŊ�㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞�\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"�����������������������������������������������������������������쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟������쯠쯡쯢쯣쯥쯦쯨쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼������쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찎찏찑찒찓찕찖찗찘찙찚찛찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄�\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[170] = \"�����������������������������������������������������������������찥찦찪찫찭찯찱찲찳찴찵찶찷찺찿챀챁챂챃챆챇챉챊챋챍챎������챏챐챑챒챓챖챚챛챜챝챞챟챡챢챣챥챧챩챪챫챬챭챮챯챱챲������챳챴챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\".split(\"\");\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\nD[171] = \"�����������������������������������������������������������������첔첕첖첗첚첛첝첞첟첡첢첣첤첥첦첧첪첮첯첰첱첲첳첶첷첹������첺첻첽첾첿쳀쳁쳂쳃쳆쳈쳊쳋쳌쳍쳎쳏쳑쳒쳓쳕쳖쳗쳘쳙쳚������쳛쳜쳝쳞쳟쳠쳡쳢쳣쳥쳦쳧쳨쳩쳪쳫쳭쳮쳯쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\".split(\"\");\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\nD[172] = \"�����������������������������������������������������������������쳾쳿촀촂촃촄촅촆촇촊촋촍촎촏촑촒촓촔촕촖촗촚촜촞촟촠������촡촢촣촥촦촧촩촪촫촭촮촯촰촱촲촳촴촵촶촷촸촺촻촼촽촾������촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛쵝쵞쵟АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\".split(\"\");\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\nD[173] = \"�����������������������������������������������������������������쵡쵢쵣쵥쵦쵧쵨쵩쵪쵫쵮쵰쵲쵳쵴쵵쵶쵷쵹쵺쵻쵼쵽쵾쵿춀������춁춂춃춄춅춆춇춉춊춋춌춍춎춏춐춑춒춓춖춗춙춚춛춝춞춟������춠춡춢춣춦춨춪춫춬춭춮춯춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췅�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\nD[174] = \"�����������������������������������������������������������������췆췇췈췉췊췋췍췎췏췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡������췢췣췤췥췦췧췩췪췫췭췮췯췱췲췳췴췵췶췷췺췼췾췿츀츁츂������츃츅츆츇츉츊츋츍츎츏츐츑츒츓츕츖츗츘츚츛츜츝츞츟츢츣츥츦츧츩츪츫�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\nD[175] = \"�����������������������������������������������������������������츬츭츮츯츲츴츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉������칊칋칌칍칎칏칐칑칒칓칔칕칖칗칚칛칝칞칢칣칤칥칦칧칪칬������칮칯칰칱칲칳칶칷칹칺칻칽칾칿캀캁캂캃캆캈캊캋캌캍캎캏캒캓캕캖캗캙�����������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\nD[176] = \"�����������������������������������������������������������������캚캛캜캝캞캟캢캦캧캨캩캪캫캮캯캰캱캲캳캴캵캶캷캸캹캺������캻캼캽캾캿컀컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕������컖컗컘컙컚컛컜컝컞컟컠컡컢컣컦컧컩컪컭컮컯컰컱컲컳컶컺컻컼컽컾컿가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"�����������������������������������������������������������������켂켃켅켆켇켉켊켋켌켍켎켏켒켔켖켗켘켙켚켛켝켞켟켡켢켣������켥켦켧켨켩켪켫켮켲켳켴켵켶켷켹켺켻켼켽켾켿콀콁콂콃콄������콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓콖콗콙콚콛콝콞콟콠콡콢콣콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"�����������������������������������������������������������������콭콮콯콲콳콵콶콷콹콺콻콼콽콾콿쾁쾂쾃쾄쾆쾇쾈쾉쾊쾋쾍������쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾢쾣쾤쾥쾦쾧쾩������쾪쾫쾬쾭쾮쾯쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿅쿆쿇쿈쿉쿊쿋깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"�����������������������������������������������������������������쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿢쿣쿥쿦쿧쿩������쿪쿫쿬쿭쿮쿯쿲쿴쿶쿷쿸쿹쿺쿻쿽쿾쿿퀁퀂퀃퀅퀆퀇퀈퀉퀊������퀋퀌퀍퀎퀏퀐퀒퀓퀔퀕퀖퀗퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"�����������������������������������������������������������������퀮퀯퀰퀱퀲퀳퀶퀷퀹퀺퀻퀽퀾퀿큀큁큂큃큆큈큊큋큌큍큎큏������큑큒큓큕큖큗큙큚큛큜큝큞큟큡큢큣큤큥큦큧큨큩큪큫큮큯������큱큲큳큵큶큷큸큹큺큻큾큿킀킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"�����������������������������������������������������������������킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣킦킧킩킪킫킭킮킯킰킱킲������킳킶킸킺킻킼킽킾킿탂탃탅탆탇탊탋탌탍탎탏탒탖탗탘탙탚������탛탞탟탡탢탣탥탦탧탨탩탪탫탮탲탳탴탵탶탷탹탺탻탼탽탾탿턀턁턂턃턄덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"�����������������������������������������������������������������턅턆턇턈턉턊턋턌턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟������턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯턲턳턵턶턷턹턻턼턽턾������턿텂텆텇텈텉텊텋텎텏텑텒텓텕텖텗텘텙텚텛텞텠텢텣텤텥텦텧텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"�����������������������������������������������������������������텮텯텰텱텲텳텴텵텶텷텸텹텺텻텽텾텿톀톁톂톃톅톆톇톉톊������톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟톢톣톥톦톧������톩톪톫톬톭톮톯톲톴톶톷톸톹톻톽톾톿퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"�����������������������������������������������������������������퇐퇑퇒퇓퇔퇕퇖퇗퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪������퇫퇬퇭퇮퇯퇰퇱퇲퇳퇵퇶퇷퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆������툈툊툋툌툍툎툏툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"�����������������������������������������������������������������툪툫툮툯툱툲툳툵툶툷툸툹툺툻툾퉀퉂퉃퉄퉅퉆퉇퉉퉊퉋퉌������퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉝퉞퉟퉠퉡퉢퉣퉥퉦퉧퉨������퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"�����������������������������������������������������������������튍튎튏튒튓튔튖튗튘튙튚튛튝튞튟튡튢튣튥튦튧튨튩튪튫튭������튮튯튰튲튳튴튵튶튷튺튻튽튾틁틃틄틅틆틇틊틌틍틎틏틐틑������틒틓틕틖틗틙틚틛틝틞틟틠틡틢틣틦틧틨틩틪틫틬틭틮틯틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"�����������������������������������������������������������������틻틼틽틾틿팂팄팆팇팈팉팊팋팏팑팒팓팕팗팘팙팚팛팞팢팣������팤팦팧팪팫팭팮팯팱팲팳팴팵팶팷팺팾팿퍀퍁퍂퍃퍆퍇퍈퍉������퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"�����������������������������������������������������������������퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍾퍿펁펂펃펅펆펇������펈펉펊펋펎펒펓펔펕펖펗펚펛펝펞펟펡펢펣펤펥펦펧펪펬펮������펯펰펱펲펳펵펶펷펹펺펻펽펾펿폀폁폂폃폆폇폊폋폌폍폎폏폑폒폓폔폕폖샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"�����������������������������������������������������������������폗폙폚폛폜폝폞폟폠폢폤폥폦폧폨폩폪폫폮폯폱폲폳폵폶폷������폸폹폺폻폾퐀퐂퐃퐄퐅퐆퐇퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖������퐗퐘퐙퐚퐛퐜퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"�����������������������������������������������������������������퐸퐹퐺퐻퐼퐽퐾퐿푁푂푃푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓������푔푕푖푗푘푙푚푛푝푞푟푡푢푣푥푦푧푨푩푪푫푬푮푰푱푲������푳푴푵푶푷푺푻푽푾풁풃풄풅풆풇풊풌풎풏풐풑풒풓풕풖풗풘풙풚풛풜풝쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"�����������������������������������������������������������������풞풟풠풡풢풣풤풥풦풧풨풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸������풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓍퓎퓏퓑퓒퓓퓕������퓖퓗퓘퓙퓚퓛퓝퓞퓠퓡퓢퓣퓤퓥퓦퓧퓩퓪퓫퓭퓮퓯퓱퓲퓳퓴퓵퓶퓷퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"�����������������������������������������������������������������퓾퓿픀픁픂픃픅픆픇픉픊픋픍픎픏픐픑픒픓픖픘픙픚픛픜픝������픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷������픸픹픺픻픾픿핁핂핃핅핆핇핈핉핊핋핎핐핒핓핔핕핖핗핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"�����������������������������������������������������������������핤핦핧핪핬핮핯핰핱핲핳핶핷핹핺핻핽핾핿햀햁햂햃햆햊햋������햌햍햎햏햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤햦햧������햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"�����������������������������������������������������������������헊헋헍헎헏헑헓헔헕헖헗헚헜헞헟헠헡헢헣헦헧헩헪헫헭헮������헯헰헱헲헳헶헸헺헻헼헽헾헿혂혃혅혆혇혉혊혋혌혍혎혏혒������혖혗혘혙혚혛혝혞혟혡혢혣혥혦혧혨혩혪혫혬혮혯혰혱혲혳혴혵혶혷혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"�����������������������������������������������������������������혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝홞홟홠홡������홢홣홤홥홦홨홪홫홬홭홮홯홲홳홵홶홷홸홹홺홻홼홽홾홿횀������횁횂횄횆횇횈횉횊횋횎횏횑횒횓횕횖횗횘횙횚횛횜횞횠횢횣횤횥횦횧횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"�����������������������������������������������������������������횫횭횮횯횱횲횳횴횵횶횷횸횺횼횽횾횿훀훁훂훃훆훇훉훊훋������훍훎훏훐훒훓훕훖훘훚훛훜훝훞훟훡훢훣훥훦훧훩훪훫훬훭������훮훯훱훲훳훴훶훷훸훹훺훻훾훿휁휂휃휅휆휇휈휉휊휋휌휍휎휏휐휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"�����������������������������������������������������������������휕휖휗휚휛휝휞휟휡휢휣휤휥휦휧휪휬휮휯휰휱휲휳휶휷휹������휺휻휽휾휿흀흁흂흃흅흆흈흊흋흌흍흎흏흒흓흕흚흛흜흝흞������흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵흶흷흸흹흺흻흾흿힀힂힃힄힅힆힇힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"�����������������������������������������������������������������힍힎힏힑힒힓힔힕힖힗힚힜힞힟힠힡힢힣������������������������������������������������������������������������������퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁�\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[199] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠�\".split(\"\");\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\nD[200] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝�\".split(\"\");\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\nD[202] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬�\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nD[248] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃�\".split(\"\");\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\nD[249] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航�\".split(\"\");\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\nD[250] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型�\".split(\"\");\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\nD[251] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵�\".split(\"\");\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\nD[252] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆�\".split(\"\");\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\nD[253] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰�\".split(\"\");\nfor(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[950] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[161] = \"���������������������������������������������������������������� ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚����������������������������������﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"����������������������������������������������������������������\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭����������������������������������╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv�\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"����������������������������������������������������������������wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ����������������������������������ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ���������������������������������€������������������������������\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"����������������������������������������������������������������一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才����������������������������������丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙�\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"����������������������������������������������������������������世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外����������������������������������央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全�\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"����������������������������������������������������������������共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年����������������������������������式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣�\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"����������������������������������������������������������������作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍����������������������������������均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠�\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"����������������������������������������������������������������杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒����������������������������������芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵�\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"����������������������������������������������������������������咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居����������������������������������屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊�\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[170] = \"����������������������������������������������������������������昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠����������������������������������炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附�\".split(\"\");\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\nD[171] = \"����������������������������������������������������������������陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品����������������������������������哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷�\".split(\"\");\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\nD[172] = \"����������������������������������������������������������������拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗����������������������������������活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄�\".split(\"\");\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\nD[173] = \"����������������������������������������������������������������耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥����������������������������������迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪�\".split(\"\");\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\nD[174] = \"����������������������������������������������������������������哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙����������������������������������恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓�\".split(\"\");\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\nD[175] = \"����������������������������������������������������������������浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷����������������������������������砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃�\".split(\"\");\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\nD[176] = \"����������������������������������������������������������������虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡����������������������������������陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"����������������������������������������������������������������娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽����������������������������������情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"����������������������������������������������������������������毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶����������������������������������瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"����������������������������������������������������������������莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途����������������������������������部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"����������������������������������������������������������������婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍����������������������������������插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"����������������������������������������������������������������溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘����������������������������������窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"����������������������������������������������������������������詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑����������������������������������間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"����������������������������������������������������������������媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業����������������������������������楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"����������������������������������������������������������������睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫����������������������������������腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"����������������������������������������������������������������辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴����������������������������������飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"����������������������������������������������������������������愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢����������������������������������滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"����������������������������������������������������������������罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤����������������������������������說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"����������������������������������������������������������������劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂����������������������������������慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"����������������������������������������������������������������瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯����������������������������������翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"����������������������������������������������������������������輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉����������������������������������鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"����������������������������������������������������������������濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊����������������������������������縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"����������������������������������������������������������������錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇����������������������������������嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"����������������������������������������������������������������瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪����������������������������������薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"����������������������������������������������������������������駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘����������������������������������癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"����������������������������������������������������������������鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸����������������������������������獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"����������������������������������������������������������������願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼����������������������������������纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"����������������������������������������������������������������護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬����������������������������������禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"����������������������������������������������������������������讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲���������������������������������������������������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[201] = \"����������������������������������������������������������������乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕����������������������������������氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋�\".split(\"\");\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\nD[202] = \"����������������������������������������������������������������汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘����������������������������������吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"����������������������������������������������������������������杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓����������������������������������芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"����������������������������������������������������������������坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋����������������������������������怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"����������������������������������������������������������������泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺����������������������������������矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"����������������������������������������������������������������哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛����������������������������������峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"����������������������������������������������������������������柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂����������������������������������洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"����������������������������������������������������������������穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪����������������������������������苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"����������������������������������������������������������������唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧����������������������������������恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"����������������������������������������������������������������毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸����������������������������������牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"����������������������������������������������������������������笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢����������������������������������荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"����������������������������������������������������������������酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅����������������������������������唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"����������������������������������������������������������������崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟����������������������������������捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"����������������������������������������������������������������淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏����������������������������������痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"����������������������������������������������������������������耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷����������������������������������蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪�\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"����������������������������������������������������������������釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷����������������������������������堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"����������������������������������������������������������������惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒����������������������������������晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"����������������������������������������������������������������湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖����������������������������������琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"����������������������������������������������������������������罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳����������������������������������菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"����������������������������������������������������������������軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈����������������������������������隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"����������������������������������������������������������������媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤����������������������������������搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"����������������������������������������������������������������毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓����������������������������������煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"����������������������������������������������������������������稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯����������������������������������腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"����������������������������������������������������������������觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿����������������������������������遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"����������������������������������������������������������������凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠����������������������������������寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"����������������������������������������������������������������榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊����������������������������������漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"����������������������������������������������������������������禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞����������������������������������耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"����������������������������������������������������������������裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍����������������������������������銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"����������������������������������������������������������������噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉����������������������������������憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"����������������������������������������������������������������澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙����������������������������������獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"����������������������������������������������������������������膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢����������������������������������蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"����������������������������������������������������������������踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓����������������������������������銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"����������������������������������������������������������������噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺����������������������������������憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"����������������������������������������������������������������澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙����������������������������������瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"����������������������������������������������������������������蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠����������������������������������諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"����������������������������������������������������������������錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕����������������������������������魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"����������������������������������������������������������������檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶����������������������������������瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"����������������������������������������������������������������蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞����������������������������������謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"����������������������������������������������������������������鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰����������������������������������鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"����������������������������������������������������������������璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒����������������������������������臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"����������������������������������������������������������������蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪����������������������������������鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"����������������������������������������������������������������徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛����������������������������������礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"����������������������������������������������������������������譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦����������������������������������鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"����������������������������������������������������������������嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩����������������������������������禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"����������������������������������������������������������������鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛����������������������������������鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"����������������������������������������������������������������蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺����������������������������������騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"����������������������������������������������������������������糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊����������������������������������驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nD[248] = \"����������������������������������������������������������������讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏����������������������������������齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚�\".split(\"\");\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\nD[249] = \"����������������������������������������������������������������纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊����������������������������������龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓�\".split(\"\");\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[1250] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1251] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1252] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1253] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1254] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1255] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1256] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1257] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[1258] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10000] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10006] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10007] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10008] = (function(){ var d = [], e = {}, D = [], j;\nD[0] = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€���������������������������������������������������������������������������������������\".split(\"\");\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\nD[161] = \"����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。・ˉˇ¨〃々―~�…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�\".split(\"\");\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\nD[162] = \"���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���\".split(\"\");\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\nD[163] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\".split(\"\");\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\nD[164] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\".split(\"\");\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\nD[165] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\".split(\"\");\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\nD[166] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω���������������������������������������\".split(\"\");\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\nD[167] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\".split(\"\");\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\nD[168] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüê����������ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������\".split(\"\");\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\nD[169] = \"��������������������������������������������������������������������������������������������������������������������������������������������������������������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������\".split(\"\");\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\nD[176] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�\".split(\"\");\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\nD[177] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�\".split(\"\");\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\nD[178] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�\".split(\"\");\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\nD[179] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�\".split(\"\");\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\nD[180] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�\".split(\"\");\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\nD[181] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�\".split(\"\");\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\nD[182] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�\".split(\"\");\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\nD[183] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�\".split(\"\");\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\nD[184] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�\".split(\"\");\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\nD[185] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�\".split(\"\");\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\nD[186] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�\".split(\"\");\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\nD[187] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�\".split(\"\");\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\nD[188] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�\".split(\"\");\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\nD[189] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�\".split(\"\");\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\nD[190] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�\".split(\"\");\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\nD[191] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�\".split(\"\");\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\nD[192] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�\".split(\"\");\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\nD[193] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�\".split(\"\");\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\nD[194] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�\".split(\"\");\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\nD[195] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�\".split(\"\");\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\nD[196] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�\".split(\"\");\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\nD[197] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�\".split(\"\");\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\nD[198] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�\".split(\"\");\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\nD[199] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�\".split(\"\");\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\nD[200] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�\".split(\"\");\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\nD[201] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�\".split(\"\");\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\nD[202] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�\".split(\"\");\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\nD[203] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�\".split(\"\");\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\nD[204] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�\".split(\"\");\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\nD[205] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�\".split(\"\");\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\nD[206] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�\".split(\"\");\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\nD[207] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�\".split(\"\");\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\nD[208] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�\".split(\"\");\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\nD[209] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�\".split(\"\");\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\nD[210] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�\".split(\"\");\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\nD[211] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�\".split(\"\");\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\nD[212] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�\".split(\"\");\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\nD[213] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�\".split(\"\");\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\nD[214] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�\".split(\"\");\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\nD[215] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������\".split(\"\");\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\nD[216] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�\".split(\"\");\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\nD[217] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�\".split(\"\");\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\nD[218] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�\".split(\"\");\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\nD[219] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�\".split(\"\");\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\nD[220] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�\".split(\"\");\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\nD[221] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�\".split(\"\");\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\nD[222] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�\".split(\"\");\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\nD[223] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�\".split(\"\");\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\nD[224] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�\".split(\"\");\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\nD[225] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�\".split(\"\");\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\nD[226] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�\".split(\"\");\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\nD[227] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�\".split(\"\");\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\nD[228] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�\".split(\"\");\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\nD[229] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�\".split(\"\");\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\nD[230] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�\".split(\"\");\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\nD[231] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�\".split(\"\");\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\nD[232] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�\".split(\"\");\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\nD[233] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�\".split(\"\");\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\nD[234] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�\".split(\"\");\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\nD[235] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�\".split(\"\");\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\nD[236] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�\".split(\"\");\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\nD[237] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�\".split(\"\");\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\nD[238] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�\".split(\"\");\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\nD[239] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�\".split(\"\");\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\nD[240] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�\".split(\"\");\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\nD[241] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�\".split(\"\");\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\nD[242] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�\".split(\"\");\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\nD[243] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�\".split(\"\");\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\nD[244] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�\".split(\"\");\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\nD[245] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�\".split(\"\");\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\nD[246] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�\".split(\"\");\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\nD[247] = \"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�\".split(\"\");\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\nreturn {\"enc\": e, \"dec\": d }; })();\ncptable[10029] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10079] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\ncptable[10081] = (function(){ var d = \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d.charAt(i)] = i; D[i] = d.charAt(i); } return {\"enc\": e, \"dec\": D }; })();\n// eslint-disable-next-line no-undef\nif (typeof module !== 'undefined' && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === 'undefined') module.exports = cptable;\n/* cputils.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ft=javascript: */\n/*jshint newcap: false */\n(function(root, factory) {\n /*jshint ignore:start */\n /*eslint-disable */\n \"use strict\";\n if(typeof cptable === \"undefined\") {\n if(typeof require !== \"undefined\"){\n var cpt = cptable;\n if (typeof module !== 'undefined' && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === 'undefined') module.exports = factory(cpt);\n else root.cptable = factory(cpt);\n } else throw new Error(\"cptable not found\");\n } else cptable = factory(cptable);\n /*eslint-enable */\n /*jshint ignore:end */\n}(this, function(cpt){\n \"use strict\";\n /*global module, Buffer */\n var magic = {\n \"1200\":\"utf16le\",\n \"1201\":\"utf16be\",\n \"12000\":\"utf32le\",\n \"12001\":\"utf32be\",\n \"16969\":\"utf64le\",\n \"20127\":\"ascii\",\n \"65000\":\"utf7\",\n \"65001\":\"utf8\"\n };\n\n var sbcs_cache = [874,1250,1251,1252,1253,1254,1255,1256,10000];\n var dbcs_cache = [932,936,949,950];\n var magic_cache = [65001];\n var magic_decode = {};\n var magic_encode = {};\n var cpdcache = {};\n var cpecache = {};\n\n var sfcc = function sfcc(x) { return String.fromCharCode(x); };\n var cca = function cca(x) { return x.charCodeAt(0); };\n\n var has_buf = (typeof Buffer !== 'undefined');\n var Buffer_from = function(){};\n if(has_buf) {\n var nbfs = !Buffer.from;\n if(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n Buffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n // $FlowIgnore\n if(!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) { return new Buffer(n); };\n\n var mdl = 1024, mdb = Buffer.allocUnsafe(mdl);\n var make_EE = function make_EE(E){\n var EE = Buffer.allocUnsafe(65536);\n for(var i = 0; i < 65536;++i) EE[i] = 0;\n var keys = Object.keys(E), len = keys.length;\n for(var ee = 0, e = keys[ee]; ee < len; ++ee) {\n if(!(e = keys[ee])) continue;\n EE[e.charCodeAt(0)] = E[e];\n }\n return EE;\n };\n var sbcs_encode = function make_sbcs_encode(cp) {\n var EE = make_EE(cpt[cp].enc);\n return function sbcs_e(data, ofmt) {\n var len = data.length;\n var out, i=0, j=0, D=0, w=0;\n if(typeof data === 'string') {\n out = Buffer.allocUnsafe(len);\n for(i = 0; i < len; ++i) out[i] = EE[data.charCodeAt(i)];\n } else if(Buffer.isBuffer(data)) {\n out = Buffer.allocUnsafe(2*len);\n j = 0;\n for(i = 0; i < len; ++i) {\n D = data[i];\n if(D < 128) out[j++] = EE[D];\n else if(D < 224) { out[j++] = EE[((D&31)<<6)+(data[i+1]&63)]; ++i; }\n else if(D < 240) { out[j++] = EE[((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63)]; i+=2; }\n else {\n w = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3;\n if(w < 65536) out[j++] = EE[w];\n else { w -= 65536; out[j++] = EE[0xD800 + ((w>>10)&1023)]; out[j++] = EE[0xDC00 + (w&1023)]; }\n }\n }\n out = out.slice(0,j);\n } else {\n out = Buffer.allocUnsafe(len);\n for(i = 0; i < len; ++i) out[i] = EE[data[i].charCodeAt(0)];\n }\n if(!ofmt || ofmt === 'buf') return out;\n if(ofmt !== 'arr') return out.toString('binary');\n return [].slice.call(out);\n };\n };\n var sbcs_decode = function make_sbcs_decode(cp) {\n var D = cpt[cp].dec;\n var DD = Buffer.allocUnsafe(131072), d=0, c=\"\";\n for(d=0;d>8;\n }\n return function sbcs_d(data) {\n var len = data.length, i=0, j=0;\n if(2 * len > mdl) { mdl = 2 * len; mdb = Buffer.allocUnsafe(mdl); }\n if(Buffer.isBuffer(data)) {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\n }\n } else if(typeof data === \"string\") {\n for(i = 0; i < len; i++) {\n j = 2*data.charCodeAt(i);\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\n }\n } else {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\n }\n }\n return mdb.slice(0, 2 * len).toString('ucs2');\n };\n };\n var dbcs_encode = function make_dbcs_encode(cp) {\n var E = cpt[cp].enc;\n var EE = Buffer.allocUnsafe(131072);\n for(var i = 0; i < 131072; ++i) EE[i] = 0;\n var keys = Object.keys(E);\n for(var ee = 0, e = keys[ee]; ee < keys.length; ++ee) {\n if(!(e = keys[ee])) continue;\n var f = e.charCodeAt(0);\n EE[2*f] = E[e] & 255; EE[2*f+1] = E[e]>>8;\n }\n return function dbcs_e(data, ofmt) {\n var len = data.length, out = Buffer.allocUnsafe(2*len), i=0, j=0, jj=0, k=0, D=0;\n if(typeof data === 'string') {\n for(i = k = 0; i < len; ++i) {\n j = data.charCodeAt(i)*2;\n out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n }\n out = out.slice(0,k);\n } else if(Buffer.isBuffer(data)) {\n for(i = k = 0; i < len; ++i) {\n D = data[i];\n if(D < 128) j = D;\n else if(D < 224) { j = ((D&31)<<6)+(data[i+1]&63); ++i; }\n else if(D < 240) { j = ((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63); i+=2; }\n else { j = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3; }\n if(j<65536) { j*=2; out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j]; }\n else { jj = j-65536;\n j=2*(0xD800 + ((jj>>10)&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n j=2*(0xDC00 + (jj&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n }\n }\n out = out.slice(0,k);\n } else {\n for(i = k = 0; i < len; i++) {\n j = data[i].charCodeAt(0)*2;\n out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\n }\n }\n if(!ofmt || ofmt === 'buf') return out;\n if(ofmt !== 'arr') return out.toString('binary');\n return [].slice.call(out);\n };\n };\n var dbcs_decode = function make_dbcs_decode(cp) {\n var D = cpt[cp].dec;\n var DD = Buffer.allocUnsafe(131072), d=0, c, w=0, j=0, i=0;\n for(i = 0; i < 65536; ++i) { DD[2*i] = 0xFF; DD[2*i+1] = 0xFD;}\n for(d = 0; d < D.length; ++d) {\n if(!(c=D[d])) continue;\n w = c.charCodeAt(0);\n j = 2*d;\n DD[j] = w&255; DD[j+1] = w>>8;\n }\n return function dbcs_d(data) {\n var len = data.length, out = Buffer.allocUnsafe(2*len), i=0, j=0, k=0;\n if(Buffer.isBuffer(data)) {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }\n out[k++] = DD[j]; out[k++] = DD[j+1];\n }\n } else if(typeof data === \"string\") {\n for(i = 0; i < len; i++) {\n j = 2*data.charCodeAt(i);\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data.charCodeAt(i)<<8)+data.charCodeAt(i+1)); ++i; }\n out[k++] = DD[j]; out[k++] = DD[j+1];\n }\n } else {\n for(i = 0; i < len; i++) {\n j = 2*data[i];\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }\n out[k++] = DD[j]; out[k++] = DD[j+1];\n }\n }\n return out.slice(0,k).toString('ucs2');\n };\n };\n magic_decode[65001] = function utf8_d(data) {\n if(typeof data === \"string\") return utf8_d(data.split(\"\").map(cca));\n var len = data.length, w = 0, ww = 0;\n if(4 * len > mdl) { mdl = 4 * len; mdb = Buffer.allocUnsafe(mdl); }\n var i = 0;\n if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;\n for(var j = 1, k = 0, D = 0; i < len; i+=j) {\n j = 1; D = data[i];\n if(D < 128) w = D;\n else if(D < 224) { w=(D&31)*64+(data[i+1]&63); j=2; }\n else if(D < 240) { w=((D&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }\n else { w=(D&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }\n if(w < 65536) { mdb[k++] = w&255; mdb[k++] = w>>8; }\n else {\n w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);\n mdb[k++] = ww&255; mdb[k++] = ww>>>8; mdb[k++] = w&255; mdb[k++] = (w>>>8)&255;\n }\n }\n return mdb.slice(0,k).toString('ucs2');\n };\n magic_encode[65001] = function utf8_e(data, ofmt) {\n if(has_buf && Buffer.isBuffer(data)) {\n if(!ofmt || ofmt === 'buf') return data;\n if(ofmt !== 'arr') return data.toString('binary');\n return [].slice.call(data);\n }\n var len = data.length, w = 0, ww = 0, j = 0;\n var direct = typeof data === \"string\";\n if(4 * len > mdl) { mdl = 4 * len; mdb = Buffer.allocUnsafe(mdl); }\n for(var i = 0; i < len; ++i) {\n w = direct ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w <= 0x007F) mdb[j++] = w;\n else if(w <= 0x07FF) {\n mdb[j++] = 192 + (w >> 6);\n mdb[j++] = 128 + (w&63);\n } else if(w >= 0xD800 && w <= 0xDFFF) {\n w -= 0xD800; ++i;\n ww = (direct ? data.charCodeAt(i) : data[i].charCodeAt(0)) - 0xDC00 + (w << 10);\n mdb[j++] = 240 + ((ww>>>18) & 0x07);\n mdb[j++] = 144 + ((ww>>>12) & 0x3F);\n mdb[j++] = 128 + ((ww>>>6) & 0x3F);\n mdb[j++] = 128 + (ww & 0x3F);\n } else {\n mdb[j++] = 224 + (w >> 12);\n mdb[j++] = 128 + ((w >> 6)&63);\n mdb[j++] = 128 + (w&63);\n }\n }\n if(!ofmt || ofmt === 'buf') return mdb.slice(0,j);\n if(ofmt !== 'arr') return mdb.slice(0,j).toString('binary');\n return [].slice.call(mdb, 0, j);\n };\n }\n\n var encache = function encache() {\n if(has_buf) {\n if(cpdcache[sbcs_cache[0]]) return;\n var i=0, s=0;\n for(i = 0; i < sbcs_cache.length; ++i) {\n s = sbcs_cache[i];\n if(cpt[s]) {\n cpdcache[s] = sbcs_decode(s);\n cpecache[s] = sbcs_encode(s);\n }\n }\n for(i = 0; i < dbcs_cache.length; ++i) {\n s = dbcs_cache[i];\n if(cpt[s]) {\n cpdcache[s] = dbcs_decode(s);\n cpecache[s] = dbcs_encode(s);\n }\n }\n for(i = 0; i < magic_cache.length; ++i) {\n s = magic_cache[i];\n if(magic_decode[s]) cpdcache[s] = magic_decode[s];\n if(magic_encode[s]) cpecache[s] = magic_encode[s];\n }\n }\n };\n var null_enc = function(data, ofmt) { void ofmt; return \"\"; };\n var cp_decache = function cp_decache(cp) { delete cpdcache[cp]; delete cpecache[cp]; };\n var decache = function decache() {\n if(has_buf) {\n if(!cpdcache[sbcs_cache[0]]) return;\n sbcs_cache.forEach(cp_decache);\n dbcs_cache.forEach(cp_decache);\n magic_cache.forEach(cp_decache);\n }\n last_enc = null_enc; last_cp = 0;\n };\n var cache = {\n encache: encache,\n decache: decache,\n sbcs: sbcs_cache,\n dbcs: dbcs_cache\n };\n\n encache();\n\n var BM = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var SetD = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?\";\n var last_enc = null_enc, last_cp = 0;\n var encode = function encode(cp, data, ofmt) {\n if(cp === last_cp && last_enc) { return last_enc(data, ofmt); }\n if(cpecache[cp]) { last_enc = cpecache[last_cp=cp]; return last_enc(data, ofmt); }\n if(has_buf && Buffer.isBuffer(data)) data = data.toString('utf8');\n var len = data.length;\n var out = has_buf ? Buffer.allocUnsafe(4*len) : [], w=0, i=0, j = 0, ww=0;\n var C = cpt[cp], E, M = \"\";\n var isstr = typeof data === 'string';\n if(C && (E=C.enc)) for(i = 0; i < len; ++i, ++j) {\n w = E[isstr? data.charAt(i) : data[i]];\n if(w > 255) {\n out[j] = w>>8;\n out[++j] = w&255;\n } else out[j] = w&255;\n }\n else if((M=magic[cp])) switch(M) {\n case \"utf8\":\n if(has_buf && isstr) { out = Buffer_from(data, M); j = out.length; break; }\n for(i = 0; i < len; ++i, ++j) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w <= 0x007F) out[j] = w;\n else if(w <= 0x07FF) {\n out[j] = 192 + (w >> 6);\n out[++j] = 128 + (w&63);\n } else if(w >= 0xD800 && w <= 0xDFFF) {\n w -= 0xD800;\n ww = (isstr ? data.charCodeAt(++i) : data[++i].charCodeAt(0)) - 0xDC00 + (w << 10);\n out[j] = 240 + ((ww>>>18) & 0x07);\n out[++j] = 144 + ((ww>>>12) & 0x3F);\n out[++j] = 128 + ((ww>>>6) & 0x3F);\n out[++j] = 128 + (ww & 0x3F);\n } else {\n out[j] = 224 + (w >> 12);\n out[++j] = 128 + ((w >> 6)&63);\n out[++j] = 128 + (w&63);\n }\n }\n break;\n case \"ascii\":\n if(has_buf && typeof data === \"string\") { out = Buffer_from(data, M); j = out.length; break; }\n for(i = 0; i < len; ++i, ++j) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w <= 0x007F) out[j] = w;\n else throw new Error(\"bad ascii \" + w);\n }\n break;\n case \"utf16le\":\n if(has_buf && typeof data === \"string\") { out = Buffer_from(data, M); j = out.length; break; }\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n out[j++] = w&255;\n out[j++] = w>>8;\n }\n break;\n case \"utf16be\":\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n out[j++] = w>>8;\n out[j++] = w&255;\n }\n break;\n case \"utf32le\":\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);\n out[j++] = w&255; w >>= 8;\n out[j++] = w&255; w >>= 8;\n out[j++] = w&255; w >>= 8;\n out[j++] = w&255;\n }\n break;\n case \"utf32be\":\n for(i = 0; i < len; ++i) {\n w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);\n if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);\n out[j+3] = w&255; w >>= 8;\n out[j+2] = w&255; w >>= 8;\n out[j+1] = w&255; w >>= 8;\n out[j] = w&255;\n j+=4;\n }\n break;\n case \"utf7\":\n for(i = 0; i < len; i++) {\n var c = isstr ? data.charAt(i) : data[i].charAt(0);\n if(c === \"+\") { out[j++] = 0x2b; out[j++] = 0x2d; continue; }\n if(SetD.indexOf(c) > -1) { out[j++] = c.charCodeAt(0); continue; }\n var tt = encode(1201, c);\n out[j++] = 0x2b;\n out[j++] = BM.charCodeAt(tt[0]>>2);\n out[j++] = BM.charCodeAt(((tt[0]&0x03)<<4) + ((tt[1]||0)>>4));\n out[j++] = BM.charCodeAt(((tt[1]&0x0F)<<2) + ((tt[2]||0)>>6));\n out[j++] = 0x2d;\n }\n break;\n default: throw new Error(\"Unsupported magic: \" + cp + \" \" + magic[cp]);\n }\n else throw new Error(\"Unrecognized CP: \" + cp);\n out = out.slice(0,j);\n if(!has_buf) return (ofmt == 'str') ? (out).map(sfcc).join(\"\") : out;\n if(!ofmt || ofmt === 'buf') return out;\n if(ofmt !== 'arr') return out.toString('binary');\n return [].slice.call(out);\n };\n var decode = function decode(cp, data) {\n var F; if((F=cpdcache[cp])) return F(data);\n if(typeof data === \"string\") return decode(cp, data.split(\"\").map(cca));\n var len = data.length, out = new Array(len), s=\"\", w=0, i=0, j=1, k=0, ww=0;\n var C = cpt[cp], D, M=\"\";\n if(C && (D=C.dec)) {\n for(i = 0; i < len; i+=j) {\n j = 2;\n s = D[(data[i]<<8)+ data[i+1]];\n if(!s) {\n j = 1;\n s = D[data[i]];\n }\n if(!s) throw new Error('Unrecognized code: ' + data[i] + ' ' + data[i+j-1] + ' ' + i + ' ' + j + ' ' + D[data[i]]);\n out[k++] = s;\n }\n }\n else if((M=magic[cp])) switch(M) {\n case \"utf8\":\n if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;\n for(; i < len; i+=j) {\n j = 1;\n if(data[i] < 128) w = data[i];\n else if(data[i] < 224) { w=(data[i]&31)*64+(data[i+1]&63); j=2; }\n else if(data[i] < 240) { w=((data[i]&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }\n else { w=(data[i]&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }\n if(w < 65536) { out[k++] = String.fromCharCode(w); }\n else {\n w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);\n out[k++] = String.fromCharCode(ww); out[k++] = String.fromCharCode(w);\n }\n }\n break;\n case \"ascii\":\n if(has_buf && Buffer.isBuffer(data)) return data.toString(M);\n for(i = 0; i < len; i++) out[i] = String.fromCharCode(data[i]);\n k = len; break;\n case \"utf16le\":\n if(len >= 2 && data[0] == 0xFF) if(data[1] == 0xFE) i = 2;\n if(has_buf && Buffer.isBuffer(data)) return data.toString(M);\n j = 2;\n for(; i+1 < len; i+=j) {\n out[k++] = String.fromCharCode((data[i+1]<<8) + data[i]);\n }\n break;\n case \"utf16be\":\n if(len >= 2 && data[0] == 0xFE) if(data[1] == 0xFF) i = 2;\n j = 2;\n for(; i+1 < len; i+=j) {\n out[k++] = String.fromCharCode((data[i]<<8) + data[i+1]);\n }\n break;\n case \"utf32le\":\n if(len >= 4 && data[0] == 0xFF) if(data[1] == 0xFE && data[2] === 0 && data[3] === 0) i = 4;\n j = 4;\n for(; i < len; i+=j) {\n w = (data[i+3]<<24) + (data[i+2]<<16) + (data[i+1]<<8) + (data[i]);\n if(w > 0xFFFF) {\n w -= 0x10000;\n out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));\n out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));\n }\n else out[k++] = String.fromCharCode(w);\n }\n break;\n case \"utf32be\":\n if(len >= 4 && data[3] == 0xFF) if(data[2] == 0xFE && data[1] === 0 && data[0] === 0) i = 4;\n j = 4;\n for(; i < len; i+=j) {\n w = (data[i]<<24) + (data[i+1]<<16) + (data[i+2]<<8) + (data[i+3]);\n if(w > 0xFFFF) {\n w -= 0x10000;\n out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));\n out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));\n }\n else out[k++] = String.fromCharCode(w);\n }\n break;\n case \"utf7\":\n if(len >= 4 && data[0] == 0x2B && data[1] == 0x2F && data[2] == 0x76) {\n if(len >= 5 && data[3] == 0x38 && data[4] == 0x2D) i = 5;\n else if(data[3] == 0x38 || data[3] == 0x39 || data[3] == 0x2B || data[3] == 0x2F) i = 4;\n }\n for(; i < len; i+=j) {\n if(data[i] !== 0x2b) { j=1; out[k++] = String.fromCharCode(data[i]); continue; }\n j=1;\n if(data[i+1] === 0x2d) { j = 2; out[k++] = \"+\"; continue; }\n // eslint-disable-next-line no-useless-escape\n while(String.fromCharCode(data[i+j]).match(/[A-Za-z0-9+\\/]/)) j++;\n var dash = 0;\n if(data[i+j] === 0x2d) { ++j; dash=1; }\n var tt = [];\n var o64 = \"\";\n var c1=0, c2=0, c3=0;\n var e1=0, e2=0, e3=0, e4=0;\n for(var l = 1; l < j - dash;) {\n e1 = BM.indexOf(String.fromCharCode(data[i+l++]));\n e2 = BM.indexOf(String.fromCharCode(data[i+l++]));\n c1 = e1 << 2 | e2 >> 4;\n tt.push(c1);\n e3 = BM.indexOf(String.fromCharCode(data[i+l++]));\n if(e3 === -1) break;\n c2 = (e2 & 15) << 4 | e3 >> 2;\n tt.push(c2);\n e4 = BM.indexOf(String.fromCharCode(data[i+l++]));\n if(e4 === -1) break;\n c3 = (e3 & 3) << 6 | e4;\n if(e4 < 64) tt.push(c3);\n }\n o64 = decode(1201, tt);\n for(l = 0; l < o64.length; ++l) out[k++] = o64.charAt(l);\n }\n break;\n default: throw new Error(\"Unsupported magic: \" + cp + \" \" + magic[cp]);\n }\n else throw new Error(\"Unrecognized CP: \" + cp);\n return out.slice(0,k).join(\"\");\n };\n var hascp = function hascp(cp) { return !!(cpt[cp] || magic[cp]); };\n cpt.utils = { decode: decode, encode: encode, hascp: hascp, magic: magic, cache:cache };\n return cpt;\n}));\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var MILLISECONDS_IN_MINUTE = 60000;\n\nfunction getDateMillisecondsPart(date) {\n return date.getTime() % MILLISECONDS_IN_MINUTE;\n}\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\n\n\nexport default function getTimezoneOffsetInMilliseconds(dirtyDate) {\n var date = new Date(dirtyDate.getTime());\n var baseTimezoneOffset = Math.ceil(date.getTimezoneOffset());\n date.setSeconds(0, 0);\n var hasNegativeUTCOffset = baseTimezoneOffset > 0;\n var millisecondsPartOfTimezoneOffset = hasNegativeUTCOffset ? (MILLISECONDS_IN_MINUTE + getDateMillisecondsPart(date)) % MILLISECONDS_IN_MINUTE : getDateMillisecondsPart(date);\n return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset;\n}","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport Vue, { PropType } from 'vue'\n\nexport type NumberOrNumberString = PropType\n\nexport default Vue.extend({\n name: 'measurable',\n\n props: {\n height: [Number, String] as NumberOrNumberString,\n maxHeight: [Number, String] as NumberOrNumberString,\n maxWidth: [Number, String] as NumberOrNumberString,\n minHeight: [Number, String] as NumberOrNumberString,\n minWidth: [Number, String] as NumberOrNumberString,\n width: [Number, String] as NumberOrNumberString,\n },\n\n computed: {\n measurableStyles (): object {\n const styles: Record = {}\n\n const height = convertToUnit(this.height)\n const minHeight = convertToUnit(this.minHeight)\n const minWidth = convertToUnit(this.minWidth)\n const maxHeight = convertToUnit(this.maxHeight)\n const maxWidth = convertToUnit(this.maxWidth)\n const width = convertToUnit(this.width)\n\n if (height) styles.height = height\n if (minHeight) styles.minHeight = minHeight\n if (minWidth) styles.minWidth = minWidth\n if (maxHeight) styles.maxHeight = maxHeight\n if (maxWidth) styles.maxWidth = maxWidth\n if (width) styles.width = width\n\n return styles\n },\n },\n})\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import './VProgressLinear.sass'\n\n// Components\nimport {\n VFadeTransition,\n VSlideXTransition,\n} from '../transitions'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { FunctionalComponentOptions } from 'vue/types'\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n Colorable,\n PositionableFactory(['absolute', 'fixed', 'top', 'bottom']),\n Proxyable,\n Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-progress-linear',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n backgroundColor: {\n type: String,\n default: null,\n },\n backgroundOpacity: {\n type: [Number, String],\n default: null,\n },\n bufferValue: {\n type: [Number, String],\n default: 100,\n },\n color: {\n type: String,\n default: 'primary',\n },\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n query: Boolean,\n reverse: Boolean,\n rounded: Boolean,\n stream: Boolean,\n striped: Boolean,\n value: {\n type: [Number, String],\n default: 0,\n },\n },\n\n data () {\n return {\n internalLazyValue: this.value || 0,\n }\n },\n\n computed: {\n __cachedBackground (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.backgroundColor || this.color, {\n staticClass: 'v-progress-linear__background',\n style: this.backgroundStyle,\n }))\n },\n __cachedBar (): VNode {\n return this.$createElement(this.computedTransition, [this.__cachedBarType])\n },\n __cachedBarType (): VNode {\n return this.indeterminate ? this.__cachedIndeterminate : this.__cachedDeterminate\n },\n __cachedBuffer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__buffer',\n style: this.styles,\n })\n },\n __cachedDeterminate (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: `v-progress-linear__determinate`,\n style: {\n width: convertToUnit(this.normalizedValue, '%'),\n },\n }))\n },\n __cachedIndeterminate (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n 'v-progress-linear__indeterminate--active': this.active,\n },\n }, [\n this.genProgressBar('long'),\n this.genProgressBar('short'),\n ])\n },\n __cachedStream (): VNode | null {\n if (!this.stream) return null\n\n return this.$createElement('div', this.setTextColor(this.color, {\n staticClass: 'v-progress-linear__stream',\n style: {\n width: convertToUnit(100 - this.normalizedBuffer, '%'),\n },\n }))\n },\n backgroundStyle (): object {\n const backgroundOpacity = this.backgroundOpacity == null\n ? (this.backgroundColor ? 1 : 0.3)\n : parseFloat(this.backgroundOpacity)\n\n return {\n opacity: backgroundOpacity,\n [this.isReversed ? 'right' : 'left']: convertToUnit(this.normalizedValue, '%'),\n width: convertToUnit(this.normalizedBuffer - this.normalizedValue, '%'),\n }\n },\n classes (): object {\n return {\n 'v-progress-linear--absolute': this.absolute,\n 'v-progress-linear--fixed': this.fixed,\n 'v-progress-linear--query': this.query,\n 'v-progress-linear--reactive': this.reactive,\n 'v-progress-linear--reverse': this.isReversed,\n 'v-progress-linear--rounded': this.rounded,\n 'v-progress-linear--striped': this.striped,\n ...this.themeClasses,\n }\n },\n computedTransition (): FunctionalComponentOptions {\n return this.indeterminate ? VFadeTransition : VSlideXTransition\n },\n isReversed (): boolean {\n return this.$vuetify.rtl !== this.reverse\n },\n normalizedBuffer (): number {\n return this.normalize(this.bufferValue)\n },\n normalizedValue (): number {\n return this.normalize(this.internalLazyValue)\n },\n reactive (): boolean {\n return Boolean(this.$listeners.change)\n },\n styles (): object {\n const styles: Record = {}\n\n if (!this.active) {\n styles.height = 0\n }\n\n if (!this.indeterminate && parseFloat(this.normalizedBuffer) !== 100) {\n styles.width = convertToUnit(this.normalizedBuffer, '%')\n }\n\n return styles\n },\n },\n\n methods: {\n genContent () {\n const slot = getSlot(this, 'default', { value: this.internalLazyValue })\n\n if (!slot) return null\n\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__content',\n }, slot)\n },\n genListeners () {\n const listeners = this.$listeners\n\n if (this.reactive) {\n listeners.click = this.onClick\n }\n\n return listeners\n },\n genProgressBar (name: 'long' | 'short') {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n [name]: true,\n },\n }))\n },\n onClick (e: MouseEvent) {\n if (!this.reactive) return\n\n const { width } = this.$el.getBoundingClientRect()\n\n this.internalValue = e.offsetX / width * 100\n },\n normalize (value: string | number) {\n if (value < 0) return 0\n if (value > 100) return 100\n return parseFloat(value)\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-progress-linear',\n attrs: {\n role: 'progressbar',\n 'aria-valuemin': 0,\n 'aria-valuemax': this.normalizedBuffer,\n 'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue,\n },\n class: this.classes,\n style: {\n bottom: this.bottom ? 0 : undefined,\n height: this.active ? convertToUnit(this.height) : 0,\n top: this.top ? 0 : undefined,\n },\n on: this.genListeners(),\n }\n\n return h('div', data, [\n this.__cachedStream,\n this.__cachedBackground,\n this.__cachedBuffer,\n this.__cachedBar,\n this.genContent(),\n ])\n },\n})\n","import VProgressLinear from './VProgressLinear'\n\nexport { VProgressLinear }\nexport default VProgressLinear\n","import Vue, { VNode } from 'vue'\nimport VProgressLinear from '../../components/VProgressLinear'\n\ninterface colorable extends Vue {\n color?: string\n}\n\n/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\n/* @vue/component */\nexport default Vue.extend().extend({\n name: 'loadable',\n\n props: {\n loading: {\n type: [Boolean, String],\n default: false,\n },\n loaderHeight: {\n type: [Number, String],\n default: 2,\n },\n },\n\n methods: {\n genProgress (): VNode | VNode[] | null {\n if (this.loading === false) return null\n\n return this.$slots.progress || this.$createElement(VProgressLinear, {\n props: {\n absolute: true,\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n height: this.loaderHeight,\n indeterminate: true,\n },\n })\n },\n },\n})\n","/*!\n * Vue.js v2.6.12\n * (c) 2014-2020 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return ''\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n process.env.NODE_ENV !== 'production' &&\n // skip validation for weex recycle-list child component props\n !(false)\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals. ' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g.